mcu-debug-mcp
Provides debugging support for Arm Cortex-M microcontrollers, including fault register decoding, stack unwinding, SVD register decoding, and ARMCC compiler error parsing.
Provides tools for ESP32/ESP-IDF embedded debugging, including ESP-IDF and ESP-AT error code lookup, ESP32 pin constraint checks, esptool flashing support, ESP32 board knowledge, and log analysis for ESP panic, brownout, watchdog, flash corruption, and CWJAP errors.
Provides parsing and diagnostic support for GNU toolchain outputs, including GNU ld .map files and GCC compiler errors.
Provides MQTT error code lookup for PubSubClient rc codes and log analysis for MQTT failure patterns.
Provides project detection and ecosystem-specific knowledge for PlatformIO, including identification features, build artifacts, log signatures, and common pitfalls.
Provides ecosystem recognition and knowledge for Rust embedded projects using defmt, including identification features, build artifacts, log signatures, and pitfalls.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcu-debug-mcpread COM3 serial output and diagnose why the board keeps rebooting"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcu-debug-mcp · 嵌入式调试 MCP(领域级)
让 AI"看到并看懂"你手上的板子:串口读写 + 故障模式库(45 条规则)+ 烧录失败模式直译 + Modbus 帧解析 + 编译报错解析 + 引脚冲突检测(三引擎)+ 板级知识库 + 波特率自动探测 + AT 序列回归 + 双口对录 + 会话持久化 + RTT 通道 + 烧录桥接 + 寄存器位域解码 + 调试器探测 + 预验证驱动模板库(9 款)+ 器件选型库(按接口/地址/时序要求) + 外设 API 用法层(初始化顺序硬要求) + 错误码统一查询(6 张表·带出处) + 报文解析(自定义二进制帧 / NMEA-GPS) + 工程结构与工具链探测 + 会话日志治理与交付报告。共 59 个工具 + 16 个 MCP resources + 6 个 prompts(8 静态 resources + 8 模板 resources)。
和"直接问 AI"的本质区别:AI 不再听你转述"传感器好像不太对",而是亲自读到串口里的真实字节——AT 指令返回了什么、数据是全 0 还是乱码、程序是不是在反复重启、Keil 为什么烧不进去——然后按出厂预置的故障模式库给出诊断和排查步骤。引脚分配前用数据手册级映射表核对(能抓 AI 幻觉接线)。驱动代码来自验证过的模板库(纯函数 PC 可测 + Python 交叉验证),不是 AI 现编的。
安全与隔离:默认不碰硬件
这个 MCP 的工具会真的打开串口、写字节、烧 flash。开发机上常年挂着正在使用的设备 (UART 桥、调试器 CDC 口、正在跑的调试会话),一次误调用就能打断它们。所以默认档位是只读:
项 | 默认 | 说明 |
隔离档位 | readonly | 读/枚举允许;写串口、AT、波特率扫描、双口对录、烧录一律拒绝,并在拒绝信息里写清「为什么拒 + 什么风险 + 怎么放开」 |
端口名单 | 未设置 |
|
不可逆操作 | 双闸门 | 烧录要 |
测试隔离 | 强制 | 测试进程锁 readonly + 端口全禁 + 真实串口构造被替换;跑测试不会碰你的设备 |
MCU_DEBUG_MCP_MODE=write # 放开写权限(做真机操作时)
MCU_DEBUG_MCP_PORT_DENY=COM6,COM28 # 把在用的口锁死(即使放开了写权限也打不开)
MCU_DEBUG_MCP_NO_TOUCH_DTR=1 # 打开端口时不翻转 DTR/RTS,尽量不触发开发板自动复位完整的风险矩阵(每个操作会做什么、需要什么才能执行、哪些操作没纳入闸门及原因)见
SECURITY.md。随时可用 env_status 查当前档位、名单与「因此被禁用了哪些操作」。
Related MCP server: jlink-mcp
与同类工具的差异(2026-09 竞品调研结论)
同类串口 MCP(qarnet/serial-mcp、mcp-serial、uart-mcp 等)只做「串口通道」;本项目的差异化在知识层:
能力 | 串口通道类 MCP | 本项目 |
串口读写 | ✅(普遍更全) | ✅ expect 模式等待响应 |
日志分析 | ❌ 把原始日志丢给 LLM 现看 | ✅ 45 条模式库(30 内置 + 15 外置),规则出厂预置+带排查步骤 |
烧录失败诊断 | ❌ | ✅ ST-Link 连接失败/Keil 找不到算法/esptool 进不了下载模式/RDP 读保护…8 条规则族 |
错误码查询 | ❌ | ✅ error_code_lookup:ESP-IDF esp_err_t / ESP-AT 通用响应 / CWJAP / CME / PubSubClient rc / Modbus 异常码,共 6 张表 51 条,每条带出处;未收录明说查不到 |
编译/链接报错解析 | ❌ | ✅ gcc / Keil / armcc / MSVC 四种风格 |
引脚冲突检测 | ❌ | ✅ pin_check 三引擎:F1 固定复用 / F4 AF 表 / ESP32 io_mux 硬约束,可交叉板载外设 |
板级知识库 | ❌ | ✅ board_get:板载外设占用+坑清单按翻车率排序+供电说明(蓝药丸/黑药丸已收录) |
会话持久化 | ❌ | ✅ 串口会话自动落盘 logs/,隔多少轮对话都能 sessions_list + sessions_get 回看现场 |
波特率自动探测 | ❌ | ✅ baudrate_autodetect 逐档评分排序(支持离线日志样本评分) |
AT 批量回归 | ❌ | ✅ at_sequence 逐条断言 PASS/FAIL + serial_pair_record 双口对录时间线 |
预验证驱动库 | ❌ | ✅ 9 款,纯函数分离+交叉验证+坑清单+答辩加分点 |
寄存器位域解码 | embedded-mcp 有 | ✅ 支持手工 fields + CMSIS-SVD 文件 |
RTT 通道 | ❌ | ✅ rtt_read(pyocd 桥接,实验性) |
知识库质量保障 | ❌ | ✅ validate_knowledge.py 机械核验(引脚数/唯一性/复用唯一/正则可编译),CI 可挂 |
知识库可扩展 | ❌ | ✅ 故障模式/错误码表/引脚映射/板级知识全部 JSON 外置,社区可贡献(逐条标 source) |
工具清单(59 个)
工具 | 功能 | 依赖 |
serial_list | 枚举串口,识别 CH340/CP2102/FT232 并给驱动建议 | pyserial |
serial_open / serial_close | 打开/关闭串口(返回句柄;会话日志自动落盘,落点见 env_status) | pyserial |
serial_read | 读数据(expect 正则命中即返回 + idle_ms 静默超时 + 总超时),文本+HEX 双视图 | pyserial |
serial_send | 发指令(AT 自动加 \r\n;支持 HEX;expect 等响应),自动读回 | pyserial |
serial_session_log | 取全量会话日志 | pyserial |
sessions_list | 列出已落盘会话日志(新→旧),隔轮次可回看 | 无 |
sessions_get | 回看指定会话日志内容(默认尾部 200 行),可喂 analyze_log | 无 |
logs_prune | 会话日志保留策略与清理入口(默认 dry-run 只列不删;真删需 write 档 + confirm=True) | 无 |
baudrate_autodetect | 波特率自动探测:逐档采样评分排序给推荐(log_text 可离线评分) | pyserial |
at_sequence | AT 指令序列批量回归:逐条正则断言 PASS/FAIL/TIMEOUT + 回显尾 | pyserial |
serial_pair_record | 双口对录:两串口时间线交错录制(RS485 主从/双机对话),文本+HEX | pyserial |
analyze_log | 45 条故障模式分析(见下),每条给人话诊断+排查步骤 | 无 |
modbus_crc | Modbus RTU CRC16 计算/校验(RS485 毕设) | 无 |
modbus_parse | Modbus RTU 帧解析:拆寄存器值/线圈,异常响应直译异常码 01-06 | 无 |
error_code_lookup | 错误码统一查询(esp_idf / at_common / cwjap / cme / modbus_exception / mqtt_rc):释义+排查方向+出处;未收录明说查不到、不猜 | 无 |
pin_check | 引脚冲突检测(三引擎):幻觉接线/同功能双占/SWD 挪用/remap 档/ESP32 硬约束/板载外设交叉 | 无 |
pinmap_list / pinmap_get | 引脚知识库浏览(列表 / JSON 原文) | 无 |
board_list / board_get | 板级知识库:板载外设+坑清单+供电说明(bluepill / blackpill_f411 / esp32_devkitc32) | 无 |
probe_list | 探测调试器与目标芯片 | pyocd(可选) |
rtt_read | RTT 通道读日志(⚠ 实验性,固件需含 SEGGER RTT 控制块) | pyocd(可选) |
flash_tool_detect | 检测本机烧录工具 | 无 |
flash_firmware | 烧录固件,桥接 STM32_Programmer_CLI/esptool/st-flash/pyocd,默认 dry-run;烧完自动复位 | 各工具(可选) |
driver_list / driver_get | 预验证驱动模板库(9 款,含接线表+验证记录) | 无 |
driver_wiring | 驱动接线知识库:接线表+头号坑+日志解读+答辩加分点 | 无 |
component_list / component_get | 器件选型库:按接口(i2c / uart / timer_pwm / gpio_timing)列器件,带 7 位地址、微秒时序要求、头号坑、出厂验证记录;数据全部派生自预验证驱动库的 meta.json 与 *_port.h,零凭记忆条目 | 无 |
peripheral_api_list / peripheral_api_get | 外设 API 用法层:每个驱动要占哪些外设(I2C1 / TIM1 / UART2…)+ 初始化顺序硬要求(取自适配层注释原句,如「工程里先完成 HAL_I2C_MspInit 与 hi2c1 初始化」) | 无 |
decode_register | 寄存器值按位域拆解 | 无 |
decode_register_svd | 按 CMSIS-SVD 文件解码位域(含枚举提示) | 无 |
decode_fault | Cortex-M 故障寄存器解码(CFSR/HFSR/BFAR/MMFAR):20 位逐条给人话成因+排查;三类陷阱在输出里强制拦截(见下) | 无 |
parse_map | .map 解析(GNU ld / Keil / IAR):段占用 + 最大符号 + 栈深线索;认不出格式就说认不出,不猜;主机 map 会报警 | 无 |
symbol_lookup | 地址→符号反查:给出函数名+偏移;越界/落在空隙/野指针拒绝硬套函数名 | 无 |
stack_unwind | 栈回溯:硬件 8 字栈帧还原调用链 + EXC_RETURN 判栈类型(MSP/PSP、标准/扩展帧)+ 跑飞识别 | 无 |
env_status | 环境自检:依赖 / 串口(含 VID:PID 识别与 Unix 权限)/ 烧录器 / 知识库根与条目数 / 版本,一次问清;探不到的会明说为什么探不到 | 无 |
ecosystem_list / ecosystem_get | 生态/框架识别知识库(Zephyr / RT-Thread / PlatformIO / Keil / IAR / Rust defmt):识别特征 + 构建产物 + 日志签名 + 各自的坑,条目级带出处 | 无 |
project_detect | 工程结构识别:按标志文件/后缀认生态( | 无 |
toolchain_status | 工具链探测:编译器 / GDB / SDK 逐个探版本;「未发现」不等于环境坏了——会说明 IDE 自带工具不一定暴露到命令行 | 无 |
report_session | 交付物生成:会话日志 → Markdown 报告(故障分析 + 原始日志附后);目标已存在不默认覆盖 | 无 |
nmea_parse | NMEA 0183 解析(GPS/北斗):GGA/RMC/GSA/GSV/VTG/GLL 逐句给人话(经纬度度分+十进制/定位质量/星数/HDOP/速度);每句验 XOR,不过的明说不可信;非 NMEA 行单独点名跳过 | 无 |
frame_parse | 通用二进制帧解析:帧头 + 长度字段切帧,支持 sum8 / CRC16-Modbus;校验字节不计入长度字段(Modbus 就靠这条);切不动/截断/垃圾字节逐条报出,绝不静默丢 | 无 |
chip_info | 芯片身份与存储信息:型号 / Device ID / 修订 / 内核类型 / Flash 容量 / 96 位 UID / 选项字节(读保护、TZEN、写保护组);默认 hotplug 档不复位不停内核,要 UID 得显式 | STM32_Programmer_CLI |
reset_reason | 复位原因 + 内核运行状态:RCC_RSR 逐位直译(引脚/欠压/软件/看门狗/低功耗)并给可执行建议;讲清标志是「累积」的——多个位同时为 1 ≠ 一次同时发生; | STM32_Programmer_CLI |
flash_verify | 烧录后逐字节校验:把文件与芯片上实际内容比对,报出首个不一致的偏移 + 绝对地址 + 前后 8 字节上下文;支持 .bin / .hex / .elf(ELF 按段表偏移取值);只读走 hotplug | STM32_Programmer_CLI |
timing_analysis | 时序/数据率分析:丢帧(序号跳号)、卡顿(间隔离群)、节拍漂移(累计变化量 vs 实际离散度);窗口不足一个时间戳刻度时明说不给指标,不编数据率 | 无 |
stream_capture | 长时录测:串口持续采集,按到达时刻逐行打时间戳落盘(无时间戳 = 时序信息永久丢失);产物可直接喂 | pyserial |
bridge_probe | 桥自检:确认那块跑桥固件的 MCU 活着、认 MCUDBG/1 协议、支持哪些总线——纯握手不碰总线;绝不自动扫口找桥(实测过往别人正在跑的固件里灌探测字节的后果) | pyserial |
i2c_scan | I2C 总线扫描:逐地址 ACK 探测,给出 7 位地址 + 读/写地址 + 可能的器件提示(最小表,逐条来自器件数据手册,只提示不判定);扫不到时给 5 步排查清单(上电/接反/上拉/复用器/共地) | 桥固件 + pyserial |
i2c_read_reg | I2C 读寄存器("这颗 IMU 活着吗"第一动作);读回全 0 / 全 0xFF 分别给不同的成因清单,不代用户判"器件坏了" | 桥固件 + pyserial |
i2c_write_reg | I2C 写寄存器,可选 verify=True 回读比对(默认关:只写寄存器回读必然不一致,默认开会造成假 FAIL);7 位地址校验拦下 8 位写地址 | 桥固件 + pyserial |
spi_scan | SPI 扫描:逐 CS 读 JEDEC ID(0x9F),解厂商/容量;明说 SPI 没有地址概念,扫不到传感器/ADC 属正常;空槽(全 0/全 1)如实区分"读回全 0"和"MISO 悬空" | 桥固件 + pyserial |
spi_read_reg | SPI 按命令字读 N 字节(0x9F 读 JEDEC / 传感器 WHO_AM_I 都通用) | 桥固件 + pyserial |
onewire_scan | 1-Wire 搜索 ROM(AN187 算法 + CRC8 校验):列出 ROM 码并解家族码(DS18B20 等);搜不到先怀疑数据线缺 4.7k 上拉 | 桥固件 + pyserial |
rs485_send | RS485 发送(桥负责 DE 时序);输出里强制写明"只证明发得出去,不证明对端收到"——不当成链路已通的证据 | 桥固件 + pyserial |
总线工具需要一块跑 MCUDBG/1 桥固件的 MCU 当执行端:固件源码在
tools/bridge_fw/(NUCLEO-H563ZI 现成,附"编译 → 烧录 → 真机验证 → 自动恢复原固件"一条龙脚本)。 为什么不自动扫串口找桥、为什么 SP-Link bridge 和 FT2232H 走不通,见core.py总线工具区块头注释。 |
MCP resources(16 个:8 静态 + 8 模板)
知识库只读浏览,AI 可主动引用——每类知识都是「清单 + 明细」两段:清单看有哪些,明细读原文(条目级 source 出处一并可见)。
知识库 | 清单 | 明细 |
预验证驱动 |
|
|
器件选型库 |
|
|
外设 API 用法 |
| (取自各驱动 |
引脚复用映射 |
|
|
板级知识 |
|
|
错误码直译表 |
|
|
故障位域表 |
|
|
生态/框架识别 |
|
|
pin_check 三引擎
engine | 适用 | 检查逻辑 |
fixed_mux | F1 系列(stm32f103c8t6) | 固定复用表:功能默认档全局唯一,remap 档提示,SWD 挪用警告 |
af_table | F4 系列(stm32f411ceu6) | AF 复用表:一功能可映射多脚,按表核对 |
io_mux | ESP32 系列(esp32dev) | GPIO Matrix 任意路由,查硬约束:flash 保留脚(GPIO6-11,必砖级)/ 仅输入脚(GPIO34-39)/ strapping 脚(0/2/5/12/15) |
可带 board 参数交叉检查板载外设占用(如 pin_check("stm32f103c8t6", {...}, board="bluepill")——PC13 被板载 LED 占用会警告)。
analyze_log 覆盖的模式(45 条)
内置 30 条:
总线/传感器层(13):MOJIBAKE 乱码→波特率 · AT_ERROR · AT_NO_RESP · BOOT_LOOP · HARDFAULT+CFSR 位级解读 · SENSOR_ZERO 全 0 · SENSOR_FF 全 FF · DS18B20_85 恒 85°C · DHT_TIMEOUT · NEG_INVALID 错误码负值 · I2C_NACK · I2C_SCAN_EMPTY 扫描零设备 · ADC_SATURATED 恒满量程
ESP 生态(5):ESP_PANIC Guru Meditation · ESP_BROWNOUT 掉电 · ESP_WDT 看门狗 · ESP_FLASH_CORRUPT 镜像损坏 · CWJAP_ERR 连 WiFi 错误码 1-4
AT/网络协议(4):AT_CME_ERROR(3GPP 码表)· NET_LINK WiFi 断链 · MQTT_FAIL(PubSubClient rc 码表)· HTTP_ERR 4xx/5xx/curl
RTOS/系统层(4):RTOS_ASSERT 断言 · RTOS_STACK_OVF 栈溢出 · HAL_ASSERT STM32 HAL 参数断言 · UART_FRAMING 帧错误/溢出
开发期报错(3):COMPILE_UNDEF 链接未定义符号 · COMPILE_SYNTAX 编译错误(gcc/Keil/armcc/MSVC)· SD_INIT_FAIL
外置 15 条(knowledge/fault_patterns.json,社区可贡献):
烧录失败族(8):STLINK_CONNECT_FAIL · KEIL_NO_ALGO 找不到 Flash 算法 · KEIL_FLASH_DL_FAIL 下载失败 · OPENOCD_TARGET_FAIL · ESPTOOL_FAIL 进不了下载模式 · PYOCD_PROBE_FAIL · FLASH_READOUT_PROTECT 读保护激活 · SWD_COMM_FAIL 调试中失联
总线/网络族(6,v4 新增):CAN_BUS_OFF(bus-off/error passive,终端电阻 60Ω/ACK 原理)· WIFI_RECONNECT_STORM(断连 ≥3 次计数门槛,供电头号原因)· BLE_CONN_LOST(连接参数/MTU/断开原因码 0x08/0x13)· JLINK_FAIL(克隆许可/DLL 冲突)· DNS_FAIL(DNS 配置/内网域名)· USB_ENUM_FAIL(DP 1.5kΩ 上拉/48MHz 晶振/R10)
串口报错贴进 analyze_log 一样能分析——编译报错、烧录失败日志直接粘进来就行。
预验证驱动库(9 款)
dht11(温湿度)· hcsr04(超声波)· ds18b20(单总线温度,CRC8+补码换算)· mpu6050(六轴,量程换算+静止自检)· esp8266at(AT 响应解析库,IPD 帧+错误码)· ssd1306(OLED,帧缓冲+页寻址)· servo_sg90(舵机,角度→脉宽→定时器 CCR)· stepper_28byj48(步进电机,精确减速比 63.684:1)· hc05(蓝牙 AT 助手,响应分类+命令生成)
每个驱动:纯函数与总线时序分离(PC 可测)· wiring.md(接线表+头号坑清单按翻车率排序+答辩加分点)· meta.json 如实标注验证状态。
会话持久化("记得住")
serial_open 自动在 logs/ 落盘会话日志(端口/波特率/时间戳元信息 + 全部收发内容),读写时实时追加。调试被中断、换会话、隔几天之后:sessions_list 列出历史会话 → sessions_get 回看现场 → 整段喂 analyze_log。只读文件系统下静默降级,不影响主流程。
安装
# 方式一:PyPI / pip(发布形态,src 正规包——不污染 site-packages 顶层)
pip install mcu-debug-mcp # 核心(MCP 框架)
pip install "mcu-debug-mcp[all]" # + pyserial(串口)+ pyocd(调试器/RTT)
# 方式二:从源码目录安装
pip install .[all]
# 方式三:开发模式(改代码即时生效;测试/审计直接从 src/ 导入)
pip install -e .[all]
# 装完后用 console script 起服务(等价于 python -m mcu_debug_mcp.server)
mcu-debug-mcp客户端配置
一键安装(Claude Code / Claude Desktop / Cursor)
# Claude Code
pip install "mcu-debug-mcp[all]"
claude mcp add mcu-debug-mcp -- python -m mcu_debug_mcp.serverClaude Desktop(claude_desktop_config.json)/ Cursor(mcp.json):
{
"mcpServers": {
"mcu-debug-mcp": {
"command": "python",
"args": ["-m", "mcu_debug_mcp.server"],
"env": { "MCU_DEBUG_MCP_MODE": "readonly" }
}
}
}默认
readonly档:读/枚举可用,写串口、烧录等硬件操作被拒并说明如何放开。 调试需要真机写入时再加"MCU_DEBUG_MCP_MODE": "write"+MCU_DEBUG_MCP_PORT_DENY锁住在用的口(见上文安全表)。
WorkBuddy(三步上手)
第 1 步:装包(本机需有 Python 3.10+;没有就让 WorkBuddy 代装,见下方提示词)
pip install "mcu-debug-mcp[all]"第 2 步:配连接器(连接器 → 自定义连接器 → 配置 MCP → 粘贴 → 保存):
{
"mcpServers": {
"mcu-debug-mcp": {
"command": "python",
"args": ["-m", "mcu_debug_mcp.server"]
}
}
}若
python不在 PATH,把command换成 python.exe 全路径; 或改用 console script:"command": "mcu-debug-mcp.exe"的全路径 (pip --user 安装在%APPDATA%\Python\Python312\Scripts\,全局安装在 Python 目录的Scripts\)。
第 3 步:Trust 信任(连接器列表点「信任」启用)→ 新开任务说"列出 mcu-debug-mcp 下的所有工具"验证。
让 WorkBuddy 代装(复制这段发给 WorkBuddy 即可)
帮我安装 mcu-debug-mcp:执行 pip install "mcu-debug-mcp[all]",
装好后把 {"mcpServers": {"mcu-debug-mcp": {"command": "python",
"args": ["-m", "mcu_debug_mcp.server"]}}} 写入 MCP 配置并告诉我如何 Trust 启用。其他客户端
Claude Desktop / Cursor / Windsurf 同格式(python -m mcu_debug_mcp.server)。
Cline 安装参考本 README(llms-install 兼容)。
验证状态(2026-10-13 复验,v4.5.5)
模块 | 验证方式 | 状态 |
analyzer 异常模式库(30 内置 + 15 外置) | tests/test_analyzer.py:99 项断言(正例命中+计数门槛+不误报+永不抛异常) | ✅ 本机实测通过 |
驱动纯函数算法(9 款驱动全量) | tests/test_driver_logic_py.py:49 项断言(与 C 实现同源对拍) | ✅ 本机实测通过 |
9 款 C 驱动编译 + 逻辑测试 | tests/run_c_tests.py(gcc 16.2.0 mingw64):107 checks, 0 failed,9 款全部 -Wall -Wextra 零警告 | ✅ 本机实测通过 |
串口读写 + expect/idle_ms(loop:// 回环) | tests/test_serial_tools.py TestSerialLoop:全过 0 skip(Python 3.12 + pyserial 3.5) | ✅ 本机实测通过 |
modbus/pin_check 三引擎/boards/sessions/RTT 降级 | tests/test_serial_tools.py | ✅ 本机实测通过 |
知识库数据核验 | tests/validate_knowledge.py(引脚数/唯一性/fixed_mux 功能全局唯一/SWD 一致性/onboard pin 字段/正则可编译/条目级 source 强制) | ✅ 0 错误(曾抓出 3 处 F103 录入错误) |
知识库条目级溯源 | 15 个知识文件 250 条数据全部带条目级 source;校验器强制(注入缺 source 必报错),并有测试保证注入后文件逐字复原(防止测试改写手写排版) | ✅ 本机实测通过 |
server.py MCP 注册层(59 工具 + 16 resources + 6 prompts) | 真 MCP 客户端 stdio 握手实测: | ✅ 本机实测通过 |
MCP 协议层 + 资源层真机 | 16 个资源全部 | ✅ 本机实测通过 |
符号反查 / 栈回溯(真工具链夹具) |
| ✅ 本机实测通过 |
离线全量(Python 全套 944 项) |
| ✅ 本机实测通过 |
隔离与安全(37 条) |
| ✅ 本机实测通过 |
排故链四工具(fault/map/符号/栈) | tests/test_fault_chain.py:67 项断言,其中 30+ 条是「必须拒绝给结论」的假答案防线;从零删掉 build_tmp 也能自举(setUpModule 现场 gcc 生成夹具) | ✅ 本机实测通过 |
真机验收夹具(N-15) |
| ✅ 真机实测通过 |
真机联调(硬件相关项) | 见下方清单;已跑:4/6/7/8/10/11 部分 + 13(NUCLEO-H563ZI,一键全链) | ✅ 部分完成(见清单标注) |
MCP 真机实测抓出的四个真问题(已修,均为"看似合理的假通过"类):
baudrate_autodetect在 USB CDC 口上原理上无意义,必须先识别并短路(2026-09-21 师兄指出 ESP32 用的是 USB CDC)。 USB CDC 走芯片自带 USB 外设(CDC ACM),波特率参数不参与数据路径,各档收到的字节流完全相同 ⟹ 所谓"各档评分"只是同一批字节被反复读。 实测铁证:COM4 上同一波特率(115200)连测 3 轮全 0 字节,而另一次 9600 拿到 88064 字节——同波特率结果从 88KB 到 0,差异只来自设备当时有没有在输出。 ⟹ 该口扫档 = 在测"这次打开时设备有没有在说话",纯随机。原实现给的"9 档同分 0.99"主因也不是采样不足(我上一版归因偏了),而是根本没有波特率差异。 修法:新增_port_baud_relevance(),按 VID/PID 识别 CDC(303A:1001Espressif、2E8A:*RP2040 等)与 UART 桥(0403:6010FT2232H、10C4:EA60CP210x、1A86:7523CH340、1366:0105J-Link 等),CDC 口直接短路并给出「该口不用管波特率 / 读不到别换档 / 真要判必须接独立 UART 桥听 TX 脚」三步指引;serial_open也附同类提示。显式传candidates可强行扫(怀疑枚举成 CDC 实为桥的场合)。同时给analyze_log的MOJIBAKE诊断加了 USB CDC 例外(原建议「把波特率逐个换」在该口是纯无效动作)。baudrate_autodetect在真 UART 上自信地给错档(COM4 实测,判别力门禁的由来):11 个候选里 9 个同分 0.99,工具推荐460800,真实是115200;而正确的 115200 反而排最低(0.071)。 根因链:① 打开串口翻转 DTR/RTS ⟹ ESP32 复位 ⟹ 每个档位收到同一段纯 ASCII ROM 启动日志;②if len(buf) > 2048: break在应用数据到达前退出;③ 同分时稳定排序回退到候选表顺序,而候选表是降序的 ⟹ 永远推荐最高档。 修法:采样上限 2048→8192;新增_BAUD_MIN_MARGIN = 0.10判别力门禁——最高分与次高分差距不足门限时,明确输出「★判不出来……别照它改代码」并给手工确认步骤,而不是硬推一个。at_sequence/serial_read/serial_send的expect是全文子串搜索 ⟹ 假 PASS(COM4 实测):设备跑的是 BQ27421 电量计固件、根本没有 AT 应答,但日志行I (371) led: init OK R=IO21 G=IO48 B=IO47里含 "OK" ⟹ 判[PASS]。 修法:新增_at_line_match(),默认 整行匹配(行首尾允许空白,re.fullmatch),并回显「命中行: …」便于核对;确需旧行为可在该步骤写{"loose": true}。修复后同场景返回[TIMEOUT],而loose=true对照组仍[PASS]—— 两相对照即为铁证。pin_check的 io_mux 引擎(ESP32)不校验引脚存在性 ⟹ 拼错引脚名给"通过":{"GPIO999": "GPIO"}返回「✅ 任意路由(GPIO Matrix)… 结论:全部通过,可以按此接线」。fixed_mux引擎(STM32)有「该 MCU 没有此引脚」的拦截,两个引擎判定口径不对称,任何手滑拼写(GPI08)或幻觉引脚都会拿到"通过"结论。 修法:io_mux 分支加引脚存在性前置校验,并列出相近的已知引脚,结论改为「必须改」。
同时并存的可用性缺陷(未改代码,需决策)——参数名/参数集与直觉不符:
analyze_log(log_text=) 不是 text;modbus_crc(hex_frame=) 不是 data;pin_check(pins=) 不是 assignments;flash_firmware(file_path=) 不是 firmware;at_sequence(steps=) 且步骤内是 cmd 不是 send、timeout_s 不是 wait_s。
另有一处参数集不一致(已修):core.baudrate_autodetect 有 candidates 但 server.py 的 MCP 工具签名未暴露 ⟹ MCP 客户端无法「强行扫」,文档承诺无法兑现。已补上 candidates 参数。
首次调用按直觉猜参数名的失败率极高(本轮实测猜错 7 次全部报 pydantic 校验错)。建议在 README/工具描述里补「易错参数名对照表」,或在 server.py 加别名兼容。
排故链(Cortex-M 故障链)实测抓出的真问题(已修,均为"看似合理的假答案"类,2026-09-22):
这一批全部是靠真实 gcc 生成的两份 .map(主机 x86 + 目标 ARM)跑出来才暴露的,单测的 happy path 一条都测不出:
symbol_lookup把0xdeadbeef反查成app_state+0xbeadb817并打勾 ✓。 根因:GNU ld 的 .map 不记符号大小,推断出的 size 对.bss段末符号为 0,于是「偏移 < size 才越界」的检查被短路,任何巨大偏移都被判成「在符号内」。 修法:给每个符号算地址上界(有 size 用 size;无 size 用下一符号地址;段尾用段末),地址越出上界就拒绝给函数名,并说明「落在符号表空隙里 = 野指针」。同一份解析逻辑被抽成_build_bounds,symbol_lookup与stack_unwind共用——避免只修一处、另一处照旧放行(实测中stack_unwind起初就复现了同样的假答案)。_infer_sizes跨段推断,算出 384MB 的「符号大小」。.text段最后一个符号拿.data段首地址当「下一个符号」,0x20000000 − 0x0800039c = 402652260被当成真实大小印进「占用最大的符号」视图。 修法:推断时做跨段保护(两符号必须同段)+ 段大小上限(推断值不能超过所属段)。主机程序(x86 mingw PE)的 .map 被当成 MCU 固件照单全收。 输出里混着
__mingw_module_is_dll、.idata/.rsrc/.pdata等主机特征,用户拿错 map 会得到一堆无关符号还以为是自己的固件。 修法:新增_map_target_check,命中主机特征(运行时符号 ≥3 条 或 主机专有段 ≥3 个)时明确警告「这不是 MCU 固件的 map」;同时用一份按真实arm-none-eabi-ld格式固化的 ARM map 做反向对照,确认正常 MCU map 不误报。serial_list对已插着的 FT2232H / J-Link 显示「未收录」。 根因:core._USB_UART_BRIDGE_IDS认识0403:6010/1366:0105,但analyzer.USB_SERIAL_VIDPID没有这两条——同一 VID:PID 在一处被识别、另一处说不认识。 修法:补齐 analyzer 表(FT2232H/FT232H/CH9102 变体/J-Link CDC/RP2040/ESP32 USB-JTAG 等),并加跨表一致性测试,锁住两张表不再脱节。decode_fault把cortex-m0报成「没有收录架构」——M0 是已知架构、只是没有 CFSR,这不是"缺个 json"的问题,而是判定路径根本不同(需走压栈帧 PC 反查)。 修法:M0/M0+ 走专门分支,说明为什么用不了并给出替代路径(symbol_lookup+stack_unwind不受架构限制)。 附带修:BFARVALID=1(位域说"有效")时不再无脑放行——识别哨兵值(0xDEADBEEF、全同字节、0xFFFFFFFF、<0x100)并提示「位域有效 ≠ 值本身合理」;valid=0且用户没传该地址时,不再断言"读到的值是垃圾值"(根本没读到)。
测试自身抓出的两个静默失效(已修):
@unittest.skipUnless(os.path.isfile(MAP))装饰器在类定义时求值,而setUpModule之后才生成 map ⟹ map 明明刚生成,14 个测试却全被 skip。改为运行时判断函数_have_demo()。shutil.which("gcc")成功 ≠ gcc 能跑:msys2 的 gcc 找不到cc1/as/ld时会 rc≠0 + 空输出静默失败。改为始终把 msys2 bin 前置进 PATH,并加_gcc_works()真跑一次--version确认。
ssd1306.h的 include guard(SSD1306_H)与屏高宏(SSD1306_H = 64)撞名——文件卫士被屏高宏覆盖,任何#ifdef SSD1306_H判断恒为真。已把卫士改为SSD1306_DRIVER_Hmpu6050_read_raw的uint8_t b[14]未初始化,gcc 报-Wmaybe-uninitialized(桩函数空实现时尤其明显);真机上 I2C 部分读失败会留脏数据。已改= {0}
串口回环实测抓出的测试代码 bug(已修):TestSerialLoop 从未真正运行过,第一次跑就暴露三处——serial_for_url("loop://") 返回的对象已自动 open(显式 .open() 抛 "Port is already open.")、setUpClass 共享端口被各测试互相 close、_get_session 方法名写错(实为 get_session)。重写为每测试独立端口 + addCleanup。
真机验证清单(拿到有硬件的环境后)
pip install -r requirements.txt→✅ 已跑(全套 222 项 OK)python tests/test_serial_tools.py✅ 已跑(9 款驱动零警告 + 107 checks 全过)python tests/run_c_tests.py✅ 已跑(知识库核验 0 错误)python tests/validate_knowledge.py插上任意 STM32/ESP 板子 →
serial_list确认识别芯片 ✅ 已跑(COM4=ESP32-S3303A:1001,板载固件bno085_imu V2.4.3-20260920_a023)故意改错波特率读日志 →
baudrate_autodetect扫档 → 推荐档位与真实波特率一致 ⚠️ 分两种口:① USB CDC 口(ESP32-S3/C3、RP2040 等)——波特率不参与数据路径,工具会识别并短路,拒绝给排序(这是正确行为,不是失败);② 真 UART / 独立桥(FT2232H、CH340、CP210x、J-Link CDC)——波特率真实生效,扫档有意义。 要验证「能推荐对」,需一台非 USB CDC、且以非 115200 输出的设备接在 UART 桥上。本机 COM4 是 CDC 故只验了短路路径;COM7(FT2232H)无设备接入,扫出全 0 分并被正确提示"设备没在说话"。serial_open+serial_read读启动日志 →analyze_log应报 MOJIBAKE ✅ 已跑(COM4 读到 114319 B 真实日志,命中#EVT type=FAULT fault=0x02000000)serial_send("AT", expect="OK", wait_s=3)确认 expect 提前返回;at_sequence跑一组 AT 用例 ✅ 已跑(并因此抓出假 PASS 缺陷,见上)关掉串口 →
sessions_list→sessions_get→ 能完整回看刚才的现场 ✅ 已跑(自动落盘20260921_115559_COM4_h1.log132.8 KB,可回看)ESP8266 故意输错密码连 WiFi → 日志应命中
CWJAP_ERR(码 2=密码错误)⏳ 无 ESP8266 AT 固件设备RS485 从站故意回异常帧 →
modbus_parse应直译异常码;serial_pair_record对录主从对话 ✅ 已跑(modbus_parse异常码 0x02 正确直译;serial_pair_record用 FT2232H COM7/COM11 实跑,空数据降级提示正确)在蓝药丸上把 PB7 配成 USART1_RX →
pin_check应提示需要 remap;PC13 配 GPIO + board=bluepill 应报板载 LED 占用 ✅ 已跑(知识层三引擎全部正确;并因此抓出 io_mux 不校验引脚存在性的缺陷)J-Link/DAPLink 连带 RTT 固件的板子 →
rtt_read读日志 ⏳ J-Link 在位(COM6),但本机只有 VS Code ARM 扩展自带的那份pyocd.exe,当前解释器import pyocd失败,所以rtt_read还跑不起来。已验的是「模块缺失时如实说明、不崩」的降级路径。pip install pyocd后可用 NRF52840 板补测(也可直接调那份 exe:pyocd list)。NUCLEO-H563ZI(STM32H563 / Cortex-M33,板载 ST-Link V3EC 虚拟串口 COM21) → 一键
python tools/live_acceptance.py COM21 --allow-write --elf <fw.elf> --map <fw.map>✅ 已跑(PASS 16 / FAIL 0 / SKIP 1;并抓出 6 个只靠离线测试抓不到的缺陷,见CHANGELOG4.2.0)
硬件盘点(本机实测):COM4=ESP32-S3 原生 USB(303A:1001,跑 BNO085 IMU 固件)|COM6=JLink CDC UART(1366:0105)|COM7/COM11=FT2232H 双通道(0403:6010)|COM8/COM9=蓝牙幻影口。
注意:NRF52840 板只有 SWD + SEGGER RTT,未引出 UART ⟹ 串口类清单项需用上述其他硬件;RTT 类需装 pyocd。
目录结构
mcu-debug-mcp/
├── src/mcu_debug_mcp/ # ★ 正规包(2026-10-13 C 档重构:wheel 不再污染 site-packages 顶层)
│ ├── __init__.py # 版本单一来源(pyproject dynamic attr 从这读)
│ ├── server.py # MCP 薄壳(FastMCP 注册 55 工具 + 13 resources + 6 prompts)
│ ├── core.py # 全部工具实现(零框架依赖,可独立测试)
│ ├── analyzer.py # 故障模式引擎(30 内置规则 + JSON 外置规则加载 + min_count 计数门槛)
│ ├── guard.py # 运行时隔离层(默认禁写硬件 + 端口名单 + 不可逆操作二次确认)
│ ├── paths.py # 数据根定位($HOME env > ~/.mcu-debug-mcp > 包内置;外置层可合并覆盖)
│ ├── knowledge/ # 领域知识库(JSON 外置,社区可贡献;随包分发)
│ │ ├── fault_patterns.json # 可外置故障模式规则(正则类,逐条标 source,支持 min_count)
│ │ ├── error_codes/ # 错误码直译表(esp_idf/at_common/cwjap/cme/mqtt_rc/modbus_exception)
│ │ ├── pinmap/ # MCU 引脚复用映射(数据手册级,三引擎:f103c8t6/f411ceu6/esp32dev)
│ │ └── boards/ # 板级知识库(bluepill / blackpill_f411)
│ ├── drivers/ # 预验证驱动模板 9 款(LLM 只选型,不现编代码;.h/.c/port/wiring.md/meta.json)
│ └── tools/ # live_acceptance.py 真机验收夹具(默认只读)+ bridge_fw 桥固件
│ # + verify_stdio.py 端到端 + mutation_check.py 变异验证
├── setup.py # 仅保留构建临时目录重定向(打包声明全在 pyproject.toml)
├── coverage.json # 能力面清单(26 缺口 + 27 能力轴,审计脚本据此对账)
├── SECURITY.md # 安全与隔离模型 + 破坏性操作矩阵 + 漏洞报告通道
├── pyproject.toml # src 布局 + include-package-data + console script(v4.5.5)
├── MANIFEST.in # sdist 收录清单(漏一行就复发「装出来是空壳」)
├── requirements.txt
├── examples/ # offline_demo.py:离线可跑的示例
├── docs/ # AUDIT-2026-10-13.md 审查报告(含修复记录)等
└── tests/
├── test_analyzer.py # 101 项,✅ 已验证
├── test_driver_logic_py.py # 49 项,✅ 已验证(C 算法对拍)
├── test_driver_logic.c # C 版同源测试,✅ 107 checks 0 failed(9 款驱动全量)
├── run_c_tests.py # C 测试运行器(无需 make,自动处理 msys2 的 cc1 PATH 坑)
├── Makefile.logic # C 测试 makefile(等价路径)
├── validate_knowledge.py # 知识库核验脚本(CI 可挂),✅ 0 错误
├── audit_capability.py # 能力面审计:广度/深度阶梯/缺口/文档对账/**隔离与安全**
├── audit_constants.py # 常量一致性审计(含版本单一来源 ↔ README)
├── conftest.py # 测试期强制硬件隔离(锁档位 + 禁端口 + 替换串口构造)
├── isolation.py # 临时解除隔离的唯一入口(给「测笼子内部逻辑」的测试用)
├── test_isolation.py # 隔离层专项
├── test_package_smoke.py # 打包冒烟(真构建 sdist+wheel 双安装 + 子进程 + 剔除源码树)
├── stub/ # C 测试桩(port_all.h + 各驱动桩头文件)
└── test_serial_tools.py # ✅ 全过(含 loop:// 回环端到端)Windows 上的 gcc 坑(实测记录)
如果你在 Windows + msys2 下跑 C 测试遇到「gcc 明明在,但编译 rc=1 且没有任何输出」,不是沙箱也不是权限问题:
msys2 的 gcc.exe 单独执行正常(--version 有输出),但真正编译时它要 fork cc1.exe,而 cc1.exe 依赖同目录的运行时 DLL(libgmp-10.dll/libmpfr-6.dll/libisl-*.dll/libmpc-3.dll)。Windows 的 DLL 搜索路径不含 exe 所在目录(除非该目录在 PATH 里),于是 cc1.exe 崩在 STATUS_DLL_NOT_FOUND (0xC0000135)——由于崩溃发生在子进程,父进程拿不到任何 stderr,表现为「静默失败」。
验证方法:gcc -dumpmachine 能输出(驱动本身不 fork cc1),gcc -E foo.c 无输出失败(要 fork cc1)。
修法:把 gcc 的 bin 目录加进 PATH。tests/run_c_tests.py 与 Makefile.logic 都已自动处理,直接用它们即可。
贡献指南
知识库贡献(最高价值,无需写代码)
新增故障模式(正则类):knowledge/fault_patterns.json 加条目(id/patterns/diagnosis/next_steps/source;需要计数门槛的加
min_count,如 WiFi 断连 ≥3 次才算风暴),无需改代码,重启生效新增错误码表:knowledge/error_codes/<表名>.json(entries + source),analyzer 的
_load_code_table挂载新增 MCU 引脚库:knowledge/pinmap/<型号>.json,必填
engine字段(fixed_mux/af_table/io_mux 三选一),来源标数据手册;不确定的字段留空并在 caveats 说明,不要编新增开发板:knowledge/boards/<板名>.json(onboard 每项必填 pins 列表或 pin 单值 + note;board_issues 按翻车率排序)
改完必跑核验:
python tests/validate_knowledge.py——它抓得出引脚数录错、功能名录错、同功能双占、正则写坏、外设条目缺引脚字段(已实测抓出 3 处 F103 数据错误)
代码贡献
新增驱动:drivers// 下放
<name>.h/.c/<name>_port.h/wiring.md/meta.json,meta.json 的 verified 字段必须如实写验证状态——评测员和学生都会实测新增异常模式(复杂逻辑类):analyzer.py 加规则函数+注册 RULES+_DIAG 配文案,test_analyzer.py 补正例+反例(正例命中 + 正常日志不误报,缺一不可)
新增工具:core.py 实现(零 MCP 依赖)→ server.py 注册(FastMCP 薄壳)→ tests/ 补用例;能离线测的必须离线可测
判断放哪条路:正则能匹配的走 JSON;需要计算(比例/计数/阈值)的写 Python
Available Tools
59 toolsanalyze_logA
分析日志,识别 30 类常见故障模式(乱码/AT报错/反复重启/HardFault/传感器全0/全FF/ DS18B20恒85/DHT超时/I2C NACK/网络断链/ESP崩溃/掉电/看门狗/固件损坏/CWJAP错误码/ CME错误码/RTOS断言/栈溢出/链接错误/编译错误/I2C扫描空/UART帧错/HAL断言/ADC饱和/ MQTT失败/HTTP错误/SD卡失败等),每条给出人话诊断和排查步骤。 输入可以是 serial_read 的输出、用户粘贴的串口日志、编译器/链接器报错。
| Name | Required | Description | Default |
|---|---|---|---|
| log_text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool identifies 30 fault patterns and outputs human-readable diagnosis and troubleshooting steps, which is useful behavioral context. But it omits safety/read-only nature, rate limits, or 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core function and an enumerated list of fault patterns, which clarifies scope. The long enumeration is informative but slightly verbose; it could be condensed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input schema and the presence of an output schema, the description provides sufficient context: what the tool does, what it detects, and what it outputs. The main gap is sibling differentiation, but that is covered under usage guidelines.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for the single parameter log_text, the description partially compensates by listing example inputs (serial_read output, pasted logs, compiler errors). It adds meaning but does not specify format, size, or handling of mixed content.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: '分析日志' (analyze logs) and identifies 30 fault patterns, giving human-readable diagnosis and steps. Clearly defines the tool's function, though it does not explicitly differentiate from siblings like error_code_lookup or decode_fault.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Specifies acceptable input sources (serial_read output, pasted serial logs, compiler/linker errors), implying when to use it. However, it does not state when to prefer alternatives or when not to use it, leaving usage context implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
at_sequenceA
批量执行 AT 指令序列并逐条断言(半自动回归测试)。 steps 形如 [{"cmd": "AT", "expect": "OK", "timeout_s": 2}, {"cmd": "AT+CWJAP?", "expect": "WIFI|ERROR"}](expect 是正则)。 输出每步 PASS/FAIL/TIMEOUT + 回显尾,中途失败不中断,方便一次看全。
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | ||
| steps | Yes | ||
| default_baud | No | ||
| total_timeout_s | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful runtime behavior: failures do not abort the run, and each step yields PASS/FAIL/TIMEOUT plus an echo tail. It leaves gaps on whether the port must already be opened via serial_open, whether the port is locked exclusively during the run, and the destructive potential of sending arbitrary AT commands (e.g. AT+RST).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with what the tool does, then a compact worked example for the non-obvious parameter shape, then the output/behavior contract. No sentence is redundant and the example earns its space by removing schema ambiguity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained, and the description still helps by previewing the PASS/FAIL/TIMEOUT structure. What is missing for a port-based tool is the setup precondition (must serial_open/serial_list be used first) and any exclusivity note; otherwise the definition is sufficient to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does explain the most important parameter well: the steps array shape with cmd/expect (regex)/timeout_s shown by concrete example. However, port, default_baud, and total_timeout_s receive no explanation at all, and the relationship between per-step timeout_s and the top-level total_timeout_s is unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('批量执行 AT 指令序列并逐条断言') plus the use case ('半自动回归测试'), which cleanly separates it from the single-shot serial_send / rs485_send siblings in the list. An agent can tell what this does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context for use ('半自动回归测试') and an operating rule ('中途失败不中断,方便一次看全'), which tells the agent this is the right choice when it wants a full pass/fail sweep rather than fail-fast behavior. It never names an alternative tool or states when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
baudrate_autodetectA
自动探测波特率:逐档打开串口采样,按"最像正常日志"评分排序并给推荐。 log_text 提供现成日志样本时走离线评分(不占串口)。设备静默时会提示先复位再扫。
★USB CDC 口(ESP32-S3 原生 USB、RP2040 等)上波特率不参与数据路径,本工具会 直接短路说明,不给排序——在那种口上"各档评分"只是同一批字节被反复读。 确需强行扫(例如怀疑枚举成 CDC 但实际是 UART 桥)时显式传 candidates, 如 candidates=[115200, 9600]。
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | ||
| log_text | No | ||
| sample_s | No | ||
| candidates | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does so well: it discloses the USB CDC no-op behavior and its rationale (baud rate is not in the data path), the silent-device case, and that offline scoring avoids occupying the port. It does not state whether the port must be free/exclusive (potential conflict with serial_open) or the time cost implied by sample_s across candidates.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core behavior, then adds the offline and silent-device cases before the USB CDC caveat. Generally tight, though the ★ section is somewhat verbose and slightly repetitive about repeated byte reads.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a hardware-detection tool with an output schema (return values need not be explained) and no annotations, the behavioral coverage is strong. Remaining gaps are sample_s semantics and port exclusivity/timing expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It adds real meaning for log_text (triggers offline mode) and candidates (explicit list to force scanning, with a concrete example), but says nothing about sample_s and only implicitly covers port.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('自动探测波特率' - auto-detect baud rate) plus the mechanism (open port at each candidate, sample, score by log-likeness, recommend). It is clearly distinguishable from siblings like serial_open/serial_read, which do not perform detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: supply log_text to use offline scoring that does not occupy the port; tell the user to reset when the device is silent; and on USB CDC ports the tool short-circuits, with the escape hatch being an explicit candidates list. Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
board_getA
输出指定开发板的板级知识:板载外设及占用引脚、板级坑清单(按翻车率排序)、 供电说明、数据来源。如 "bluepill"(蓝药丸)、"blackpill_f411"(黑药丸)。 给用户做硬件选型/排板级坑之前先查这个。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does disclose a genuine behavioral trait - the pitfall list is ordered by failure rate - and states that a data source is reported. However it never states that the call is read-only/side-effect free, and gives no hints on caching, name-resolution failure behavior, or cost, which for a zero-annotation tool leaves a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose, then examples, then the usage trigger. No filler; every clause adds information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the description correctly focuses on scope, examples, and timing. For a single-parameter read lookup with no annotations, the only remaining gap is that valid name values are only illustrated, not bounded (the description could have pointed to board_list for discovery).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single 'name' property has no schema description, so the description must compensate and largely does by supplying concrete example values ('bluepill', 'blackpill_f411') that reveal the expected identifier style. It stops short of describing the full naming convention or where valid names come from.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource ('输出指定开发板的板级知识') and itemizes what that knowledge contains: onboard peripherals and their occupied pins, a board-level pitfall list sorted by failure rate, power-supply notes, and the data source. An agent can tell it apart from most siblings, though it never explicitly contrasts itself with the obvious neighbor board_list (which presumably enumerates the names this tool accepts).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage trigger: consult this before hardware selection or before troubleshooting board-level pitfalls. It does not name alternatives (e.g. board_list for discovery, pinmap_get for pin detail) or state when not to use it, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
board_listA
列出板级知识库已收录的开发板。选板子前先看有没有现成板级坑清单。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. 列出 implies a safe read-only listing, and the description usefully adds that entries include board-level pitfall checklists, but it never explicitly states the read-only nature or scope/return shape—minor gaps for a simple list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the resource front-loaded and the usage hint following. No filler, though the second sentence could be marginally sharper about when it matters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and a parameterless list tool needs little behavioral detail. The description covers what it lists and why to call it, leaving it adequate though not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to disambiguate and the baseline of 4 applies. Nothing in the description is needed to clarify parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 列出 (list) 板级知识库已收录的开发板 (boards catalogued in the board-level knowledge base). It is clearly a list operation, distinguishable from the singular board_get sibling, though it does not explicitly name that sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds a clear when-to-use cue: check this before selecting a board so you can see if a ready-made board-level pitfall list exists. No explicit exclusion or named alternative (e.g. board_get for details) is given, so it stays just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bridge_probeA
桥自检:问那块跑桥固件的板「你是谁、支持哪些总线」——不碰任何总线,纯握手。
排查「总线工具不工作」的第一步:先确认桥活着、认协议,再去怀疑接线。 省得在「固件问题」和「接线问题」之间来回猜。
port 不填则读环境变量 MCU_DEBUG_BRIDGE_PORT。桥固件源码见 tools/bridge_fw/。
| Name | Required | Description | Default |
|---|---|---|---|
| port | No | ||
| baudrate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it declares the operation is non-invasive (does not touch any bus, pure handshake) and explains the port-resolution fallback to MCU_DEBUG_BRIDGE_PORT. It omits any auth/permission note and does not restate the baudrate behavior, but for a read-only probe this is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core definition, then the diagnostic rationale and the port/env detail. Several lines are spent on troubleshooting motivation, but each sentence adds routing or parameter value; no obvious filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a simple 2-param, no-required probe the description covers purpose, when-to-use, and the key port fallback; only baudrate behavior is left undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 2 parameters, so the description must compensate. It explains the port fallback via the MCU_DEBUG_BRIDGE_PORT environment variable, which is genuinely useful, but says nothing about baudrate or its default semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action (handshake / self-check with the bridge firmware) and its scope ('不碰任何总线,纯握手'), which immediately separates it from the many bus tools (i2c_scan, spi_scan, serial_*). An agent can tell what it does and what it does not touch without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit usage context: it is the first step when 'bus tools aren't working' — confirm the bridge is alive before suspecting wiring. It frames the diagnostic order clearly but does not name a concrete alternative sibling (e.g. probe_list or serial_list) to choose against.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chip_infoA
读目标芯片的身份与存储信息(型号 / Device ID / 修订 / Flash 容量 / UID / 读保护)。
mode="read"(默认)走 hotplug:不复位、不停内核,板子照跑。 能拿到 型号 / Device ID / Revision / Device CPU / Board / 电压 / 调试器信息, 以及 DBGMCU_IDCODE 里更精确的 DEV_ID 与 REV_ID(会和连接 banner 交叉核对)。 mode="full" 走 normal:多拿 真实 Flash 容量 / 96 位 UID / 选项字节(读保护等)。 代价是连接本身会复位一次目标并 halt 内核 —— 受隔离层管辖(需要写权限)。 ★ 如果你正在查复位原因,别先调它:这次复位会把 PINRSTF 打进 RCC_RSR,污染现场。
实测依据:system memory(UID @0x08FFF800 / FlashSize @0x08FFF80C)在 hotplug 下 读不到(CLI 报 "failed to read the requested memory content"),必须 normal 档; 而 normal 档连上就复位。所以拆成两档,把选择权交给你,不悄悄替你做主。
| Name | Required | Description | Default |
|---|---|---|---|
| sn | No | ||
| mode | No | read |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: read mode does not reset or halt the core, full mode resets the target once and halts the kernel, requires write permission (需要写权限), and has the side effect of polluting RCC_RSR. It even explains the empirical reason the two modes were split.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the two modes are front-loaded and the reset warning is prominent. It is somewhat long, with an empirical-rationale paragraph, but the content is load-bearing rather than redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and real side effects, the description supplies the safety profile, mode tradeoffs, and prerequisites; an output schema exists so return values need no explanation. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It fully explains the mode parameter's semantics (read vs full), but the sn parameter is never mentioned anywhere, leaving half the parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (读) and resource (目标芯片的身份与存储信息) and enumerates exactly what is returned: 型号 / Device ID / 修订 / Flash 容量 / UID / 读保护. This is clearly distinguishable from siblings like reset_reason or decode_register.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly splits usage by mode: read (default, no reset) vs full (extra data at the cost of a reset+halt), and adds an exclusion — do not call it first when investigating reset cause because it pollutes PINRSTF in RCC_RSR. Full when/when-not/alternative coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
component_getB
单个器件的选型详情:接口 / 地址 / 移植要求 / 头号坑 / 出厂验证记录 / 接线避坑全文。name 来自 component_list。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it only enumerates the shape of the returned record. It never states that this is a read-only lookup, whether it can error on an unknown name, or any side effects/auth requirements. The content list overlaps with what the output schema already conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence plus a provenance clause; the resource and its content are front-loaded and nothing is padded. The slash-delimited field list is dense but readable for this domain.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no full explanation, and the description adequately covers the data's theme. It nonetheless omits error behavior, prerequisite state, and any read-only assurance, leaving an agent to infer them for a lookup tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole parameter 'name' is undocumented in the schema. The description partially compensates by stating where the name comes from (component_list), which is useful provenance, but it does not give the expected format or validity constraints for the value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource: fetching the selection details (选型详情) of a single component, and enumerates the content facets (interface, address, porting requirements, top pitfall, factory verification record, wiring notes). This clearly distinguishes it from the sibling component_list, which enumerates rather than details one item. It stops short of a 5 only because it never states the operation in a single crisp clause.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"name 来自 component_list" gives a concrete workflow hint (get the name from component_list first), which is genuine usage guidance. However, there is no explicit when-to-use/when-not-to-use framing and no mention of prerequisites or what to do if the component is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
component_listA
器件选型清单:按接口(i2c / uart / timer_pwm / gpio_timing)列出可用的 传感器与模块,带地址、微秒时序要求。回答"我要做温湿度采集/测距/姿态, 用哪个现成器件"时先查这里,别凭记忆报型号。bus 可按接口过滤(如 "i2c")。
| Name | Required | Description | Default |
|---|---|---|---|
| bus | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose the returned fields (bus addresses, microsecond timing) and an output schema exists, so return format is covered, but it says nothing about read-only nature, auth needs, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the resource and scope, then the usage trigger, then the filter note. Every sentence earns its place; only minor redundancy across the interface list and the filter example.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be re-explained, and the description covers scope, usage trigger, and the single filter parameter. Complete for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: it explains that 'bus' filters by interface and supplies the candidate values (i2c/uart/timer_pwm/gpio_timing) plus an example ('i2c'). This meaningfully exceeds the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (sensors/modules), scoped by interface categories (i2c/uart/timer_pwm/gpio_timing), and notes what is included (addresses, microsecond timing). The list-vs-get distinction from the sibling component_get is implicit rather than named, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use trigger ('when answering which off-the-shelf part for temp/humidity/ranging/attitude, check here first, don't report from memory'). Strong positive guidance, but no explicit exclusion or named alternative such as component_get for a specific part.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_faultA
解码 Cortex-M 故障寄存器,给出人话诊断 + 排查方向。
设备跑飞/进 HardFault 时用。传你从 fault handler 读到的原始值(任意组合): decode_fault(cfsr=0x8200, hfsr=0x40000000, bfar=0x40021000)
★ 会自动处理三类陷阱,别跳过它的结论: · BFARVALID/MMARVALID=0 时地址是垃圾值——工具会拒绝解读,不给假地址 · IMPRECISERR 时即使 valid,BFAR 也不可信(总线写延迟)——工具会标注 · FORCED=1 说明真因在 CFSR——工具会提示去读 CFSR 拿到可信地址后,用 symbol_lookup 反查是哪个函数。
| Name | Required | Description | Default |
|---|---|---|---|
| arch | No | cortex-m | |
| bfar | No | ||
| cfsr | No | ||
| hfsr | No | ||
| mmfar | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses that the tool refuses to interpret garbage addresses (BFARVALID/MMARVALID=0), flags IMPRECISERR as making BFAR untrustworthy, and emits a CFSR hint when FORCED=1. These are exactly the guardrails an agent must not skip, far beyond what a bare name would convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the trigger, then an executable example, then the three caveats as a scannable bullet list. Every element earns its place; no preamble or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, no-required-args diagnostic tool with an output schema (so return values need not be explained), the description covers purpose, trigger, input semantics, default-behavior caveats, and the follow-up path. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and there are 5 params, so the description must compensate. It does so well by showing a concrete call example (cfsr/hfsr/bfar), stating 'any combination' is accepted (implying all optional), and explaining register-field interrelations (BFARVALID, MMARVALID, IMPRECISERR). It stops short of documenting the arch and mmfar parameters, so it is not fully complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (decode Cortex-M fault registers) and the value delivered (plain-language diagnosis + troubleshooting directions). It is clearly differentiated from siblings like decode_register/decode_register_svd by the fault-specific scope, and it explicitly routes follow-up work to symbol_lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the exact trigger condition ('when the device crashes / enters HardFault') and names the follow-up alternative (symbol_lookup) once a trustworthy address is obtained. An agent knows when to reach for this tool and what to do next, without needing to open any schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_registerA
把寄存器原始值按位域拆开解释。 fields 形如 [{"name":"HSION","bit":0}, {"name":"PLLSRC","lsb":16,"width":2}]。 手头有寄存器值不知道每个位什么意思时用。
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| width | No | ||
| fields | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It explains the fields input format, but does not state that the operation is read-only, side-effect-free, or how errors are handled; 'decode' implies a pure read, but this is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: purpose, fields format, and usage. The content is front-loaded and every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema covers return values and the tool is relatively simple, the description covers purpose, usage, and the tricky fields parameter well. However, it does not disambiguate from decode_register_svd, and the 'width' parameter remains unexplained, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides a concrete example for the complex 'fields' array, showing key differences between 'bit' and 'lsb'/'width' forms, which is essential and absent from the schema. It leaves 'value' and 'width' unexplained, though 'value' is self-evident and 'width' has a schema default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: '把寄存器原始值按位域拆开解释' (decode register raw value into bit fields). It is clear, but it does not explicitly distinguish this tool from the sibling decode_register_svd, which could also decode registers. The manual fields format differentiates it implicitly, but no direct contrast is made.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-to-use condition: '手头有寄存器值不知道每个位什么意思时用' (use when you have a register value and don't know what each bit means). No alternatives or exclusions are mentioned, so it stops short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
decode_register_svdB
用 CMSIS-SVD 文件解码寄存器位域(含枚举值提示与描述)。 svd_path 指向厂商 SVD 文件(CubeMX/固件包里有),如: decode_register_svd("STM32F103.svd", "RCC", "CR", 0x00040002)
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| register | Yes | ||
| svd_path | Yes | ||
| peripheral | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that output includes enum value hints and descriptions, which is useful, but it does not state read-only nature, error handling for invalid files or names, or any 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by a clarifying example. It is concise and every element earns its place, though the example could be slightly more compact if paired with explicit parameter labels.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be detailed, but the 0% input schema coverage means the description should do more to define the required parameters. It provides an example and explains svd_path, but omits peripheral/register semantics and error behavior, leaving gaps for a four-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explicitly explains that svd_path points to a vendor SVD file, and the example maps all four positional arguments, but it does not define peripheral, register, or value beyond the example, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: decode register bitfields using a CMSIS-SVD file. It clearly conveys the tool's function, but does not explicitly differentiate from the sibling tool decode_register, which likely serves a similar purpose without SVD.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no explicit when-to-use or when-not-to-use guidance, nor does it name alternatives such as decode_register. It only implies usage through the mention of CMSIS-SVD files and an example, leaving selection between siblings to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
driver_getA
输出指定驱动的接线表+完整代码+验证记录。name 来自 driver_list。 这些代码是预验证过的,直接交付用户;需要适配的只有 *_port.h。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the burden. It does add genuine behavioral context: the code is pre-validated and deliverable as-is, and only *_port.h needs adaptation. But it omits any side-effect/safety profile and does not clarify whether this is purely a read/lookup operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the core output description and followed by the source of the parameter and a delivery caveat. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained; the description covers purpose, parameter provenance, and the key adaptation caveat. Complete enough to call correctly, with only the sibling-selection question left open.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single name parameter has no description in the schema. The description partially compensates by stating the name originates from driver_list, giving provenance, but adds no format or matching-rule detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (输出/output) and resource (指定驱动) plus the concrete return payload: wiring table, complete code, and verification records. This distinguishes it from driver_list (enumeration) and driver_wiring (wiring only), though the overlap with driver_wiring is not explicitly resolved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"name 来自 driver_list" implies a required lookup step before calling, which is useful sequencing guidance. However, it never states when to choose driver_get versus driver_wiring or driver_list, so usage is only implied rather than contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
driver_listA
列出可用的预验证驱动模板(带出厂验证记录)。 用户要做毕设传感器部分时,先看这里有没有现成的,而不是自己写。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose a meaningful data trait (templates are pre-validated and come with factory verification records), and 'list' implies a read-only operation, but nothing is said about freshness, result size, or what a verification record means in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what is listed and followed by the decision cue. No filler or restatement of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and zero input parameters, the description need not explain return values. It covers purpose and entry-point positioning; only the hand-off to driver_get/driver_wiring for actual usage is unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline for a no-parameter tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (列出/list) and a precisely scoped resource: pre-validated driver templates that carry factory verification records. This is clearly separable from siblings like driver_get (retrieve one) and driver_wiring, without needing to open a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use context (sensor portion of a project) and a when-not alternative ('instead of writing your own'). It does not name the natural follow-up sibling (driver_get) for pulling full details, so it falls just short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
driver_wiringA
查指定驱动的接线知识库:接线表、头号坑清单(按翻车率排序)、 输出日志解读、答辩加分点。回答"XX传感器怎么接/为什么不工作"前先查这个。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the categories of content returned (wiring table, pitfalls sorted by failure rate, log reading, exam highlights), which is useful, but says nothing about permissions, freshness/caching, or the read-only nature beyond the implicit 'look up'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the core purpose front-loaded and the usage trigger second. No filler; each clause carries meaning. Slightly list-like but appropriately sized for the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the single-parameter signature is simple. The description covers purpose, content, and trigger adequately for a read-only knowledge lookup; only the parameter's exact expected form is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'name' parameter. The description implies the parameter is a driver identifier ('specified driver') but adds no format, casing, or accepted-value guidance beyond that inference. Marginal value over the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: '查指定驱动的接线知识库' (look up the wiring knowledge base for a specified driver), and enumerates the content types returned (wiring table, ranked pitfall list, log interpretation, exam points). This clearly separates it from driver_list/driver_get, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit usage trigger: check this before answering 'how do I wire XX sensor / why doesn't it work'. That is clear context for when to reach for it. It stops short of naming alternatives to use instead (e.g., driver_get for metadata), so it is not a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecosystem_getA
输出指定生态的识别特征:工程产物 / 构建配置 / 日志特征 / 常见坑。 name 用 ecosystem_list 给的 key(如 zephyr / keil / rust_defmt)。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does reveal the shape of the returned knowledge (artifacts, build config, log signatures, pitfalls), which is useful, but never states that this is a read-only, side-effect-free lookup or whether it depends on a prior scan. For a low-risk reference lookup with an output schema, this is adequate but thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines, zero filler, with the purpose front-loaded and the parameter constraint immediately after. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description need not explain return values, and it correctly focuses on the key source and identifier semantics. The only real gap is the absence of any note on read-only behavior or failure handling for an invalid ecosystem key.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: it explains that 'name' is the key produced by ecosystem_list and supplies three concrete example values. It stops short of stating whether an unknown key errors or returns an empty result.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('输出指定生态的识别特征') and enumerates exactly what the output covers (工程产物 / 构建配置 / 日志特征 / 常见坑). It also differentiates itself from the sibling 'ecosystem_list' by positioning itself as the detail lookup keyed by that tool's output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite: obtain the 'name' key from ecosystem_list, with concrete key examples (zephyr / keil / rust_defmt). It does not state any when-not-to-use condition, but the list-then-get workflow is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ecosystem_listA
列出已收录的嵌入式生态/框架(Zephyr / RT-Thread / PlatformIO / Keil / IAR / Rust defmt)。 拿到不认识的工作目录、或一段陌生的报错时,先判断「这是哪个生态的工程」—— 识别错了,后面每一步排查都会拐到沟里。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden, but for a zero-parameter read-only listing tool the safety profile is self-evident. It discloses the contents of the list and its role in the diagnostic workflow, but adds nothing about freshness, stability, or ordering of results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the concrete list of ecosystems, followed by the use-case rationale. No filler; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description adequately covers the tool's purpose and place in the workflow. It stops short of explicitly connecting to the sibling tools that consume its result, which would have made it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('列出已收录的嵌入式生态/框架') and enumerates concrete examples (Zephyr / RT-Thread / PlatformIO / Keil / IAR / Rust defmt). This clearly distinguishes it from the sibling 'ecosystem_get', which retrieves a single ecosystem.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the trigger context: '拿到不认识的工作目录、或一段陌生的报错时', and gives the rationale for acting first. It does not, however, name the alternative sibling (e.g. project_detect / ecosystem_get) that an agent should use after this step, so routing is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
env_statusA
环境自检:依赖 / 串口 / 烧录器 / 知识库根 / 版本,一次问清。
拿到陌生机器、或工具突然不好使时先跑这个:它把「这里能干什么、缺什么、 缺了会导致哪些工具不可用」一次列清,省掉一个个试错。 ★ 只报实测——探不到的会明说为什么探不到。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses the aggregate diagnostic output ('能干什么、缺什么、缺了会导致哪些工具不可用') and, importantly, the honesty constraint that it only reports what it actually probed and explains why anything unprobed is missing. It does not restate return format, which is acceptable since an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and its scope in the first line, then the trigger condition, then a behavioral caveat. Each of the three statements adds distinct information; nothing is redundant with the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only diagnostic with a full output schema, the description covers purpose, trigger, and a key behavioral caveat, which is sufficient to call it correctly. The only minor omission is any indication of cost or runtime when probing many subsystems.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document beyond the schema; baseline 4 applies. No parameter meaning is missing or ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb (self-check) and enumerates the specific resources it inspects — dependencies, serial, programmer/flasher, knowledge-base root, version — and frames itself as a one-shot aggregate ('一次问清'), which separates it from granular siblings like toolchain_status, probe_list, and flash_tool_detect. An agent can identify it as the environment entry point without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to run it ('拿到陌生机器、或工具突然不好使时先跑这个') and articulates the benefit over trial-and-error. It stops short of naming an alternative tool to use instead in specific cases, so the routing to siblings is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
error_code_lookupA
查错误码释义表(外置知识库 knowledge/error_codes/*.json,每条带出处)。
table 留空列出所有可查的表;只给 table 列出该表全部码; table+code 给出该码的释义、排查方向与依据(出处)。 已收录:esp_idf(esp_err_t)/ at_common(AT 通用响应)/ cwjap / cme / modbus_exception / mqtt_rc。 查不到时明说未收录、不给释义——不要拿别的码去猜。
| Name | Required | Description | Default |
|---|---|---|---|
| code | No | ||
| table | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the behavioral burden, and it does disclose meaningful traits: data source (external JSON knowledge base), citation provenance, enumeration behavior when arguments are omitted, and the no-guessing fallback. It stops short of stating anything about the return shape, but an output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose, then argument modes, then coverage list, then the failure rule — every sentence carries distinct information with no repetition of the schema or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need not be re-explained. With the source, modes, covered tables, and the not-found behavior all documented, an agent has everything required to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with two undocumented params, so the description must compensate — and it largely does, defining the interaction semantics of table and code (blank/only/both) and listing valid table values. It omits any format hints for the code string itself (case, prefixing).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: look up error codes in an external knowledge base (knowledge/error_codes/*.json) with per-entry source citations. It clearly distinguishes itself from lookup siblings (decode_register, decode_fault, symbol_lookup) by scoping to embedded/AT/Modbus/MQTT error codes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly enumerates the three invocation modes keyed on argument combinations (table blank = list tables, table only = list codes in that table, table+code = definition/troubleshooting/source). It also names the covered tables and gives an explicit when-not rule: say 'not covered' rather than guessing another code.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flash_firmwareA
烧录固件到开发板(不可逆操作,双闸门)。
第一道:dry_run 默认 True,只返回将要执行的完整命令供逐字核对,不写 flash。 第二道:真正执行必须 dry_run=False 且 confirm=True —— 两道都齐才会写。 另受隔离档位管辖:MCU_DEBUG_MCP_MODE 为 readonly(默认)时直接拒绝。 STM32+ST-Link(默认首选,实测最稳): flash_firmware("app.bin", chip="stm32h563") → STM32_Programmer_CLI -c port=SWD mode=normal -w app.bin 0x08000000 -v -rst 接多台同型号调试器时用 sn 指定探针序列号。 ESP 系:flash_firmware("app.bin", chip="esp32", port="COM5") 通用 Cortex-M:flash_firmware("app.elf", tool="pyocd", chip="stm32f103c8") 烧完自动 -rst 复位;不复位的话 SWD 会把内核 halt 住,板子不会跑。
| Name | Required | Description | Default |
|---|---|---|---|
| sn | No | ||
| chip | No | ||
| port | No | ||
| tool | No | auto | |
| confirm | No | ||
| dry_run | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it discloses the two-gate dry_run/confirm write path, the readonly isolation mode that refuses outright, and the auto-reset behavior plus the concrete consequence (halted SWD core, board won't run) if reset is skipped. This is exactly the behavioral context an agent needs for an irreversible action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The safety-critical double-gate and isolation constraints are front-loaded before the examples, and each section earns its place. It is fairly long and dense, but the density is justified by the irreversible nature of the operation rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is unnecessary. For a high-risk mutation tool with 7 parameters and zero schema coverage, the description still covers safety gates, auth/isolation gating, per-family usage, probe selection and post-flash reset behavior — nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it explains the semantics of dry_run (default True, returns command only), confirm (must be True together with dry_run=False), sn (probe serial for multiple same-model debuggers), chip, port and tool through worked examples. It leaves file_path format (absolute/relative) and the tool default 'auto' meaning unstated, so not quite complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource (flash firmware to a dev board) and immediately flags the operation as irreversible. This clearly distinguishes it from read-only siblings like flash_verify, flash_tool_detect and chip_info, so an agent knows this is the actual write path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use scenarios per chip family (STM32/ST-Link default, ESP, generic Cortex-M via pyocd) and states the default-preferred toolchain. It stops short of naming explicit alternatives/exclusions against siblings, but the usage context is concrete and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flash_tool_detectA
检测本机已安装的烧录工具(esptool/st-flash/pyocd/openocd)。 烧录前先调这个看有什么可用。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that it inspects the local machine for specific flashing tools and acts as a prerequisite check, which implies a read-only operation, but it never explicitly states that it is read-only/non-destructive, nor does it mention permissions, environment assumptions, or how it searches for the tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler. The first sentence front-loads the purpose and enumerates the tools detected; the second gives the usage trigger. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter detection tool with a full output schema, the description tells the agent what it detects and when to call it, and the output schema can convey return values. It omits OS-specific or permission caveats, but the essential agent needs are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters and 100% schema description coverage, so the baseline is 4. The description adds no parameter guidance, but none is needed for a tool that takes no arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (检测/detect) and resource (installed flashing tools: esptool/st-flash/pyocd/openocd). It is clear the tool inspects the local machine for programming executables, though it does not explicitly contrast with the sibling `toolchain_status`, which may also report installed tooling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says '烧录前先调这个看有什么可用' (call this before flashing to see what is available), giving a clear when-to-use trigger relative to flash_firmware. It does not name exclusions or alternative detection approaches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flash_verifyA
烧录后校验:把固件文件与芯片上实际内容逐字节比对(只读,走 hotplug)。
比 -v 有用:-v 只能紧跟烧录命令,等于重烧一遍;这个读回来直接比,
还会报出第一个不一致的偏移和前后 8 字节上下文 —— 能直接看出来是「整段没写进去」
还是「某几个字节错了」。
file_path 支持 .bin(配 address,默认 0x08000000)/ .hex / .elf。 烧完提示 "verified" 但设备不工作时,先调它排除「根本没烧进去」。 ★ 不要拿 CLI 的 -checksum 和 -fchecksum 互相验:两者口径不同,实测同一份固件 给出不同值。字节比对才是唯一真凭据。
| Name | Required | Description | Default |
|---|---|---|---|
| sn | No | ||
| chunk | No | ||
| address | No | ||
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well: it declares the operation read-only, notes it runs over hotplug, and discloses the diagnostic output (first mismatch offset plus 8 bytes of surrounding context, distinguishing a fully unwritten segment from a few bad bytes). It omits auth/permission needs and any performance or chunk-related behavior, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then the comparison-to-`-v` rationale, then file formats, then the debugging trigger, then the checksum caveat. Every section is relevant to invoking the tool correctly, though the emblem-heavy formatting and the extended `-v`/checksum digressions are slightly more verbose than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be spelled out, and the description still explains the key diagnostic payload. For a verification tool it covers usage, file formats, and comparison semantics well; the gaps are the undocumented `sn` and `chunk` parameters rather than missing conceptual guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema contributes nothing beyond bare titles. The description compensates for file_path (explaining .bin/.hex/.elf support and the default 0x08000000 base address for .bin) and partially for address, but says nothing about `sn` or `chunk`, leaving half the parameters undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: byte-by-byte comparison of a firmware file against actual chip contents. It distinguishes itself from the sibling flash_firmware and from CLI's `-v` and `-checksum`/`-fchecksum` mechanisms, so an agent can tell exactly what this tool is and is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition ('flash reported verified but device doesn't work, call this first to rule out a failed write'), names the alternative it supersedes (`-v` re-flashes; this reads back), and explicitly warns against verifying with `-checksum`/`-fchecksum` because their semantics differ. When-to-use, when-not, and alternatives are all present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
frame_parseA
通用二进制帧解析:按「帧头 + 长度字段」切帧,可选逐帧校验。
单片机自定义协议(上位机抓到的 hex 流)对不上时用。参数都能少填就少填: frame_parse("AA 55 04 01 02 03 04 AA 55 02 05 06") frame_parse("AA 55 04 01 02 03 04", header="AA55", checksum="sum8") frame_parse("01 03 04 00 0A 00 0B 9B F6", checksum="crc16_modbus") header 不给则须给 length_offset(长度字段相对帧首的偏移)。 checksum 可选 "none"/"sum8"/"crc16_modbus"。 ★ 切不出来(找不到帧头 / 长度越界 / 帧被截断)会逐条报出并附剩余字节, 绝不静默丢数据——静默丢帧是这类工具最危险的错。
| Name | Required | Description | Default |
|---|---|---|---|
| endian | No | big | |
| header | No | ||
| checksum | No | none | |
| data_hex | Yes | ||
| max_frames | No | ||
| length_size | No | ||
| length_offset | No | ||
| length_includes_header | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, and it does disclose a strong trait: failures (missing header, length out of bounds, truncated frame) are reported individually with leftover bytes and never silently dropped. That is exactly the kind of context an agent needs. It does not mention the max_frames cap or how endianness/length_size affect parsing, so it is not fully complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the mechanism, follows with a tight when-to-use line, then three illustrative one-line calls, and closes with the critical no-silent-drop warning. Every element earns its place and the examples substitute effectively for prose parameter explanations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no prose. The description covers purpose, use condition, the header/length_offset dependency, checksum options, and error behavior, which is strong for an 8-param tool. The remaining gap is the four undocumented tuning parameters (endian, max_frames, length_size, length_includes_header).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 8 parameters, so the description must compensate and it only partly does. It explains header, length_offset (offset relative to frame start), and the checksum enum values (none/sum8/crc16_modbus), but endian, max_frames, length_size, and length_includes_header are left undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (generic binary frame parsing) plus the mechanism (header + length field splitting, optional per-frame checksum). This implicitly distinguishes it from protocol-specific siblings like modbus_parse and nmea_parse, but never names them explicitly, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use condition: custom MCU protocol hex streams that don't line up. It also states the parameter-filling advice (fill as little as possible) and the header/length_offset dependency. It stops short of explicitly routing to or away from the sibling parsers (modbus_parse, nmea_parse), so alternatives are implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
i2c_read_regA
读 I2C 从设备的寄存器(最常见的「这颗 IMU 是不是活的」动作)。
addr 是7 位地址(MPU-6050 写 0x68,别写 8 位的 0xD0/0xD1,工具会拦下来); reg 是寄存器地址;count 是要读的字节数(1–256)。
★ 读回全 0 或全 0xFF 时不要直接判「器件坏了」:工具会分别给出这两种情况 完全不同的成因清单(全 0xFF 往往是器件没接/没上电,而不是寄存器的值是 0xFF)。
| Name | Required | Description | Default |
|---|---|---|---|
| bus | No | ||
| reg | Yes | ||
| addr | Yes | ||
| port | No | ||
| count | No | ||
| baudrate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does add real context: it discloses that the tool actively validates the address width and rejects 8-bit addresses, and that all-0 / all-0xFF reads produce two distinct diagnostic cause lists (notably that 0xFF usually means the device is unpowered/disconnected, not that the register holds 0xFF). It does not describe error codes, bus-selection behavior, or access requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the single most dangerous parameter mistake up front, then a starred gotcha note. No filler sentences; every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value format need not be covered, and the description instead covers the failure interpretation an agent actually needs. It is nearly complete for a register read, with the remaining gap being the undocumented bus/port/baudrate parameters and no explicit pointer to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, so the description must compensate. It does define addr (7-bit, with 0x68 vs 0xD0/0xD1 example), reg, and count (range 1–256), but leaves bus, port and the unexpected baudrate parameter completely unexplained, so nearly half the parameter surface remains undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: read an I2C slave register, and even characterizes the archetypal use case (checking whether an IMU is alive). This clearly separates it from i2c_write_reg, i2c_scan and spi_read_reg siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context ("the most common 'is this IMU alive' action") and a hard precondition: addr must be the 7-bit form (0x68, not 0xD0/0xD1) because the tool rejects the 8-bit form. It does not explicitly route the agent between this and siblings like i2c_scan or decode_register, so it stops short of a full when/when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
i2c_scanA
扫描 I2C 总线上的 7 位地址,标出每个应答地址上可能是什么器件。
这是「板子上到底挂了什么」的第一手答案。low/high 可缩小范围 (默认 0x08–0x77,即 I2C 规范里可自由分配的段;保留段会被跳过)。
★ 三条边界(别把结论放大): · 「有应答」只说明该地址有人 ACK,不代表这颗器件功能正常; · 同一地址常被多颗器件共用(0x68 上可能是 MPU-6050 也可能是 DS1307), 要定种必须读它的 WHO_AM_I / ID 寄存器(i2c_read_reg); · 挂在 TCA9548A 这类 I2C 多路复用器后面的器件默认是断开的, 直接扫主总线只能看到复用器自己(0x70–0x77)。
| Name | Required | Description | Default |
|---|---|---|---|
| bus | No | ||
| low | No | ||
| high | No | ||
| port | No | ||
| baudrate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and handles it well: it discloses that reserved address segments are skipped, that the default scan range is 0x08–0x77, and that an ACK only proves a responder exists, not that the part is functional. It does not cover permissions or error behavior, but for a read-only scan this is substantial disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a clearly delineated three-point caveat block. Every element earns its place, though the formatting emphasis markers add some noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description instead supplies the interpretive caveats an agent needs to avoid over-reading scan results. The remaining gap is the silently undocumented bus/port/baudrate parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description must compensate. It explains low/high as a narrowing range and gives their conceptual default, but bus, port, and baudrate are completely undocumented in both schema and description. It also states a default range of 0x08–0x77 while the schema shows low=0/high=0, leaving the actual default behavior ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource: '扫描 I2C 总线上的 7 位地址' (scan 7-bit addresses on the I2C bus), and clearly frames the output as which responding addresses might hold which device. It also implicitly distinguishes itself from i2c_read_reg by describing the scan as the identification starting point.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives context for use ('板子上到底挂了什么' first-hand answer), points to the alternative tool for identification ('要定种必须读它的 WHO_AM_I / ID 寄存器(i2c_read_reg)'), and warns when the scan will be misleading (devices behind a TCA9548A mux). What is missing is explicit routing versus the other scan siblings (spi_scan, onewire_scan), but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
i2c_write_regA
写 I2C 从设备的寄存器。data 支持 "0x01" / "1,2" / [1,2]。
verify=True 会在写完后回读比对。★ 默认关:有些寄存器是只写的 (命令寄存器、软复位寄存器),回读必然拿到别的东西,默认开着会造成大量假 FAIL。
写操作受隔离层写权限门禁:只读档会被拒绝,并给出放开方式。
| Name | Required | Description | Default |
|---|---|---|---|
| bus | No | ||
| reg | Yes | ||
| addr | Yes | ||
| data | Yes | ||
| port | No | ||
| verify | No | ||
| baudrate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the verify readback side effect, the rationale for the default-off behavior, and an authorization gate (isolation-layer write permission) including what happens on rejection. It does not cover rate limits or what happens to the device on partial failure, but the mutation's safety profile and auth requirements are clearly surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then data format, then verify semantics, then the permission note — a logical order with little waste. The ★ and bold emphasis markers add minor visual noise but each sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary. The description covers the operationally significant behavior (verify, permission gating) for a mutation tool, with the main remaining gap being the undocumented peripheral parameters (bus/port/baudrate).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 7 parameters, so the description must compensate. It adds real meaning for two of them — accepted data encodings ('0x01' / '1,2' / [1,2]) and verify's readback behavior — but bus, port, addr, reg, and baudrate remain entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (写 I2C 从设备的寄存器), which an agent can immediately distinguish from the sibling i2c_read_reg. The scope is unambiguous and does not depend on reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete guidance on when to enable verify (read-write vs write-only registers like command/soft-reset registers) and the consequence of defaulting it on. It also states the write-permission precondition (read-only profile gets rejected). It stops short of naming i2c_read_reg as the alternative for reads, so it is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
logs_pruneA
会话日志的保留策略与清理入口(日志只增不减时用)。
★ 默认 dry_run=True:只列出会删哪些文件、能回收多少空间,什么都不删。 要真删:dry_run=False + confirm=True,且隔离档位需为 write (删除不可逆——那些日志往往是几天前那次偶发故障的唯一现场)。
keep_days / keep_count 传 0(默认)时用内置策略:保留最近 30 天 / 最新 200 个。 ⓘ 日志会原样记录串口收发内容,可能含 WiFi 密码 / token 等凭据,分享前请检查。
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| dry_run | No | ||
| keep_days | No | ||
| keep_count | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the default no-op behavior, the exact flag combination and permission tier needed to mutate, the irreversibility of deletion, the built-in retention defaults, and that logs may contain credentials.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the safety-critical default first and uses markers (★, ⓘ) to make scanning easy; every sentence carries needed information for a destructive tool. It is somewhat long, but the length is largely justified by the risk profile.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. Combined with defaults, prerequisites, irreversibility and the credential warning, an agent has everything needed to call this destructive tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate and does: dry_run's default/effect, confirm's role in enabling real deletion, and the meaning of keep_days/keep_count=0 (built-in 30-day / 200-item policy). All four params get semantics beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource (session-log retention policy / cleanup entry) and immediately scopes it with the condition 'when logs only grow'. No sibling does pruning, so the agent can identify this tool unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives precise conditions: dry_run=True is the default safe path that deletes nothing, and real deletion requires dry_run=False + confirm=True + write isolation tier. Strong when/when-not guidance, though it never names an alternative tool (e.g. sessions_list/analyze_log) for inspecting logs first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modbus_crcA
计算或校验 Modbus RTU 的 CRC16(RS485 毕设必备)。 check=False:对数据部分计算 CRC;check=True:校验完整帧(数据+CRC)。
| Name | Required | Description | Default |
|---|---|---|---|
| check | No | ||
| hex_frame | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It clearly discloses the two operating modes (compute vs verify), which is meaningful behavioral context, but says nothing about input format expectations, error/validation behavior, or performance. Adequate but not rich for an annotation-free tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight clauses: purpose first, then a mode-by-mode breakdown. Well front-loaded and low-waste. The parenthetical '(RS485 毕设必备)' is decorative filler that adds no operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. For a two-parameter, no-annotation tool, the description covers the core decision (compute vs verify) adequately. The remaining gap is the hex_frame format convention, which matters for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It fully explains the 'check' parameter semantics (compute vs verify), which is good, but leaves 'hex_frame' format unspecified — an agent cannot tell whether to pass spaced hex, continuous hex, or with/without prefix, nor whether CRC bytes are included. Partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (计算/校验) and a precise resource (Modbus RTU CRC16), so an agent immediately knows this is a checksum utility. It does not explicitly distinguish itself from nearby siblings like modbus_parse or frame_parse, but the resource is narrow enough to be unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly routes the two modes: check=False computes CRC over the data portion, check=True verifies a complete frame (data+CRC). This is clear when-to-use guidance for each branch. It lacks any exclusion or pointer to sibling tools for related tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modbus_parseA
解析 Modbus RTU 帧:正常响应拆出寄存器值/线圈状态,异常响应(功能码|0x80) 直译异常码 01-06(非法功能/非法地址/非法值/设备故障/忙...)并给排查建议。 从站"该响应但不响应/回了一帧看不懂"时用它。
| Name | Required | Description | Default |
|---|---|---|---|
| hex_frame | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the output semantics for both normal and exception frames, which is useful, but a pure parser has little side-effect profile to reveal and the description says nothing about input expectations (raw hex, CRC included or not) or error handling on malformed frames.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the core purpose front-loaded and the usage trigger trailing behind it. No filler, though the parenthetical exception-code list is slightly long for the value it adds over the output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not owed, and the description covers purpose, the exception-handling branch, and the usage trigger. The remaining gap is input-format specification, which matters for a tool whose only job is to accept a frame.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single parameter hex_frame, so the description must compensate and it does not. It refers to a 'frame' generically and adds no syntax guidance such as whether the CRC bytes should be included, byte order, or whitespace tolerance, leaving the caller to guess what a valid value looks like.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('解析 Modbus RTU 帧') and enumerates the two branches it handles: normal responses decoded into register/coil values, and exception responses (function code |0x80) mapped to codes 01-06 with troubleshooting advice. It is clearly more specific than a generic parser, but it never names the nearest siblings (modbus_crc, frame_parse) so the agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit triggering context: use it when the slave 'should respond but doesn't, or returns a frame you can't read.' That is a clear when-to-use. It offers no exclusions or named alternatives (e.g. modbus_crc for CRC computation, frame_parse for non-Modbus frames), so routing is only partially resolved.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nmea_parseA
解析 NMEA 0183 语句(GPS/北斗模块最常见的串口输出),给人话解读。
支持 GGA/RMC/GSA/GSV/VTG/GLL,逐句输出 UTC 时间、经纬度(度分 + 十进制度)、 定位质量、卫星数、HDOP、速度、日期。把模块吐出来的整段原始数据直接贴进来: nmea_parse("$GNGGA,012345.00,3112.3456,N,12122.3456,E,1,08,0.9,12.3,M,,M,,*47") ★ 每句都验 XOR 校验和,不过的会明说「这句数据不可信」,不会把错帧当对的解。 ★ 非 NMEA 的行会单独指出并跳过,不当成数据。
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well: it discloses per-sentence XOR checksum validation, that failed frames are explicitly flagged as untrustworthy rather than silently misinterpreted, and that non-NMEA lines are flagged and skipped. Missing only limits, but the key correctness/error-handling behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then supported types and output fields, then a runnable example, then the two behavioral caveats. Every line adds value and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be detailed, yet the description still summarizes emitted fields (UTC, lat/lon, fix quality, sats, HDOP, speed, date). Combined with the behavioral notes, it is sufficient for a single-parameter parser; only edge conditions like mixed valid/invalid input handling are implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% for the single 'text' parameter, so the description must compensate and largely does — it defines the input as the full raw NMEA string and supplies a literal example, removing ambiguity about format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (解析/parse) and resource (NMEA 0183 语句) and enumerates the exact supported sentence types (GGA/RMC/GSA/GSV/VTG/GLL). An agent can distinguish this from sibling parsers like modbus_parse, frame_parse, or analyze_log without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs how to feed the tool ('把模块吐出来的整段原始数据直接贴进来' — paste the whole raw module output) and provides a concrete literal example call. It gives clear context but does not contrast with alternative parsers or state 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.
onewire_scanB
1-Wire 搜索 ROM,列出总线上每颗器件的 64 位 ROM 码,并解出家族码对应的器件。
搜不到时的第一条怀疑对象是数据线缺 4.7k 上拉(1-Wire 靠上拉给器件充电, 缺了必然一颗都搜不到)——输出里会给完整清单。
| Name | Required | Description | Default |
|---|---|---|---|
| bus | No | ||
| port | No | ||
| baudrate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the failure mode and diagnostic insight (pull-up requirement) and that output is a complete list, but omits anything about the scan's timing, bus/port acquisition behavior, or error signaling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: purpose first, then the diagnostic caveat. Both sentences earn their place without padding, though the emphasis styling on the pull-up tip is slightly heavy for the space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, and the description covers purpose and a failure mode adequately. However, with three fully undocumented parameters and no usage routing versus sibling scan tools, it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description explains none of the three parameters (bus, port, baudrate). The names are somewhat self-evident, but for a hardware scan tool the meaning of 'port' and the interaction between bus/port is left entirely undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: performs 1-Wire Search ROM, lists each device's 64-bit ROM code, and resolves family codes to device names. The '1-Wire' qualifier implicitly separates it from i2c_scan/spi_scan siblings, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only context offered is a troubleshooting hint for when nothing is found (missing 4.7k pull-up). It never says when to choose this over i2c_scan/spi_scan or what prerequisites exist, so the agent must infer selection from the bus name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_mapA
解析 .map 文件:段占用(Flash/RAM)、符号表、可疑大符号(查大数组/大缓冲)。
支持 GNU ld / Keil / IAR 三种格式,自动识别;认不出会明说,不猜。 parse_map("build/app.map") 查"RAM 怎么爆了""哪个大数组吃栈"时用。结果里的符号大小若是「推断」值, 表示该 map 不记 size,大小由相邻符号地址差推出(可能偏大)。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| top_n | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does meaningful work: it discloses auto-detection across GNU ld / Keil / IAR, that unrecognized input is reported rather than guessed, and the crucial 'inferred' symbol-size caveat (may be overestimated). It omits any note on performance or file-size limits but the interpretive caveat is genuinely valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then format support, then a copyable example, then usage, then a caveat. Dense but every line contributes; the embedded code example is slightly awkward as prose but earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value formatting need not be explained. The description still covers supported formats, detection failure behavior, usage context, and result interpretation, leaving only the undocumented top_n parameter as a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It shows a path example (parse_map("build/app.map")), which helps for the required param, but top_n is never explained — its meaning (top N largest symbols?) and role must be guessed from the title alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (parse .map file) and enumerates the concrete outputs: section occupancy (Flash/RAM), symbol table, and suspicious large symbols. An agent can immediately distinguish this from the other 60+ analysis tools, none of which target map files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit use-case framing in "when RAM blew up / which big array eats stack," which routes the agent correctly. It stops short of naming alternatives or stating when NOT to use it (e.g., vs sibling symbol_lookup), so it does not reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
peripheral_api_getA
单个驱动的外设初始化要求全文(取自其 *_port.h 适配层原注释)。 name 来自 peripheral_api_list。
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the content is derived from header comments, implying read-only documentation retrieval. However, it does not explicitly state read-only behavior, side effects, or failure conditions. Adds some context but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with purpose and then parameter sourcing. Every clause earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not detail return values. It explains the content source and where to obtain the parameter. Minor gaps remain around error handling or alternatives, but it is complete enough for a simple getter with output schema support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With one parameter and 0% schema description coverage, the description compensates by stating the origin of 'name' (from peripheral_api_list). It does not add format, constraints, or examples, leaving some ambiguity about valid values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (full text of a single driver's peripheral initialization requirements) and names the source (*_port.h adaptation layer comments). It explicitly distinguishes itself from the list sibling by noting that 'name' comes from peripheral_api_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: use this after peripheral_api_list to fetch full text for a given name. The parameter sourcing is stated. No explicit when-not or alternative tools are mentioned, but the dependency is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
peripheral_api_listB
外设 API 用法知识层:每个驱动要占哪些外设(I2C1/TIM1/UART2…)、 初始化顺序有什么硬要求。移植驱动或排查"外设配了但读不到数"时先查这里。
| Name | Required | Description | Default |
|---|---|---|---|
| bus | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the kind of content returned (peripheral assignments and init-order constraints), but says nothing about the 'bus' filter behavior, result scope, or any operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight clauses, front-loaded with the resource definition followed by the usage trigger. No wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the content scope is reasonably conveyed. But the sole input parameter is undocumented in both schema and description, and no annotations exist, leaving the definition incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter ('bus') with 0% schema description coverage, and the description never mentions it or its filtering semantics. The description therefore fails to compensate for the schema gap; an agent cannot tell what 'bus' filters by.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource (peripheral API usage knowledge: which peripherals each driver occupies like I2C1/TIM1/UART2 and init-order requirements) and an intended use. It does not explicitly distinguish itself from the sibling peripheral_api_get, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete when-to-use: porting drivers or troubleshooting 'peripheral configured but can't read data'. However it names no alternative (e.g., peripheral_api_get) and gives no when-not guidance, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pin_checkA
检查 MCU 引脚分配是否冲突(内置数据手册级复用映射)。 mcu 如 "stm32f103c8t6";pins 如 {"PA9": "USART1_TX", "PB6": "I2C1_SCL", "PA0": "GPIO"}。 board 可选开发板名(如 "bluepill"):板载外设占用的引脚再挪用会警告。 能抓:该脚没有此功能(AI 幻觉接线)、同一功能双占、SWD 脚挪用、 remap 档不匹配、非 5V 容忍脚;ESP32 类查硬约束(flash 保留脚/仅输入/strapping)。 写代码分配引脚之前必须先过一遍。
| Name | Required | Description | Default |
|---|---|---|---|
| mcu | Yes | ||
| pins | Yes | ||
| board | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it enumerates the classes of problems detected (nonexistent pin function / hallucinated wiring, double-occupied functions, SWD repurposing, remap-bank mismatch, non-5V-tolerant pins, ESP32 hard constraints like flash-reserved/input-only/strapping) and the warning behavior for reusing board-occupied pins. An output schema exists, so return values need not be described. No performance or error behavior is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then worked examples, then optional-parameter behavior, then the detection list, then the usage mandate. Dense but every sentence adds information; slightly long, though none of it is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity validation tool with an output schema, the description covers purpose, all three parameter formats, detection scope, and the precondition for use. Little an agent needs to invoke it correctly is missing; only alternative-routing and error behavior are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the nested pins object has no per-key documentation, so the description must compensate — and it does, giving the exact expected format for each parameter: mcu as "stm32f103c8t6", pins as {"PA9": "USART1_TX", ...} (pin→AF-function map), and board as an optional name like "bluepill".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: checks whether MCU pin assignments conflict, with a parenthetical scoping the knowledge source (built-in datasheet-level AF mapping). This clearly distinguishes it from lookup siblings pinmap_list/pinmap_get, which merely retrieve mappings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes when to use it: '写代码分配引脚之前必须先过一遍' (must run before writing pin-assignment code). It also notes board is optional and why to supply it (onboard-peripheral occupancy triggers warnings). It does not name sibling alternatives or state when-not-to-use, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinmap_getA
输出指定 MCU 的 pinmap JSON 原文(全引脚复用映射 + caveats + 常见冲突提示)。 pin_check 报错后想看完整数据、或需要给用户展示映射依据时用。
| Name | Required | Description | Default |
|---|---|---|---|
| mcu | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses what the output contains (mux map, caveats, conflict hints), which is genuinely useful, but it never states that this is a side-effect-free read operation or how large/verbose the raw JSON may be.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, purpose front-loaded, then usage conditions. No wasted phrasing; the only minor cost is that the parameter format is left unstated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description still summarizes the payload. With one simple param and clear triggers, it is nearly complete — the gap is the undocumented 'mcu' value format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single required 'mcu' parameter has no documentation in the schema or the description. The text says '指定 MCU' but gives no format or naming convention, so an agent must guess the acceptable identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: outputs the raw pinmap JSON for a specified MCU, and enumerates the returned content (full pin mux map + caveats + common conflict hints). This clearly separates it from the sibling checkers (pin_check) and listers (pinmap_list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two explicit trigger conditions ('after pin_check reports an error', 'to show the user the mapping basis') and names the sibling pin_check as the alternative. No explicit 'when-not' clause, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pinmap_listA
列出引脚知识库已收录的 MCU 型号。pin_check 前可用它确认型号是否支持。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not state that this is a read-only lookup with no side effects, nor whether the list is static or reflects a live/local index. For a zero-parameter enumeration tool the behavior is largely self-evident, but the disclosure is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with what is listed and followed by the practical usage cue. No redundant restatement of the title or schema, and nothing filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and with zero parameters the description is nearly sufficient for correct invocation. The one gap is the unspecified relationship to pinmap_get for retrieving details on a listed model.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters, so there is nothing to document and the schema imposes no ambiguity; a baseline 4 applies. The description adds no parameter-related content, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: lists the MCU models contained in the pin knowledge base. An agent can tell it apart from generic list tools like board_list or component_list, but it never contrasts itself with the closest sibling, pinmap_get, which presumably retrieves the pin map for one model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the tool relative to a named sibling: use it before pin_check to verify whether a model is supported. That is real when-to-use guidance, though it gives no when-not condition or mention of pinmap_get as the follow-up step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
probe_listA
探测已连接的调试器(DAPLink/ST-Link/J-Link...)和目标芯片。 "烧录失败/找不到目标芯片"时先调这个。需要可选依赖 pyocd。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. It does disclose a real operational trait — an optional pyocd dependency — which is genuinely useful, but it says nothing about whether the probe is a read-only enumeration, whether the call can hang on missing hardware, or what happens when no probe is attached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences plus a dependency note; the capability is stated first and the usage trigger second. Nothing is padded, though the dependency clause is appended rather than integrated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and with zero parameters the only real gaps are behavioral (failure modes, hardware prerequisites). The description covers purpose, a usage trigger, and a dependency, which is nearly sufficient for this simple enumeration tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies: there is no parameter semantics to explain, and the description correctly adds none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (probe/探测) plus two concrete resources: connected debug probes (DAPLink/ST-Link/J-Link) and the target chip, which is more specific than a generic 'list probes'. It does not, however, distinguish itself from overlapping siblings such as flash_tool_detect or chip_info, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit triggering condition: call this first when flashing fails or the target chip cannot be found. That is a clear and actionable 'when to use', but no exclusive condition or named alternative (e.g. flash_tool_detect) is offered for the non-failure path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
project_detectA
识别一个工程目录属于哪个生态(扫标志文件:platformio.ini / *.uvprojx / prj.conf / SConstruct / *.ewp / Cargo.toml),并给出该生态的构建方式与常见坑。 拿到别人的工程压缩包、或不知道从哪下手时先跑这个。只探一层,不递归。
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the detection mechanism, the scope limit ('只探一层,不递归'), and what it returns conceptually (构建方式与常见坑). It does not discuss permissions or failure modes when no marker file matches, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight clauses: what it does and how, when to run it, and its scope boundary. Front-loaded, no filler, and the non-recursion limitation is placed right where an agent would look for it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return values need not be spelled out since an output schema exists, and the description still sketches them. Covers mechanism, ordering, and scope. The only real gap is the undocumented 'path' parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'path' parameter has 0% schema description coverage and the description never mentions it — no statement that it defaults to '.', nor whether it accepts relative or absolute paths. With low coverage the description needed to compensate and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (识别/identify) and resource (工程目录归属生态) and even enumerates the exact marker files it keys on, which pins down the mechanism. This clearly distinguishes it from siblings like ecosystem_list and ecosystem_get, which enumerate ecosystems rather than detecting one from a directory.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit triggering condition ('拿到别人的工程压缩包、或不知道从哪下手时先跑这个'), which is strong routing guidance. It stops short of naming an alternative tool or a when-not-to-use case, so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_sessionA
把一次串口会话导出成 Markdown 交付报告(故障分析 + 原始日志附后)。
调完一次问题,把「现象/证据/结论/下一步」直接变成可交付文件——毕设报告、 工单、给同事看都行。原始日志原样附在末尾,避免「只有结论没有证据」。
数据来源:给 handle(活动会话)或 fname(已落盘日志,来自 sessions_list); 都不给时若恰好只有一份日志会自动用它。 默认落点 <数据根>/reports/;已存在不覆盖(要覆盖传 overwrite=True + confirm=True)。
| Name | Required | Description | Default |
|---|---|---|---|
| fname | No | ||
| handle | No | ||
| confirm | No | ||
| out_path | No | ||
| overwrite | No | ||
| tail_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely meets it: it discloses the default drop location (<数据根>/reports/), a no-clobber policy, and the exact escape hatch (overwrite=True + confirm=True). It does not mention permissions, error conditions, or size limits, but the safety-relevant write behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in a bolded first line, then layers data-source and overwrite rules in short paragraphs. Every sentence carries information; the only mild redundancy is restating the value proposition ('毕设报告、工单、给同事看').
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the description still covers data sources, output location, and overwrite semantics. The undocumented tail_lines parameter and absent error/edge-case notes keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains fname (from sessions_list), handle (active session), the mutual default behavior, out_path (default report dir), and the overwrite/confirm pairing. Only tail_lines is left undocumented, a small remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (导出/export) and resource (串口会话/serial session) plus the concrete artifact produced (Markdown 交付报告 with 故障分析 + raw log). This clearly separates it from siblings like serial_session_log (logging) and analyze_log (analysis-only).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('调完一次问题' – after completing a debugging session) and enumerates data-source selection rules (handle vs fname vs auto-pick single log). It does not explicitly state when to prefer a sibling tool over this one, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_reasonA
读复位原因(RCC_RSR 标志)与内核运行状态,走 hotplug:不复位、不停内核。
回答「板子为什么自己重启了」「是不是看门狗喂狗没喂上」这类问题。 RCC_RSR 会给出 PINRSTF(复位引脚)/ BORRSTF(欠压)/ SFTRSTF(软件)/ IWDGRSTF(独立看门狗)/ WWDGRSTF(窗口看门狗)/ LPWRRSTF(低功耗退出)。
★ 关键理解:这些标志是【累积】的,只有写 RMVF 或整片掉电才清。 所以「好几个位同时为 1」= 「自上次清零以来发生过这几类复位」, 不等于「最后一次是它们一起发生」。 要定位「这一次」:先 clear_flags=True + confirm=True 清零 → 复现 → 再读。 clear_flags 不可逆(销毁现场),受隔离层管辖且需 confirm=True。 then_reset 只在 clear_flags=True 时有意义:清零并读回验证后再复位一次, 让内核继续跑(默认 True)。
★ 哪些动作会自己置标志(实测,用来区分「真复位」与「读操作自带的噪声」): hotplug 连接(仅连接)→ 不置任何标志; normal 连接(仅连接)→ PINRSTF|SFTRSTF; hotplug + -rst → PINRSTF|SFTRSTF; hotplug + -hardRst → 仅 PINRSTF。 所以清零后读回还看到 PINRSTF/SFTRSTF 几乎总是命令自己造成的,不是 RMVF 没生效。
★ 为什么必须 hotplug:STM32CubeProgrammer 以 normal 档连接动作本身就会复位目标 并 halt 内核。用 normal 读复位原因,读到的第一个标志就是这次读操作自己造成的 —— 结论必然错。
| Name | Required | Description | Default |
|---|---|---|---|
| sn | No | ||
| confirm | No | ||
| then_reset | No | ||
| clear_flags | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so richly: it explains that RCC_RSR flags are cumulative (only cleared by RMVF or power loss), warns against misreading simultaneous bits, discloses that clear_flags is irreversible/destructive and gated by an isolation layer requiring confirm=True, and lists which connection actions self-set flags to distinguish real resets from read noise.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with purpose before the ★ behavioral sections, and every section earns its place given the tool's complexity. It is long and somewhat repetitive in the flag-action examples, but the length is largely justified by the operational subtleties.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-value explanation is unnecessary; the description fully covers purpose, usage routing, the destructive/irreversible nature of clear_flags, the confirm gating, and the cumulative-flag caveat. Nothing essential for a correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It richly documents clear_flags (irreversible, needs confirm), then_reset (only meaningful when clear_flags=True, default True), and confirm, but never explains the 'sn' parameter. Three of four parameters get strong semantics, which is substantial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('读复位原因(RCC_RSR 标志)与内核运行状态') and immediately scopes it ('走 hotplug:不复位、不停内核'), which distinguishes it from reset/flash siblings. An agent can tell exactly what it does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the concrete question this answers ('板子为什么自己重启了', watchdog issues) and gives an explicit when-not/alternative path: it explains that 'normal' connection resets the target and halts the kernel, so hotplug is mandatory. The clear-then-reproduce-then-read workflow is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rs485_sendA
经桥的 RS485 收发器发送字节(桥负责 DE 方向脚的时序)。
★ 能力边界:它只能确认桥把字节推出去了,对端有没有收到它证明不了。 要验证整条链路得让对端回话(再用 serial_read 读),或示波器看 A/B 差分波形。 这句限制会直接打印在输出里,不代用户下结论。
| Name | Required | Description | Default |
|---|---|---|---|
| bus | No | ||
| data | Yes | ||
| port | No | ||
| de_ms | No | ||
| newline | No | ||
| baudrate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a good job: it discloses the critical behavioral limitation that a successful send only confirms bytes left the bridge, not that the peer received them, and warns the message prints in output. It does not cover error behavior, baudrate effects, or DE timing failures, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action in the first sentence, then uses a clear boundary section. It is a bit verbose with emoji/markdown emphasis and a note that the limitation is printed in output, which overlaps with output schema, but overall structured and not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description adds the key caveat about verification limits. It is missing preconditions and parameter guidance, but for a tool whose parameter names are mostly self-explanatory (data, baudrate) and with an output schema, the main completeness gap is moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 6 parameters (bus, data, port, de_ms, newline, baudrate). The description mentions 'bytes' and DE direction timing but does not document what any parameter means, defaults, or formats. This leaves an agent unable to correctly populate parameters such as de_ms or newline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (send bytes) and a specific resource/mechanism (the bridge's RS485 transceiver), and clarifies the bridge handles DE direction timing. This is clearly distinguished from serial_send (generic serial) by the RS485-specific framing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains a capability boundary and hints that link verification requires the peer to respond (read via serial_read) or scope inspection. However, it does not explicitly state when to choose rs485_send over serial_send, nor any preconditions (e.g., must serial_open first, bus/port selection).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rtt_readA
通过 pyocd 的 RTT 通道读目标板调试日志(⚠ 实验性)。 固件需集成 SEGGER RTT 控制块;比 UART 快且不占串口外设。 cbuffer:控制块编号(多通道时指定,默认读全部);probe_serial:多调试器时指定。 失败自动给排查指引,建议先 probe_list 确认调试器。
| Name | Required | Description | Default |
|---|---|---|---|
| cbuffer | No | ||
| seconds | No | ||
| probe_serial | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses experimental status (⚠ 实验性), the firmware prerequisite, and that failures return troubleshooting guidance, but says nothing about blocking behavior, expected duration, or permissions. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose and experimental warning, then covers prerequisites, parameters, and failure behavior in a compact block. Each sentence carries information; only minor tightening is possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return-format explanation is unnecessary, and prerequisites/usage are covered. However, for a 3-parameter tool at 0% schema coverage, leaving 'seconds' undocumented means an agent cannot learn the read duration semantics from anywhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains cbuffer (control block index, default reads all channels) and probe_serial (specify when multiple debuggers), adding real meaning, but the third parameter 'seconds' is left entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('通过 pyocd 的 RTT 通道读目标板调试日志') and adds differentiating scope: faster than UART and does not occupy the serial peripheral, which distinguishes it from serial_read siblings. An agent can tell what this does and how it differs without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite (firmware must integrate a SEGGER RTT control block) and a next-step routing hint ('建议先 probe_list 确认调试器'), plus an implicit contrast with UART. It stops short of stating explicit when-not-to-use conditions or naming a specific alternative tool for the fallback case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_closeB
关闭串口句柄。调试结束记得关,释放端口。
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden for a state-mutating tool. It notes the port is released, but says nothing about whether the handle becomes invalid, whether close is idempotent, what happens to in-flight reads/writes, or what error surfaces for a bad handle.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action first, rationale second — front-loaded and waste-free. Slightly terse for a mutation tool, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers the basic purpose and resource-release benefit. However, with zero annotations and an undocumented parameter, it leaves the mutation semantics and handle provenance under-specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single 'handle' parameter is undocumented in the schema. The description never explains which handle value is expected (e.g., one returned by serial_open), so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (close the serial port handle), which is unambiguous and clearly the inverse of the sibling serial_open. It does not explicitly name the sibling, so differentiation comes from the verb rather than routing language.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context — close after debugging finishes so the port is released — which tells the agent when this tool is appropriate. It stops short of naming alternatives or stating what happens if the handle is left open, but the intended timing is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_listA
列出系统可用串口。识别 CH340/CP2102/FT232 等常见 USB 转串口芯片并给驱动建议。 毕设学生"串口列表里找不到板子"时先调这个。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden — and it discloses non-obvious behavior: the tool not only enumerates ports but also probes chip identity and emits driver recommendations. It is implicitly a non-destructive read, though that is never stated outright.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with what it lists, then the value-add, then the call trigger. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Zero parameters, an output schema that covers return values, and a simple read operation — the description supplies exactly what an agent needs to select and invoke it correctly, with the extra chip/driver detail as a bonus.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to misinterpret; baseline 4 applies. Schema coverage is 100% and no parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (列出系统可用串口) and then extends it with concrete added capability — recognizing CH340/CP2102/FT232 USB-serial chips and suggesting drivers. This cleanly distinguishes it from sibling read/write tools like serial_open, serial_read, and driver_list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger scenario: 'when the board is not visible in the serial port list, call this first.' That is a real when-to-use cue, but no alternatives or exclusions are named (e.g., when to prefer driver_list or probe_list instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_openB
打开串口,返回句柄 handle。port 形如 "COM3" 或 "/dev/ttyUSB0"。 波特率不确定就先用 115200(STM32 HAL 默认)或 9600(老例程/模块默认)。
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | ||
| parity | No | N | |
| baudrate | No | ||
| data_bits | No | ||
| stop_bits | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return artifact (a handle), which is real behavioral value. But it omits resource-lifecycle traits an agent needs: that the handle must later be closed, whether a port is exclusively held, and what happens on a busy/nonexistent port.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with purpose then parameter tips, with no filler. Efficient and appropriately sized for a small open-port tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required. Given that, the description covers the essentials (port format, baudrate) but is thin on the resource-management context that matters for a stateful open operation, leaving it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does partially: it specifies the port string format ('COM3' vs '/dev/ttyUSB0') and offers baudrate defaults. The remaining three parameters (parity, data_bits, stop_bits) are undocumented in both schema and description, so it does not fully close the gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('打开串口' / open serial port) and names the returned artifact (handle), which cleanly distinguishes it from siblings like serial_read/serial_send/serial_close. It does not explicitly name an alternative, but the open-semantics are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides actionable guidance on choosing a baudrate ('115200 for STM32 HAL, 9600 for old routines/modules'), which is genuinely useful. However it gives no when-to-use/when-not framing, no mention of pairing with serial_close, and no pointer to serial_list or baudrate_autodetect as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_pair_recordA
同时监听两个串口,输出时间线交错的录制日志(RS485 主从对话/两设备联调)。 每行前缀 [A]/[B] 标明来源口,附 HEX 视图防波特率猜错时完全看不懂。最长 120s。
| Name | Required | Description | Default |
|---|---|---|---|
| baud_a | No | ||
| baud_b | No | ||
| port_a | Yes | ||
| port_b | Yes | ||
| seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 disclose meaningful traits: interleaved output with [A]/[B] source prefixes, a HEX view fallback for wrong baud rates, and a hard 120s cap. However it omits operationally important behavior — whether it opens/exclusively holds the ports (relevant given serial_open exists), whether it blocks, and error behavior on a busy port. Useful but incomplete for a capture tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with the core action front-loaded, followed by output-format details and the time cap. No filler. Slightly compressed for a 5 — the HEX-view clause is a justification rather than an instruction, but it earns its place by explaining the output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers purpose, output shape, and the duration cap. Still, for a 5-parameter capture tool it leaves the required port arguments and the port-occupancy/interaction behavior undefined, which an agent would need for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It implicitly references the per-port baud parameters (the HEX-view 'wrong baud rate' rationale) and pins the seconds parameter to a 120s ceiling, which adds real meaning. But it says nothing about port_a/port_b naming or expected port identifiers, leaving half the parameters unclarified in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: simultaneously listening to two serial ports and emitting a merged timeline log. The '(RS485 master-slave / dual-device debugging)' parenthetical sharpens the intent and sets it apart from the single-port serial_read/stream_capture siblings. No sibling is named, but the dual-port scope is distinctive enough to disambiguate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete usage scenario (RS485 master-slave dialogue, two-device joint debugging) that tells the agent when this tool beats the single-port alternatives. It does not state exclusions or prerequisites (e.g., ports must be free/not already opened via serial_open), so it stops short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_readA
从串口读取数据(非阻塞,三条件提前退出)。 expect:正则,命中立即返回(如 expect="OK|ERROR" 等响应); idle_ms:静默超时(板子说完就走); seconds:总时长上限。返回文本视图 + HEX 视图 + 是否命中。 读到的内容同时累积进会话日志。
| Name | Required | Description | Default |
|---|---|---|---|
| expect | No | ||
| handle | Yes | ||
| idle_ms | No | ||
| seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses non-blocking behavior, the three early-exit conditions, the return shape (text + HEX + match flag), and a side effect (content accumulates into the session log). It omits error/timeout failure behavior, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and non-blocking qualifier are front-loaded, followed by tightly scoped one-line explanations of each parameter and the return format. No filler sentences; every clause adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the return description is a bonus rather than a necessity. The parameters, exit semantics, and side effect are all covered, leaving only prerequisite/error-handling details that an agent might want for a serial read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: expect is explained as a regex with immediate return, idle_ms as a silence timeout, and seconds as the total duration cap, each with a concrete example. Only 'handle' is left unexplained, but its role is obvious from context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('从串口读取数据') plus a key behavioral qualifier (non-blocking, three early-exit conditions). An agent can distinguish it from serial_send/serial_open by the read semantics, though it never explicitly names those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage is conveyed through the three exit conditions (expect/idle_ms/seconds), which tells the agent how the read terminates. However, there is no explicit when-to-use vs alternative guidance and no stated prerequisite that a serial_open handle is required first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_sendA
向串口发送数据并等响应。newline=True 自动追加 \r\n(AT 指令必须!)。 expect:正则,如 "OK"——发 AT 后等到 OK/ERROR 立即返回,不傻等; wait_s:等待响应上限秒数(默认 0.5,AT 慢响应建议 3~5)。 hex_mode=True 时 data 按 HEX 解析(RS485/Modbus 用)。
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| expect | No | ||
| handle | Yes | ||
| wait_s | No | ||
| newline | No | ||
| hex_mode | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses meaningful behaviors: automatic \r\n appending, regex-based early return, timeout cap via wait_s, and hex parsing mode. It omits other important traits such as required serial-open state, timeout behavior beyond the cap, and error handling, so it is adequate but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then uses one short sentence per key parameter. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no annotations, and an output schema, the description covers the action and most parameter semantics but omits the handle's origin (likely serial_open) and does not route between this and sibling tools like at_sequence or rs485_send. Enough to invoke, but not fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains expect (regex), wait_s (max seconds, default 0.5, AT suggestion 3–5), newline (auto-append \r\n), and hex_mode (HEX parsing for RS485/Modbus). The required handle parameter is not explained, which is a gap, but the non-obvious parameters are well covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('向串口发送数据并等响应') and is distinct from generic siblings like serial_read. However, it does not explicitly differentiate itself from at_sequence or rs485_send, which also send serial data under certain conditions, leaving some sibling selection ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear contextual guidance for parameter usage: newline=True for AT commands, expect for early return on OK/ERROR, wait_s for slow AT responses, hex_mode for RS485/Modbus. No explicit when-not or alternative tool naming is given, but the operational contexts are sufficiently described.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serial_session_logB
取该句柄自打开以来的全部累积日志(喂给 analyze_log 做整体分析用)。
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, but it does disclose one meaningful behavioral trait the schema cannot: the log is cumulative from session open rather than incremental. It says nothing about size limits, truncation, blocking behavior, or whether the buffer is consumed/cleared, which leaves gaps for an unannotated read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the resource and scope front-loaded before the usage hint in parentheses. Nothing is wasted, though the parenthetical slightly dilutes an otherwise direct statement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the intended use with analyze_log is stated. Still, the single parameter's origin is unexplained and, with zero annotations, the safety/behavior profile of this read is only partially covered by 'cumulative since open'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required 'handle' parameter. The description refers to 'that handle' but never says where the handle comes from (presumably serial_open) or what form it takes, so it does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: retrieving the full cumulative log for a given session handle, with the scope ('since opened') made explicit. This distinguishes it from incremental readers like serial_read, but the description never names that sibling to make the contrast airtight.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parenthetical 'to feed analyze_log for overall analysis' gives a clear intended downstream use, which implies when to pick this over incremental reads. However, there are no explicit exclusions, no statement of when not to use it, and no named alternative among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sessions_getA
读取指定会话日志的内容(文件名来自 sessions_list)。 默认显示尾部 200 行(日志开头常是复位前旧数据)。整段内容可直接喂 analyze_log。
| Name | Required | Description | Default |
|---|---|---|---|
| fname | Yes | ||
| tail_lines | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 default tail behavior and the reason (stale pre-reset data at the head), which is useful operational context. It does not mention file size limits, error behavior for missing files, or whether the full log can be retrieved by overriding tail_lines.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero waste. The essential purpose and default behavior are front-loaded, and the routing hint to analyze_log and sessions_list is compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers the core operation, default tail behavior, filename source, and downstream usage. It is nearly complete, lacking only edge-case guidance (e.g., missing file, overriding tail_lines to get full content).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that fname comes from sessions_list, adding meaning beyond the bare string type. It also mentions the default of 200 tail lines, which clarifies the tail_lines parameter's default behavior, though it does not explain how to retrieve the full log or what tail_lines accepts beyond the integer type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: reading the content of a specified session log file. It explicitly ties the filename source to sessions_list and names a downstream consumer (analyze_log), making the tool's identity unambiguous among its many siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly indicates when to use it (after obtaining a filename from sessions_list) and hints at the default behavior of tailing 200 lines because the log head often contains stale data before a reset. However, it does not state any exclusions or conditions where an alternative tool might be preferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sessions_listB
列出已落盘的串口会话日志(serial_open 时自动创建,新→旧)。 会话被关闭甚至对话轮次已隔很久之后,仍可用它找回之前的串口现场。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose two useful traits: these logs are auto-created by serial_open and are ordered newest→oldest. It omits pagination/limit behavior and any note on whether listing is cheap or scoped, so behavioral context is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no wasted words, and the core purpose is front-loaded ahead of the usage hint. Efficient, though not maximally information-dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the tool is a simple list operation. Still, with no annotations and an undocumented limit parameter, the description leaves an agent guessing about pagination semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the sole parameter (limit) is not mentioned at all in the description. The description fails to tell the agent what limit controls or its default/ceiling, so it does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (persisted serial session logs) and adds distinguishing detail: auto-created at serial_open, ordered newest→oldest. It does not explicitly differentiate from the close sibling sessions_get, but the scope is otherwise clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence implies usage ('even after the session is closed, or many turns later, still usable to recover the prior serial scene'), which gives a clear situational trigger. However, it never names when to pick this over sessions_get or serial_session_log, leaving the alternative to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spi_read_regB
发一个 SPI 命令字并读回 N 字节(对读了命令字的从设备通用)。
例:读 JEDEC ID → spi_read_reg(cmd_byte=0x9F, count=3)。
| Name | Required | Description | Default |
|---|---|---|---|
| cs | No | ||
| bus | No | ||
| port | No | ||
| count | No | ||
| baudrate | No | ||
| cmd_byte | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full behavioral burden. It discloses only that it transmits a command byte and reads back bytes; nothing about chip-select handling, bus selection, clock/baudrate behavior, timing, or constraints. This is a thin disclosure for a hardware bus operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded, followed immediately by a concrete call example. No filler; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation. But with six parameters at 0% schema coverage and no annotations, the definition leaves bus/cs/port/baudrate entirely opaque, which is insufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, so the description must compensate. The example clarifies cmd_byte and count semantics, but cs, bus, port, and baudrate receive no explanation anywhere, leaving half the surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: sends an SPI command byte and reads back N bytes, with the qualifier that it suits slaves that read command words. This is clear and distinguishable from i2c_read_reg by bus, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a concrete usage example (read JEDEC ID with cmd_byte=0x9F, count=3) and notes the applicable device class, which implies when to use it. However it gives no explicit when-not guidance and does not contrast with spi_scan or i2c_read_reg.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
spi_scanA
逐条 CS 读 JEDEC ID(0x9F),找出板上挂的 SPI flash,并解出厂商与容量。
★ SPI 没有地址概念,所以「扫描」只能是「对每条 CS 发 0x9F」。因此本工具 只对遵守 0x9F 的 SPI NOR/NAND flash 有效;对 SPI 传感器 / ADC / 显示驱动 (各有自己的命令字)扫不出来是正常的,不是故障 —— 那种器件请用 spi_read_reg 给具体命令字。
| Name | Required | Description | Default |
|---|---|---|---|
| bus | No | ||
| port | No | ||
| baudrate | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses a critical behavioral trait not visible in structured data: the scan can only work by blasting 0x9F per CS because SPI has no addressing, so false negatives on non-flash devices are expected. It does not cover timing, baudrate effects, or error behaviour, but the false-negative caveat is unusually valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose in one line, then a clearly marked caveat block. Slightly verbose with the ★ framing, but every sentence adds actionable meaning and nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation. The description covers purpose, valid device class, failure semantics, and the alternative tool, leaving only parameter meaning as a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 3 parameters, and the description never explains bus, port, or baudrate (e.g. what 'port' means for SPI, or how baudrate affects the 0x9F probe). The schema leaves these bare, so the description should have compensated and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+mechanism: it reads JEDEC ID (0x9F) on each CS line to find SPI flash and resolve vendor and capacity. It explicitly distinguishes itself from the sibling spi_read_reg, so an agent can route between them without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use (0x9F-compliant SPI NOR/NAND flash) and when-not (SPI sensors, ADCs, display drivers), including that a miss on those parts is normal rather than a fault, plus the concrete alternative spi_read_reg with its command-word requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stack_unwindA
栈回溯:把 fault 时压栈的 8 个字还原成调用链,定位出错函数。
frame 按硬件压栈顺序:[R0, R1, R2, R3, R12, LR, PC, xPSR] stack_unwind("build/app.elf", frame=[r0,r1,r2,r3,r12,lr,pc,xpsr]) ★同 symbol_lookup:优先给 .elf。.map 的符号表稀疏时 PC/LR 可能反查出 假函数名,工具会就此提示。 exc_return 传 handler 入口时的 LR——它决定栈帧是标准还是 FPU 扩展、 以及异常前用的是 MSP 还是 PSP(RTOS 任务)。传了会给出更准的判断。 ★ PC 反查不到符号时,说明是典型「跑飞」,工具会给排查方向。
| Name | Required | Description | Default |
|---|---|---|---|
| sp | No | ||
| path | Yes | ||
| frame | No | ||
| exc_return | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses the warning behavior for sparse .map symbol tables (fake function names), the effect of exc_return on frame/stack determination, and the 'runaway' diagnosis when PC cannot be resolved. It does not state whether the tool reads only or writes, so it is not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then packs frame layout, an example call, and edge-case guidance into tight lines. The ★ markers and inline example are efficient, though the density and mixed-script formatting add minor reading overhead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return formatting need not be covered, and the description supplies most of what a caller needs for a 4-param, annotation-free tool. The main gap is that sp is unexplained and the relationship between sp and frame (alternative ways to supply the stack) is never clarified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning, and it does for three of four: frame is fully specified by hardware push order, path is scoped to .elf vs .map, and exc_return's semantics are explained. sp is never described, leaving one parameter undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: unwind the 8 stacked words from fault time into a call chain and locate the failing function. It also names the frame layout and distinguishes itself by referencing symbol_lookup as a related-but-different tool. An agent can immediately tell what this does versus decode_fault/parse_map.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: use after a fault, prefer the .elf like symbol_lookup, and pass exc_return for a more accurate MSP/PSP and frame-type judgment. It stops short of explicitly contrasting with the obvious sibling decode_fault or stating when-not to use it, so it is strong but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stream_captureA
长时录测:持续采集串口一段时间,逐行打上到达时间戳落盘。
产出的文件**直接可以喂给 timing_analysis(path=...) ** —— 两件工具是同一条链路。
seconds 最长采集秒数;max_lines 收够多少行提前结束(0=不限); idle_stop_s 连续多少秒没数据提前结束(0=不用);out_path 默认落在会话日志目录 (已存在同名文件会自动改名,不覆盖旧现场)。
★ 为什么时间戳必须在采集端打:事后才拿到的日志如果没时间戳,时序信息就永久丢了。 采集时按到达时刻记一行,成本几乎为零,却让后面所有分析成立。 排查「偶发丢数据」「隔一会儿卡一下」时用:让它自己采几分钟,再看 timing_analysis。
| Name | Required | Description | Default |
|---|---|---|---|
| port | Yes | ||
| seconds | No | ||
| baudrate | No | ||
| out_path | No | ||
| max_lines | No | ||
| idle_stop_s | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that each line gets an arrival timestamp, that output defaults to the session log directory, and crucially that an existing same-name file is auto-renamed rather than overwritten (non-destructive). It does not describe output structure or error behavior, but the key mutation/storage semantics are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and the timing_analysis chain, followed by compact per-parameter semantics. The ★ rationale paragraph on why timestamps must be captured at collection time is somewhat editorial, but it is short and supports correct usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The description covers purpose, use case, key non-destructive behavior, and most parameters, leaving it nearly complete; only port/baudrate semantics and any error conditions are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it explains four of six parameters well (seconds, max_lines with 0=unlimited, idle_stop_s with 0=disabled, out_path destination and rename behavior). Only port and baudrate go unexplained, though baudrate's default is visible in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (持续采集串口/continuous serial capture) with a clear scope modifier (长时录测/long-duration) and explicitly names its downstream consumer timing_analysis(path=...). An agent can tell this capture-and-timestamp tool apart from other serial readers without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete triggering scenario (排查「偶发丢数据」「隔一会儿卡一下」) and the accompanying workflow (let it run a few minutes, then run timing_analysis). It does not, however, name when to prefer this over siblings like serial_session_log or serial_pair_record, so the exclusion guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
symbol_lookupA
把地址反查成「函数名+偏移」。fault 地址定位代码的关键一步。
symbol_lookup("build/app.elf", ["0x08004a2c"]) ★优先给 .elf 而不是 .map:.elf 的 .symtab 带真实 st_size,能判断 「地址还在不在这个函数内」;.map 只能靠「下一个符号 − 本符号」推断。 ★GNU ld(GCC/STM32CubeIDE/ESP-IDF)默认不往 .map 里写符号表, 同一份固件的 .map 可能只有个位数条目(实测 3 个,而 .elf 有 31 个)。 此时反查会命中段符号给出假函数名——所以本工具遇到这种稀疏 map 会 明确提示,并把同目录的 .elf 摆出来让你换源。 找不到符号时明确报"未找到",不给猜测的函数名——猜出来的名字比没名字更害人。
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| addresses | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the sparse-.map failure mode that yields 'fake function names', states that it emits an explicit warning and offers a replacement source, and guarantees a hard 'not found' rather than guessed names. It omits permission/rate-limit or performance characteristics, but for a pure lookup the disclosed edge-case behavior is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and routing advice are front-loaded, and the ★ markers separate the operational guidance from the failure-mode caveats. It is somewhat long and re-states the sparse-map problem across several lines, but nearly every sentence carries actionable information for this tool's tricky failure modes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the description instead covers the input requirements, the sparse-map edge case, and error semantics. For a 2-parameter tool with an output schema this is close to complete; only address-format specificity is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. The inline example symbol_lookup("build/app.elf", ["0x08004a2c"]) clarifies that `path` is a firmware artifact and `addresses` is a list of hex address strings, which adds real value. However, it never specifies accepted path variants or address string formats ('0x' prefix required? decimal allowed?), leaving notable gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first line states a specific verb+resource+transform: reverse-lookup an address into 'function name + offset', and the following line frames it as the key step in fault-to-code localization. This clearly distinguishes it from siblings like parse_map, decode_fault and stack_unwind, which the agent can tell apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong conditional guidance: prefer .elf over .map, and explains the reason (real st_size in .symtab enables in-function checks). It also tells the agent the tool will surface a same-directory .elf when a sparse map is detected. It does not explicitly name sibling alternatives (e.g., parse_map), so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timing_analysisA
时序 / 数据率分析:找丢帧(序号跳号)、卡顿(间隔离群)、节拍漂移。
输入二选一:text(现成日志内容)或 path(日志/采集文件)。 最顺的用法:先 stream_capture 采一段,再把它的文件路径喂进来。
时间戳自动识别两种:[+0.0123] 采集前缀、HH:MM:SS.mmm;其他格式用 pattern (第 1 个捕获组是秒)。 seq_pattern 给序号(第 1 个捕获组),例如 TICK 42 这种要写 seq_pattern="TICK\s+(\d+)"; 不给则只认行首那个整数。
★ 定位说明:时间戳来自 PC 侧(OS 调度 + USB 缓冲),自带毫秒级抖动。上面的数适合 【相对比较】——哪几次明显变慢、有没有跳号、是否整体漂移;不适合当示波器判 「周期是不是精确 1.000 ms」。
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| text | No | ||
| pattern | No | ||
| seq_pattern | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does so well: it discloses the timestamp auto-detection behavior (capture prefix [+0.0123] and HH:MM:SS.mmm, with pattern fallback), the default seq detection (leading integer only) versus explicit seq_pattern, and critically the accuracy caveat that timestamps come from the PC side (OS scheduling + USB buffering) with ms-level jitter, making results valid only for relative comparison. This is exactly the kind of trait that cannot be inferred from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the remaining sections (input choice, workflow, timestamp rules, seq rules, caveat) are logically ordered with no redundancy. It is somewhat long, but given 0% schema coverage and a nontrivial measurement caveat, most of the length is load-bearing rather than padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required. Given that, the description covers everything an agent needs to call this correctly: input selection, the stream_capture workflow, timestamp and sequence-number parsing rules, and the interpretive limits of the output. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it fully does: it explains path vs text as an either/or choice, states that pattern is for non-standard timestamp formats with the first capture group being seconds, and explains seq_pattern with a concrete example (seq_pattern="TICK\s+(\d+) for lines like 'TICK 42'). All four otherwise-undocumented parameters gain meaning here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opening line states a specific verb+resource (timing/data-rate analysis) and enumerates exactly what it detects: sequence-number gaps (dropped frames), interval outliers (stalls), and phase drift. This is clearly distinguishable from all siblings such as analyze_log or nmea_parse, which parse content rather than measure timing characteristics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the two mutually exclusive input modes (text vs path) and then names the ideal workflow: run stream_capture first and feed its output path in, which routes the agent to the correct sibling. It also documents a when-NOT condition ('not suitable as an oscilloscope for judging whether the period is exactly 1.000 ms'), so both the appropriate and inappropriate uses are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toolchain_statusA
探测本机嵌入式工具链:编译器(ARM GCC / armclang / RISC-V / Xtensa)、 调试器、构建系统(CMake/Ninja/west/SCons/PlatformIO/Cargo)各给版本。 换机器、或「我这能编过、换台电脑就编不过」时先看这个。烧录器用 flash_tool_detect。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose an important scope constraint — it probes only the local machine (本机) — and enumerates what is inspected, but it never explicitly states that the operation is read-only with no side effects, nor any permission or rate-limit considerations. Adequate but with a clear gap for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the verb and the local-scope qualifier, followed by the covered categories and the usage trigger. The enumerated lists are informative rather than filler, and the sibling redirect is placed last as a clean hand-off.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the zero-parameter signature removes input ambiguity. The description covers scope, categories, and usage; the only residual gap is the absence of an explicit read-only/no-side-effect statement, which is minor for a detection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline 4 case, and schema coverage is 100%. There is nothing further for the description to add about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (探测/probe) and resource (本机 embedded toolchain), then enumerates the covered categories — compilers (ARM GCC/armclang/RISC-V/Xtensa), debuggers, and build systems (CMake/Ninja/west/SCons/PlatformIO/Cargo). It also distinguishes itself from the sibling flash_tool_detect, so an agent can tell them apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use trigger (换机器, or the 'compiles here but not on another machine' scenario) and explicitly routes flasher detection to flash_tool_detect. Both the situation and the alternative are named, leaving nothing to inference.
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.
59 tool updates
v0.1.0- First observed
analyze_log - First observed
at_sequence - First observed
baudrate_autodetect - First observed
board_get - First observed
board_list - First observed
bridge_probe - First observed
chip_info - First observed
component_get - First observed
component_list - First observed
decode_fault - First observed
decode_register - First observed
decode_register_svd - First observed
driver_get - First observed
driver_list - First observed
driver_wiring - First observed
ecosystem_get - First observed
ecosystem_list - First observed
env_status - First observed
error_code_lookup - First observed
flash_firmware - First observed
flash_tool_detect - First observed
flash_verify - First observed
frame_parse - First observed
i2c_read_reg - First observed
i2c_scan - First observed
i2c_write_reg - First observed
logs_prune - First observed
modbus_crc - First observed
modbus_parse - First observed
nmea_parse - First observed
onewire_scan - First observed
parse_map - First observed
peripheral_api_get - First observed
peripheral_api_list - First observed
pin_check - First observed
pinmap_get - First observed
pinmap_list - First observed
probe_list - First observed
project_detect - First observed
report_session - First observed
reset_reason - First observed
rs485_send - First observed
rtt_read - First observed
serial_close - First observed
serial_list - First observed
serial_open - First observed
serial_pair_record - First observed
serial_read - First observed
serial_send - First observed
serial_session_log - First observed
sessions_get - First observed
sessions_list - First observed
spi_read_reg - First observed
spi_scan - First observed
stack_unwind - First observed
stream_capture - First observed
symbol_lookup - First observed
timing_analysis - First observed
toolchain_status
TDQS
Scored across 59 tools
Most tools have clearly distinct purposes, and descriptions explicitly clarify overlaps such as serial_read vs stream_capture and analyze_log vs error_code_lookup. However, with 59 tools, some subtle boundary cases remain (e.g., driver_get vs component_get, pinmap_get vs pin_check), so perfect disambiguation is not achieved.
Names uniformly use snake_case with helpful domain prefixes (serial_, i2c_, spi_, modbus_), making related tools easy to group. There is a minor inconsistency: some tools use noun_verb (pinmap_list, board_get) while others use verb_noun (decode_register, analyze_log), but the overall pattern is still readable and predictable.
59 tools is excessive for a single MCP server, far exceeding the typical 3-15 sweet spot and even the 25+ threshold for 'too many.' Even given the broad MCU debugging scope, this count creates significant selection overhead and many tools could be consolidated or made optional.
The tool surface is very comprehensive, covering hardware bring-up, serial protocols, flashing, fault decoding, register/map analysis, and knowledge bases. Minor gaps exist for live debugging (breakpoints, stepping), CAN bus, and direct memory read/write, but core workflows are well-supported.
Maintenance
Related MCP Connectors
Run, build, and validate firmware on virtual hardware from your AI agent. Hardware knowledge corpus.
Build, validate, and deploy multi-agent AI solutions from any AI environment.
- alloyOAuthai.usealloy
Connect Claude, Cursor, Codex, and other AI tools to your robotics mission data.
Live browser debugging for AI assistants — DOM, console, network via MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to compile, upload, and monitor Arduino boards via natural language, with electrical safety checks and dependency management.2181 npm22MIT
- AlicenseBqualityBmaintenanceEnables AI assistants to debug embedded devices via SEGGER J-Link probes, including reading memory, flashing firmware, streaming RTT logs, and diagnosing crashes.4790 npm36MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to build, flash, and monitor ESP-IDF projects on real hardware, including serial sessions and pytest-embedded hardware tests.1MIT
- FlicenseAqualityBmaintenanceEnables AI agents to compile, flash, erase, and read serial output from embedded development boards, with guardrails such as budget limits, serial port mutexes, and mandatory human confirmation for destructive operations.5-