Skip to main content
Glama

STM32 GDB MCP Server / STM32 GDB MCP 服务器

An MCP server that lets an AI agent debug STM32 firmware on real hardware — drive GDB + OpenOCD/ST-Link/J-Link to flash, breakpoint, inspect memory/registers/RTOS, triage HardFaults, and profile — and get back decoded, structured evidence instead of raw GDB text.

让 AI 智能体在真实硬件上调试 STM32:通过 GDB + OpenOCD/ST-Link/J-Link 烧录、打断点、查 内存/寄存器/RTOS、定位 HardFault、做性能采样,返回已解码的结构化证据而非原始 GDB 文本。

What you get / 能力一览

Bring-up & flash / 启动与烧录

detect_probe, suggest_server_args, build_firmware, flash_and_run, self_check, reset_target

Execution / 执行控制

run_and_wait(结构化停止事件), run_for_duration(运行/采样后暂停并采集), breakpoint, step, halt/continue, debug_until

Inspect / 状态检查(需暂停)

capture_state, read_memory/read_variable, read_registers, frame, read_peripheral_register

Fault triage / 故障诊断

reconstruct_fault_context(故障 PC → 源码), diagnose_fault, analyze_stack

RTOS / 实时系统

detect_rtos, read_freertos, snapshot(scope=rtos)

Observe / 可观测性

logging(RTT/SWO/UART), setup_swo(无需额外解码器的 printf), sample_pc(符号化采样器)

Determinism / 可复现性

run_scenario(回放), batch, get_session 日志/指标, export_debug_report

Multi-board / 多板卡

任意工具传 session="name";使用 list_sessions/close_session 管理

Two cross-cutting goals: low comprehension cost (decoded outputs, suggested_next_actions) and minimal repro steps (composites like flash_and_run / debug_until collapse 5–15 calls into one). Compact mode keeps the visible surface small; every tool remains reachable through call(tool, args), and tool_help exposes hidden schemas.

两个贯穿目标是:通过解码结果和 suggested_next_actions 降低理解成本,并通过 flash_and_run、debug_until 等组合工具把多次调用压缩为一次,缩短复现路径。 compact 模式只展示核心工具;所有隐藏工具仍可由 call(tool, args) 调用,并可用 tool_help 查询完整说明与 schema。

Related MCP server: jlink-mcp

Install / 安装

Client

One command

Claude Code(工具 + skills + 常驻规则)

/plugin marketplace add Zeraissh/stm32-gdb-mcp,然后 /plugin install stm32-debug-kit@zeraissh-stm32

Cursor / VSCode / Codex / Windsurf / Trae

python scripts/deploy.py --project "<firmware dir>" --ide vscode,cursor

Manual / 手动配置(任意 MCP 客户端)

pip install -e .,再将客户端指向 stm32-gdb-mcp

deploy.py installs the server, writes the IDE's MCP config, and drops a project-aware rules file into your firmware project. Per-client config snippets + the rules template are in docs/install-ides.md. Compact mode is on by default. PyPI/console installs also expose stm32-gdb-mcp-check-env, stm32-gdb-mcp-install, and stm32-gdb-mcp-deploy.

deploy.py 会安装服务器、写入 IDE 的 MCP 配置,并在固件项目中生成带项目上下文的规则文件。 各客户端配置片段和规则模板见 docs/install-ides.md。默认启用 compact 模式;PyPI/console 安装还会提供上述三个辅助命令。

stm32-gdb-mcp-check-env --json also reports the imported module version/path, installed distribution version, and all four console scripts. Use stm32-gdb-mcp-deploy --upgrade when those installation fields drift. / stm32-gdb-mcp-check-env --json 还会报告当前导入 模块的版本/路径、已安装发行版本和四个 console script;这些安装字段发生漂移时,使用 stm32-gdb-mcp-deploy --upgrade 修复。

Requirements / 环境要求:PATH 中需要 arm-none-eabi-gdb,以及至少一种 GDB Server (openocd / JLinkGDBServerCL / st-util)。运行 python setup_env.py 检查。

30-second quickstart / 快速上手

detect_probe()                                           # USB evidence; auto-select only one probe
debug_profile(action=set, mcu="STM32L431", probe="stlink", elf_path="build/app.elf", svd_path="STM32L4.svd")
suggest_server_args(mcu="STM32L431")                  # probe omitted -> use profile probe
start_debug_session(server_type="openocd")            # server_args omitted -> infer from profile mcu/probe
self_check()                                           # ALWAYS first: byte order, core, family
flash_and_run(file_path="build/app.elf", run_to="main")
breakpoint(action=set, location="my_func", condition="state == BAD")
run_and_wait()                                         # structured stop event + next actions
run_for_duration(duration_sec=30, capture={"expressions": ["rx_count"]})
run_for_duration(duration_sec=60, sample={"interval_ms": 500, "expressions": ["rx_count", "state"]})
reconstruct_fault_context()                            # on a crash: faulting PC → file:line

detect_probe reads physical USB devices, keeps serials for identical probes, and never chooses between multiple connected probes. / detect_probe 读取真实 USB 设备,同型号探针按 序列号分别保留;连接多个探针时绝不会擅自选择。

The full tool reference (lean families with action=/what=) is skills/stm32-debug/reference/tool-map.md. The server also ships always-on instructions, so any MCP client gets the debug loop without setup.

完整工具索引见 skills/stm32-debug/reference/tool-map.md, 其中按 action= / what= 归并工具族。服务器还会发送常驻 instructions,因此任意 MCP 客户端连接后都能获得同一套调试闭环。

Key rules (the target must cooperate) / 关键规则

  • Reads need a HALTED core. If a read says target_unresponsive, halt_execution first. / 读取要求内核已暂停。 若返回 target_unresponsive,先执行 halt_execution。

  • run_for_duration(sample=...) is best-effort low-rate debugger polling. It does not halt the target itself, but running-target expression reads may fail on some probes/MCUs; use SWO/ring-buffer firmware telemetry for higher-rate or guaranteed capture. / run_for_duration(sample=...) 是尽力而为的低速调试器轮询;某些探针或 MCU 无法在运行中读取 表达式。需要更高采样率或可靠采集时,请使用 SWO 或固件环形缓冲。

  • A breakpoint TIMEOUT means the path was NOT reached — don't just retry. Halt, capture_state, breakpoint(action=list) (hit_count=0 confirms), read the gating flag, set an earlier breakpoint or drive the precondition. / 断点超时表示路径没有到达。 不要原样重试;暂停后采集状态、确认 命中次数、读取门控条件,再前移断点或驱动前置条件。

  • Writes are guarded (option bytes/IWDG/WWDG blocked) — write_guard(action=policy) to allow. / 写操作受保护。 option bytes、IWDG、WWDG 默认禁止,需用 write_guard(action=policy) 显式放行。

  • Never hard-kill OpenOCD (wedges the ST-Link USB) — use recover_session. SWD is exclusive. / 不要强杀 OpenOCD。 使用 recover_session;同一探针的 SWD 调试连接是独占的。

  • A wedged probe needs a physical re-enumeration. With the optional [hub] extra and a SmartUSBHub, hub(action=power) cuts VBUS and hub(action=data) drops the USB data lines, so that re-plug becomes a tool call. Without a hub it is still a human with a cable. / 卡死的探针必须物理重新枚举。 装上可选的 [hub] extra 并接可编程 USB Hub 后, hub(action=power) 可断 VBUS、hub(action=data) 可断数据线,那次插拔就变成一次工具调用; 没有 Hub 时仍然只能靠人手拔插。

Programmable USB hub (optional) / 可编程 USB Hub(可选)

pip install 'stm32-gdb-mcp[hub]'

Then point a session at its port (1-based, matching the hub's silkscreen):

{"action": "set", "hub": {"channel": 2, "guard": "confirm"}}

hub(action=describe) is read-only and also reports per-port voltage/current on models with an ADC. hub(action=power/data/cycle) requires confirm=true while the guard is in its default confirm mode, and — in every mode, guard: allow included — whenever the calling session's own GDB server is live on that port: cutting power mid-flash is how a board becomes a brick. Note the scope: in local mode the check sees only the session making the call, so it will not notice that a different session is mid-flash on that channel. With the shared hub daemon (the default; see below) it sees every registered session on every server. Three entry points confirm on their own behalf, deliberately, because naming them is the confirmation — and their decisions land in the same audit trail hub(action=describe) returns. reset_target(strategy="cold") and recover_session's escalation ladder stop the GDB session before the cut instead of yanking VBUS out from under it. hub(action=discover) refuses outright while a session is live — except with force=true, which bypasses the interlock entirely, so that flag is the one place you are genuinely on your own. Set guard: allow for scripted CI. / hub(action=describe) 是只读的,带 ADC 的型号还会返回每端口电压/电流。默认 confirm 模式下,hub(action=power/data/cycle) 必须显式传 confirm=true;调用方自己的会话在该端口 上有活跃 GDB 服务时,任何模式(含 guard: allow)下都强制要求——烧录中途断电正是把板子变砖的 方式。注意这条检查的范围:local 模式下它只看发起调用的那个会话,不会发现另一个会话正在该 通道上烧录;使用共享 Hub 守护进程时(默认,见下文)则能看到所有服务器登记的全部会话。 有三处入口会自行确认,这是刻意设计的——点名调用它们本身就是确认,且其决定同样进入 hub(action=describe) 返回的审计日志。reset_target(strategy="cold") 与 recover_session 的恢复阶梯会先停掉 GDB 会话再断电,而不是从活跃会话脚下拔掉 VBUS;hub(action=discover) 在有活跃会话时直接拒绝运行——但 force=true 会完全绕过该联锁,那是唯一真正需要你自己 负责的地方。CI 脚本可设 guard: allow。

Selecting a channel on a multi-board rack / 多板机架下的通道选择

hub: {channel: N} above pins one session to one port. With several boards, map the whole rack once instead and let each session pick its own channel: / 上面的 hub: {channel: N} 把一个会话钉在一个端口上。多块板时改为一次性描述整个机架, 让每个会话各自选中自己的通道:

# bench_hub.yaml
hub:
  port: COM7          # omit to auto-scan / 省略则自动扫描
  guard: confirm
  map:
    3: {label: TC}
    4: {label: AGS}
{"action": "load", "path": "bench_hub.yaml"}

Three things about this that are easy to get wrong: / 其中有三点很容易搞错:

  • A label is matched against the debug session name, exactly. It is not a free-form nickname: the channel is selected only when the session was started as session="TC". This is the only way to select a channel for a serial-less probe — hub(action=discover, apply=true) keys those by USB port, which identifies a channel but cannot select one. / label 是与调试会话名精确比对的,不是自由昵称:只有会话以 session="TC" 启动时才会 选中该通道。对于无序列号的探针这是唯一可行的选择方式——hub(action=discover, apply=true) 只能按 USB 端口给它们建 key,那能认出通道,却无法选中通道。

  • The debug profile is per-session. Loading the config into one session does not make the map visible to another; the hub call then fails with hub_unavailable: hub channel unmapped. Load it into each session: debug_config(action=load, path="bench_hub.yaml", session="TC"). The profile is also in-memory only, so this is re-run after every server restart. / 调试 profile 是按会话隔离的。 在一个会话里加载配置,另一个会话看不到该映射,此时 hub 调用会以 hub_unavailable: hub channel unmapped 失败。需要给每个会话都加载一次: debug_config(action=load, path="bench_hub.yaml", session="TC")。profile 还是纯内存的, 因此服务器每次重启后都要重新加载。

  • set replaces a nested block; it does not merge into it. debug_profile(action=set, hub={...}) keeps every OTHER profile field, but the hub block you pass replaces the stored one whole — so writing hub={map: {3: {label: TC}}} after hub(action=discover, apply=true) throws away the probe identity discovery had written there, and a serial-less probe has no other identity. Pass merge=true to deep-merge into the stored block instead; leave it off when you mean to drop a stale channel, because replacing is the only way to remove one. / set 对嵌套块是整块替换,不是合并。 顶层其他字段会保留,但传入的 hub 块会整块覆盖已 存的内容——在 hub(action=discover, apply=true) 之后再写 hub={map: {3: {label: TC}}}, 会把 discovery 写入的探针身份一并丢掉(无序列号探针没有别的身份可用)。需要合并请加 merge=true;要删除过期通道则保持默认的替换语义,因为那是唯一的删除方式。

When it works, the result carries channel_source: "map_label" — check that field rather than assuming the right port was chosen. / 生效时结果会带 channel_source: "map_label"——请以该字段为准,不要想当然认为选对了端口。

Several MCP servers on one rack / 多个 MCP 服务器共用一个 Hub

The hub's control port opens in one process at a time, so by default the first hub call spawns a small hub daemon that owns it, and every MCP server talks to that instead. Nothing changes in how you call hub(...). / Hub 控制口同一时间只能被一个进程打开。因此默认情况下,第一次调用 hub 会拉起一个Hub 守护进程 独占它,所有 MCP 服务器都改为与守护进程通信;hub(...) 的用法完全不变。

  • Reads are shared. Writes lock only the channels they touch: a power cycle on CH1 never interleaves with another switch on CH1, but a switch on CH4 runs alongside it. Exclusive isolation locks the whole rack, and hub(action=discover) holds a rack-wide lease for its whole run, so no other server's switch can corrupt the map. Waiting is FIFO among conflicting requests, so a rack-wide request is never starved. / 读取共享;写操作只锁住 涉及的通道:CH1 的电源循环不会与 CH1 上的其他开关交错,但 CH4 的操作可以同时进行。exclusive 隔离锁住整个机架;hub(action=discover) 在整个运行期间持有全机架租约,其他服务器的开关无法 插入。冲突请求按先来后到排队,整机架请求不会被饿死。

  • Each server's guard mode stays its own (guard: allow on a CI server does not relax anyone else), and the audit trail records which server did what. / 每个服务器的 guard 模式各自独立,审计日志记录是哪台服务器执行的操作。

  • What a server switched off is restored when it exits — or when the daemon finds its PID gone. / 某服务器断开的电源/数据线,在它退出(或守护进程发现其进程已消失)时自动恢复。

  • Cross-server interlock. Every server registers its sessions that have a hub block (after each tool call, plus a 2 s heartbeat). Cutting power or data on a channel where any server has a live GDB server needs confirm=true, whatever the guard mode, and the refusal names that session and server. hub(action=discover) refuses while any server on the rack is live. A session with no hub block cannot be mapped to a channel and so is not protected. / 跨服务器互锁:每个服务器都会登记带 hub 配置的会话(每次工具调用后 同步登记,另有 2 秒心跳)。只要任一服务器在该通道上有活跃 GDB,断电/断数据就必须 confirm=true(与 guard 模式无关),拒绝信息会指出是哪个服务器的哪个会话;任一服务器有活跃 会话时 hub(action=discover) 拒绝运行。没有 hub 配置的会话无法映射到通道,因此不受保护。

  • A write waits at most 30 s behind another server's write, then is refused (not run late) with the name of what held the hub; one that did wait reports queued_ms. Every switch also invalidates every server's detect_probe cache. / 写操作最多排队 30 秒,超时则拒绝执行 (而不是延后执行)并指出占用者;排过队的结果带 queued_ms。每次切换都会让所有服务器的 detect_probe 缓存失效。

  • The daemon exits after 10 idle minutes unless it still owes a channel. / 空闲 10 分钟且无待恢复通道时,守护进程自动退出。

python -m mcp_server.hub_daemon status     # URL, version, connected servers
python -m mcp_server.hub_daemon stop       # restores what clients switched off
python -m mcp_server.hub_daemon serve --config bench_hub.yaml   # run it yourself, foreground

STM32_GDB_MCP_HUB_MODE=auto (default) uses the daemon and falls back to in-process when the [hub] extra is absent or the daemon cannot start; daemon never falls back; local is the old single-process behaviour. Everything binds to 127.0.0.1; writes need the token in the per-user state file. / STM32_GDB_MCP_HUB_MODE=auto(默认)使用守护进程,未安装 [hub] extra 或守护进程无法启动时 退回进程内模式;daemon 不回退;local 为原来的单进程行为。全部仅监听 127.0.0.1,写操作需 要用户私有状态文件中的 token。

Live dashboard / 实时看板

hub(action=dashboard)                 # -> data.url, e.g. http://127.0.0.1:8765/

A read-only page: per-port power/data state, live V/I/P with a 1/5/15-minute history (power-off spans shaded), and a timeline of hub actions. With the daemon it is the daemon's page, showing every connected MCP server and what each still owes; in local mode it runs inside this server (state=off stops it) and lists its debug sessions. / 只读页面:各端口电源/数据线状态、电压电流功率及 1/5/15 分钟历史(断电区间灰色)、hub 操作时间线。 使用守护进程时就是守护进程的页面,显示所有已连接的 MCP 服务器及其待恢复通道;local 模式下 在本服务器内运行(state=off 停止),并列出本服务器的调试会话。

Response shape / 响应结构

Every tool returns a stable JSON envelope inside the MCP TextContent transport:

{ "ok": true, "data": {}, "error": null, "raw_response": null, "suggested_next_actions": [] }

Human-readable text lives in data.message / error.message; raw GDB output stays in raw_response when it aids diagnosis. Errors carry a code (e.g. target_unresponsive).

可读消息位于 data.message / error.message;仅在有助于诊断时保留原始 GDB 输出到 raw_response。错误包含稳定的 code,例如 target_unresponsive。现代 MCP 客户端还会收到 内容相同的原生 structuredContent,错误结果设置 isError=true。

Agent guidance — three layers / 三层引导

  1. Inline / 内联 — most results carry suggested_next_actions (the next loop step) / 大多数结果直接给出下一步动作。

  2. Always-on / 常驻 — the server's instructions inject automatically / 服务器自动注入调试闭环与关键规则。

  3. On-demand — skills: stm32-debug (bring-up, HardFault, hang, minimal repro, replayable scenarios) and stm32-instrument (write-time SWO/ITM trace). In other IDEs the same guidance travels as a rules file (AGENTS.md). / 按需加载两项 skill;其他 IDE 通过 AGENTS.md 等规则文件获得同样指导。

Repeatable config / 可复现配置

Load a YAML debug profile so sessions reproduce across clients: debug_config(action=load, path="mcp/board.yaml").

加载 YAML 调试 profile 可让不同客户端复现同一会话: debug_config(action=load, path="mcp/board.yaml")。

mcu: STM32L431CCUx
probe: stlink
server_type: openocd
server_args: ["-f", "interface/stlink.cfg", "-f", "target/stm32l4x.cfg"]
elf_path: build/app.elf
svd_path: STM32L4.svd

Relative elf_path, svd_path, project_root, and swo.file values are resolved from the YAML file's directory. Session start, logging, reset, and flash tools then use the loaded profile when their corresponding arguments are omitted.

相对的 elf_path、svd_path、project_root 和 swo.file 均以 YAML 所在目录为基准解析。 随后启动会话、日志、复位和烧录工具会在省略对应参数时自动使用该 profile。

Load the profile, connect, and run the mandatory identity check in one MCP round trip:

batch(steps=[
  {"tool": "debug_config", "args": {"action": "load", "path": "mcp/board.yaml"}},
  {"tool": "start_debug_session", "args": {}},
  {"tool": "self_check", "args": {}}
], stop_on_error=true)

以上配方在一次 MCP 往返中完成“加载配置 -> 连接 -> 自检”,任一步失败即停止。

See examples/configs/ for J-Link, OpenOCD, and non-flashing L151/L431/U535 HIL profiles. / J-Link、OpenOCD 及不烧录的 L151/L431/U535 HIL 配置见 examples/configs/。

Develop / 开发

pip install -e ".[dev]"
python -m ruff check . && python -m pytest && python -m compileall src tests
python -m build && python scripts/check_dist_contents.py dist/*

Hardware validation runs on a self-hosted runner labeled stm32; normal CI is hardware-free (lint, tests, compile, packaging).

硬件验证运行在带 stm32 标签的自托管 runner;普通 CI 不依赖硬件,只执行 lint、测试、 编译检查和发行包验证。

Available Tools

86 tools
acceptance_loop_statusA
Read-onlyIdempotent

Read the acceptance loop's trajectory (per-iteration pass/fail counts, status) and the current decision without running an iteration.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoTarget session id (default 'default').

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds meaningful context: that this is a passive inspection that does not trigger an iteration and that it returns trajectory plus decision state, which is beyond what the annotations convey.

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

Conciseness5/5

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

A single front-loaded sentence that leads with the action and resource and packs the scope constraint and return contents with zero filler.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing returns and does so (pass/fail counts, status, decision). Annotations cover the safety profile. Minor gap: no mention of how the trajectory is scoped or paginated, but complete enough to call correctly.

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

Parameters3/5

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

Only one optional parameter ('session', default 'default') and schema description coverage is 100%, so the schema fully documents it. The description adds nothing about the parameter, which is the expected baseline when the schema does the work.

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

Purpose5/5

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

States a specific verb ('Read') and resource ('the acceptance loop's trajectory'), and enumerates the returned data (per-iteration pass/fail counts, status, current decision). The clause 'without running an iteration' functionally distinguishes it from sibling run_acceptance_iteration.

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

Usage Guidelines3/5

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

'Without running an iteration' implies this is the non-mutating status-check counterpart to run_acceptance_iteration, giving implied usage. However, it names no alternative explicitly and gives no explicit when-to-use/when-not conditions, so the agent must infer the routing.

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

analyze_stackA
Read-onlyIdempotent

Reports stack used/free bytes and a clear overflow verdict for the halted core. stack_top defaults to the initial MSP (first word of the vector table at vector_table_addr). Give stack_size or stack_limit for the overflow check (else only usage is reported). The key tool for diagnosing stack overflows.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
stack_topNoTop-of-stack address (hex). Default: initial MSP from the vector table.
stack_sizeNoStack size in bytes (used as stack_top - stack_size if stack_limit omitted).
stack_limitNoLowest valid stack address (hex).
vector_table_addrNoVector table base for the initial MSP (default '0x08000000').

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety burden is lifted. The description adds meaningful context beyond them: it only works on a halted core, and the overflow verdict is conditional on stack_size/stack_limit being supplied. It does not describe the return payload structure, but with annotations covering behavior this is solid.

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

Conciseness4/5

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

Front-loads what is reported, then the defaults/parameter rules, then the positioning statement. Four compact sentences, each doing work; only slight overlap with the schema on parameter behavior.

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

Completeness4/5

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

With no output schema, the description adequately covers what comes back (used/free bytes plus a verdict) and the precondition (halted core, overflow check needs a size or limit). An agent has enough to invoke it correctly, though return-format detail is left implicit.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all five parameters. The description adds minor value by restating the stack_top default source and the stack_size vs stack_limit relationship, but mostly echoes the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Reports stack used/free bytes') plus a distinct outcome ('a clear overflow verdict for the halted core'), which separates it from nearby siblings like read_call_stack or diagnose_fault. The closing line 'key tool for diagnosing stack overflows' pins down its niche explicitly.

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

Usage Guidelines4/5

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

Explains the conditional behavior clearly: provide stack_size or stack_limit for the overflow check, otherwise only usage is reported. It also scopes the tool to a 'halted core'. It does not name alternative sibling tools, 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.

batchA
Destructive

Runs several tool calls in ONE round trip and returns ALL their full results — the fastest way to do a sequence of operations (e.g. read registers + backtrace + several variables) without per-call latency. ok is false if ANY step failed; data.succeeded/data.failed count the outcomes (count/total only count steps run vs requested). Pass session to run every step against a named debug session.

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesOrdered tool calls, each {tool, args}.
sessionNoOptional debug-session name. Omit for the default target.
stop_on_errorNoStop at the first failing step (default false).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the aggregation rule ('ok is false if ANY step failed') and how data.succeeded/data.failed vs count/total are counted. It does not discuss per-step error isolation or permission needs, 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.

Conciseness4/5

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

Three sentences, front-loaded with the purpose and the latency benefit. Each sentence carries information, though the middle return-semantics sentence is dense and slightly run-on.

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

Completeness4/5

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

There is no output schema, so the description must carry return semantics, and it does so reasonably (ok flag, succeeded/failed counts, count/total distinction). For a batch meta-tool it is nearly complete; it could say more about partial-failure handling when stop_on_error is false.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description still adds meaning by clarifying that session applies to every step ('Pass session to run every step against a named debug session'), and implies steps are an ordered sequence. stop_on_error is left to the schema.

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

Purpose4/5

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

States a specific verb+resource ('Runs several tool calls in ONE round trip') and reinforces it with a concrete example (read registers + backtrace + several variables). It is clearly a batching/meta-tool, but it never names the single-call sibling (call/call_read) it contrasts against, so differentiation is implicit rather than explicit.

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

Usage Guidelines4/5

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

Gives clear context for when to reach for it ('the fastest way to do a sequence of operations... without per-call latency') with an illustrative use case. It does not state any when-not condition or explicitly point to the alternative single-call tool for one-off invocations.

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

breakpointB

Breakpoint / watchpoint management. action=set(location[,condition,temporary,ignore_count]) | delete(breakpoint_id) | list | watch(location,access_type). access_type=r|w|a.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhich operation to perform.
sessionNoOptional debug-session name. Omit for the default target.
locationNoLocation to break at, e.g., 'main', 'main.c:42', or '*0x08001000'.
conditionNoOptional C expression; break only when it is non-zero, e.g. 'count > 5'.
temporaryNoIf true, the breakpoint is deleted after its first hit.
access_typeNoRead (r), Write (w), or Access (a).
ignore_countNoNumber of hits to ignore before stopping.
breakpoint_idNoID of the breakpoint to delete (e.g., '1').

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only the argument signatures, with no mention of permissions, session scoping behavior, or what a 'list' returns; it does not contradict the annotations but adds little beyond them.

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

Conciseness4/5

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

Extremely compact and front-loaded: one sentence plus a signature-style breakdown of each action. It is dense but wastes nothing; the terse backus-naur-like notation is the only mild readability cost.

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

Completeness3/5

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

For an 8-parameter, no-output-schema mutation tool, the description covers all four actions but omits any statement of return behavior (notably for 'list'), does not mention the optional 'session' parameter, and gives no indication of how set/delete affect program state. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100% and all 8 parameters are documented in the schema itself, so the baseline of 3 applies. The description's signature notation mirrors the schema (location, condition, temporary, ignore_count, access_type) without adding format or constraint detail beyond it.

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

Purpose4/5

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

The description states a specific resource (breakpoints/watchpoints) and enumerates the four operations (set/delete/list/watch) with their key arguments, so an agent immediately knows this tool manages debug breakpoints. It does not explicitly distinguish itself from similarly-purposed siblings like run_to_line or debug_until, which also stop execution, keeping it 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.

Usage Guidelines3/5

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

The action list implies when each mode applies (set vs delete vs list vs watch), but there is no explicit when-to-use or when-not guidance and no routing to alternatives such as run_to_line or run_to_line-style stop helpers. Usage is inferable but not stated.

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

build_firmwareA
Destructive

Builds firmware with Keil uVision (UV4), CMake, make, or a custom command, so the AI can rebuild after a fix. Keil emits a .axf (ELF/DWARF) that the debug tools load like any .elf. Returns the exit code, success flag, and build log tail.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory for the build.
kindYesToolchain to build with.
configNocmake: build config, e.g. Debug/Release.
targetNoKeil/CMake/make build target.
commandNocustom: full argv to run.
projectNokeil: path to the .uvprojx/.uvproj project.
rebuildNokeil: rebuild all (-r) instead of incremental (-b).
sessionNoOptional debug-session name. Omit for the default target.
uv4_pathNokeil: path to UV4.exe (auto-detected if omitted).
build_dirNocmake: the configured build directory.
directoryNomake: directory containing the Makefile.
timeout_secNoMax build seconds (default 600).

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, non-idempotent, open-world, so the safety profile is covered. The description adds useful artifact context (Keil emits .axf usable by debug tools) and states the return payload (exit code, success flag, log tail), but never explains what the destructive hint means (overwritten build outputs) or permission needs.

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

Conciseness4/5

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

Three front-loaded sentences, purpose first, with no filler. The .axf/debug-tools sentence is slightly tangential but earns its place by linking the build artifact to downstream tools.

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

Completeness4/5

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

With 12 parameters and no output schema, the description does the needed work by naming the toolchains and describing the return values. Only the meaning of the destructive annotation and any required setup are left unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including the kind enum is already documented. The description adds only that Keil produces .axf and names the toolchains; it does not add syntax or defaults beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (builds) and resource (firmware) plus the four supported toolchains, and it is clearly distinct from sibling flash_firmware (build vs deploy). An agent can tell exactly 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.

Usage Guidelines3/5

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

"so the AI can rebuild after a fix" gives an implied usage scenario, but there is no explicit when-not guidance or named alternative (e.g., build_firmware vs flash_firmware sequencing). Usage is inferable rather than spelled out.

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

callA
Destructive

Invoke ANY stm32-gdb-mcp tool by name — including one that is NOT in your current tool list (clients with tool-count limits may hide some). Use this to reach e.g. start_debug_session when it isn't directly listed: call(tool='start_debug_session', args={...}). Returns that tool's result.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments for that tool.
toolYesName of the tool to invoke.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the risk profile is largely covered structurally. The description adds the delegation semantics ('Returns that tool's result') but does not warn that side effects depend entirely on the invoked tool or discuss auth/rate limits, so it adds only moderate context.

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

Conciseness5/5

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

One tight paragraph, front-loaded with the capability and immediately followed by the condition and a concrete example. Every sentence earns its place with no filler.

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

Completeness4/5

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

With no output schema, the description usefully notes that it returns the invoked tool's result, closing the biggest information gap. For a generic dispatcher the coverage is strong, though it could say more about how errors or destructive side effects from the delegated tool surface.

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

Parameters3/5

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

Schema description coverage is 100%, so tool, args and session are all documented in the schema itself, which sets the baseline at 3. The description reinforces usage with a call(tool=..., args={...}) example but adds no syntax, format, or constraint detail beyond what the schema provides.

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

Purpose5/5

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

The description states a specific verb (invoke) and resource (ANY stm32-gdb-mcp tool by name) and makes the dispatch role explicit, which cleanly separates it from every concrete sibling like start_debug_session or read_memory. An agent immediately understands this is a meta-call escape hatch rather than a domain operation.

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

Usage Guidelines4/5

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

It gives the selecting condition explicitly — use it when the target tool is 'NOT in your current tool list' because clients with tool-count limits may hide some — and provides a concrete example with start_debug_session. It stops short of stating when to prefer a directly-listed sibling over this generic path, which is the only gap.

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

call_readA
Read-onlyIdempotent

Like call, but restricted to tools that only READ state — so it needs no approval prompt where call, which can reach anything, does. Prefer it for hidden read-only tools: call_read(tool='read_core_registers', args={}). The gate is per-ACTION, not per-tool: a family's reading action goes through even though the family also writes, so call_read(tool='debug_profile', args={'action':'get'}) works while action='set' does not. A refusal names the actions it would accept. Refuses anything that writes; use call for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNoArguments for that tool.
toolYesName of the read-only tool to invoke.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare readOnlyHint/idempotent/destructive=false, but the description adds substantial context beyond them: it avoids an approval prompt, the gate is per-ACTION not per-tool, and a refusal names the actions it would accept. These are genuine operational behaviors an agent could not infer from the annotations or schema.

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

Conciseness4/5

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

Front-loaded with the key distinction ('Like call, but restricted to tools that only READ state'), and every sentence carries a distinct piece of information (prompt avoidance, per-action gate, refusal behavior). It runs slightly long and the per-action nuance takes a few clauses to land, but nothing is wasted.

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

Completeness5/5

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

For a gateway/dispatch tool with no output schema, the description covers purpose, when to prefer it, the subtle per-action eligibility rule, and error/refusal behavior. An agent has everything needed to invoke it correctly and interpret a rejection.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds value by demonstrating the tool/args relationship with concrete examples (args={} and args={'action':'get'}). It does not clarify the optional 'session' parameter, which the schema already documents, so it stops short of a 5.

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

Purpose5/5

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

States a specific capability (invoke read-only tools) and explicitly contrasts itself with the sibling 'call', which can reach anything. The agent can distinguish the two without opening either schema, and the 'restricted to tools that only READ state' clause pins down the exact scope.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (hidden read-only tools), when-not-to-use ('Refuses anything that writes; use call for those'), and names the alternative 'call'. The per-action guidance ('get' works, 'set' does not) tells the agent exactly which invocations are eligible, not just which tools.

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

capture_stateA
Read-onlyIdempotent

One-call 'where am I': decoded core registers + a PC/LR/SP summary, the decoded backtrace, and the innermost-frame locals. The fastest way to get full halted context.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered structurally. The description adds real behavioral value beyond that by disclosing the exact payload composition and the decoding (symbol-resolved backtrace/locals), plus the implicit requirement that the target be halted. It stops short of describing formatting, truncation, or pagination.

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

Conciseness5/5

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

Two compact sentences with zero filler, front-loaded with the 'where am I' framing so the agent immediately grasps the intent. Every clause earns its place by naming a concrete returned artifact.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing the return value, and it does so concretely (registers, PC/LR/SP, backtrace, locals). Combined with annotations covering safety and idempotency, an agent has enough to call it correctly; only edge cases like a non-halted target or empty stack are unaddressed.

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

Parameters3/5

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

There is a single optional parameter with 100% schema description coverage ('Optional debug-session name. Omit for the default target.'), so the schema fully documents it. The description adds no parameter-level detail, which is the correct baseline when the schema does the work.

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

Purpose4/5

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

The description states a specific verb+resource ('One-call "where am I"') and enumerates exactly what it returns: decoded core registers, a PC/LR/SP summary, a decoded backtrace, and innermost-frame locals. It reads as an aggregate snapshot tool, but it does not name the sibling tools it consolidates (read_call_stack, read_registers, analyze_stack), so differentiation is implicit rather than explicit.

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

Usage Guidelines3/5

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

It gives a usage context ('the fastest way to get full halted context') that implies you call it when you want a complete halted picture in one shot. However, it names no alternatives and no exclusions, so an agent must infer when a narrower sibling like read_call_stack or read_registers is preferable.

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

clear_session_journalB

Clears the session journal (keeps the run-id).

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the safety profile is largely covered. The parenthetical 'keeps the run-id' adds useful scope detail beyond annotations, clarifying what survives the clear, but the description says nothing about what happens to the journal content, recoverability, or auth needs.

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

Conciseness5/5

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

One short sentence that front-loads the action and appends the key constraint. No wasted words; every clause earns its place.

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

Completeness3/5

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

For a simple one-parameter tool with no output schema and annotations covering safety, the description is adequate but thin. It omits when to use it and any notion of the effect on the journal content, leaving minor gaps for an agent to resolve.

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

Parameters3/5

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

Schema coverage is 100% and the single optional 'session' parameter is fully documented in the schema, so the baseline is 3. The description adds no detail about the parameter (e.g., default vs named session behavior beyond what the schema states).

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

Purpose4/5

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

Clear specific verb (clears) plus resource (session journal) and scope qualifier (keeps the run-id), which lets an agent distinguish it from siblings like get_session, session_diagnostics, or recover_session. It does not explicitly name any sibling, so differentiation is implicit rather than stated.

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

Usage Guidelines2/5

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

The description gives no when-to-use context, no prerequisites, and no alternatives (e.g., how this differs from recover_session or session_diagnostics). The agent must infer the scenario in which clearing the journal is appropriate.

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

close_sessionB

Closes a named debug session, tearing down its GDB client and server.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
session_idYesName of the session to close, e.g. 'rackA'.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, and the description usefully adds that a close tears down both the GDB client and server. It does not say what happens if the session does not exist, whether the teardown is recoverable, or what a caller should expect afterwards.

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

Conciseness5/5

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

One front-loaded sentence with zero filler; the verb, resource, and effect are all in the first clause.

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

Completeness3/5

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

For a mutation tool with no output schema and no annotations beyond safety hints, the description covers the operation's effect but omits error/failure behavior and the post-close state of the session, leaving meaningful gaps.

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

Parameters3/5

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

Schema coverage is 100%, with both 'session' and 'session_id' fully documented in the schema itself. The description adds no parameter detail beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ("Closes a named debug session") and adds the concrete effect of tearing down the GDB client and server. It does not, however, distinguish itself from the very similar sibling 'stop_debug_session', so sibling differentiation is missing.

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

Usage Guidelines2/5

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

No guidance on when to close versus stop, recover, or get a session, and no stated prerequisites. The only conditional hint (omit the name for the default target) lives in the schema, not the description.

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

configure_debug_freezeA
Destructive

Freezes peripherals (IWDG, WWDG, RTC, timers) while the core is halted via the DBGMCU freeze registers, so the watchdog cannot reset the target out from under the debugger. Family is taken from the debug profile MCU if omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
applyNoIf false, only return the planned register writes (default true).
familyNoSTM32 family or part number. Known: ['stm32f4', 'stm32l4'].
sessionNoOptional debug-session name. Omit for the default target.
peripheralsYesPeripherals to freeze, e.g. ['iwdg', 'wwdg', 'rtc', 'tim2'].

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare the mutation profile (readOnlyHint=false, destructiveHint=true), and the description adds genuinely useful context beyond them: it explains the register mechanism and the resulting target behavior (watchdog freeze while the core is halted), which clarifies what the side effect actually is. It does not, however, say whether the freeze is reverted on session close or how to undo it.

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

Conciseness5/5

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

Two tightly packed sentences, front-loaded with the action and rationale, with zero filler. The trailing default-resolution note is short and useful.

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

Completeness4/5

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

Given no output schema and a four-parameter mutation tool whose annotations already carry the safety profile, the description covers purpose, mechanism, consequence and the family default adequately. It stops short of describing the reversion/unfreeze story, which would matter for a tool that alters target watchdog behavior.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds one meaningful default-resolution rule not in the schema: 'Family is taken from the debug profile MCU if omitted,' which tells the agent it can safely omit family. It adds nothing further about the peripherals list syntax or session semantics.

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

Purpose5/5

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

States a precise verb and resource ('Freezes peripherals (IWDG, WWDG, RTC, timers)') and names the exact mechanism (DBGMCU freeze registers) plus the concrete outcome ('watchdog cannot reset the target out from under the debugger'). An agent can immediately tell this apart from generic siblings like halt_execution or debug_config.

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

Usage Guidelines3/5

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

The tool's purpose implies its usage scenario (halting debugging sessions where watchdogs would otherwise reset the target), and the 'apply=false' dry-run path hints at a safe pre-check workflow. However, it never states when to reach for this versus siblings such as debug_config or debug_profile, nor any exclusions or prerequisites.

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

continue_executionA

Resumes execution of the target device until the next breakpoint. Safe to call when the target is already running (reports already_running instead of erroring), so 'make sure it is running' is expressible.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (non-destructive, non-readonly), and the description adds a valuable behavioral trait beyond them: calling while already running yields already_running rather than an error. It does not describe what happens at the breakpoint stop or return format, but adds real context.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core action and termination condition, followed by the useful edge-case behavior. No filler.

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

Completeness4/5

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

For a simple execution-control tool with no output schema, the description covers action, scope, and the key edge case (already_running). It could mention interaction with breakpoints/stops, but is nearly complete.

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

Parameters3/5

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

Schema coverage is 100% and the single optional 'session' parameter is fully documented in the schema (omit for default target). The description adds no parameter-level meaning beyond that, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (resumes execution), the resource (target device), and the termination condition (until the next breakpoint). This distinguishes it from step, run_for_duration, and run_to_line without needing to name them.

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

Usage Guidelines4/5

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

Gives a concrete when-to-use pattern ('make sure it is running' is expressible) and clarifies the already-running case. It does not name or exclude alternatives like step or run_for_duration, so it stops short of full routing guidance.

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

coredumpC

Core-dump capture / load. action=capture(path) | load(path).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoOutput path for the core file.
actionYesWhich operation to perform.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already disclose read-only=false, idempotent=false, and destructive=false, so the safety profile is partially covered. The description adds nothing beyond that: it doesn't explain that capture writes a core file to 'path' while load reads from it (a key semantic difference), whether the target is halted, or what the session parameter affects. Given the mutation and non-idempotent hints, this is a notable gap.

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

Conciseness4/5

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

It is a single terse line with the purpose front-loaded and zero filler. The action/path shorthand borders on cryptic, but nothing is wasted, so it is efficient if minimal.

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

Completeness2/5

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

For a mutating, dual-mode operation with no output schema, the description omits what a core dump is, what capture does to the running target, how session interacts, and what the caller should expect back. The rich schema covers parameters but the behavioral context an agent needs to invoke this safely is largely missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The 'action=capture(path) | load(path)' notation restates the required parameter pairing already expressed by the oneOf schema and adds no format, default, or meaning beyond it; the crucial fact that 'path' is an output for capture but an input for load is left to the schema.

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

Purpose4/5

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

The description states a specific verb and resource ('Core-dump capture / load') and spells out the two operational modes via action values, so an agent immediately knows the tool captures or loads core dumps. It stops short of distinguishing this tool from near-neighbors like capture_state or snapshot, so it does not reach a 5.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not guidance: nothing says when to capture versus load, whether a debug session must exist first, or which siblings are alternatives. The action notation shows the mechanics of invocation but gives no contextual selection criteria.

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

debug_configB

Debug-config file (.json) management. action=load(path) | save(path,config) | validate(config).

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoPath to a YAML debug config file.
actionYesWhich operation to perform.
configNoConfig object to save.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

B3.2/5.0
Behavior2/5

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

Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false); the description adds little beyond that and never says save overwrites the destination file, whether writes are reversible, or what load/validate return. Worse, it labels the file '.json' while the schema describes 'Path to a YAML debug config file', a contradiction that can actively mislead an agent about the format.

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

Conciseness5/5

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

Two tight fragments, front-loaded with the resource and then the operations; nothing is padded. The only issue is accuracy, not verbosity.

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

Completeness2/5

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

With no output schema, the description should explain what load and validate yield, but says nothing about return values, error behavior, or the role of the 'session' parameter. For a mutating, file-writing tool this leaves a significant gap 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.

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3, and the oneOf already encodes which parameters each action requires. The inline signatures (load(path), save(path,config), validate(config)) restate that mapping compactly but add no format or constraint detail, and the description omits the optional 'session' parameter entirely.

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

Purpose4/5

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

The description names a specific resource (debug-config file) and enumerates the three concrete operations (load/save/validate) with their argument signatures, so an agent can tell what the tool does at a glance. It does not, however, differentiate itself from any sibling tool by name or scope.

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

Usage Guidelines3/5

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

Listing action=load(path) | save(path,config) | validate(config) implies which operation to pick for a given need, which is better than nothing, but there is no explicit when-to-use guidance, no prerequisites (e.g. session context), and no routing to alternatives.

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

debug_profileA

Active debug profile (mcu/elf/svd/probe). action=get | set([mcu,elf_path,svd_path,board,probe,server_type,server_args,project_root,hub,notes,merge]). set merges at the TOP LEVEL ONLY: omitted fields keep their value, but a nested block you pass REPLACES the stored one whole — hub={map:{3:{label:TC}}} drops the rest of hub, including what hub(action=discover) wrote. merge=true deep-merges nested blocks instead; leave it off to DROP a stale entry, since replace is the only way to remove one. Returns the full resulting profile, which is in-memory only: empty again after the MCP server restarts.

ParametersJSON Schema
NameRequiredDescriptionDefault
hubNoProgrammable USB hub binding: {port, serial, channel, map, power_cycle, guard}. channel is 1-based and selects which port this session's board sits on.
mcuNo
boardNo
mergeNoDeep-merge nested blocks (hub, rtt, uart, swo, reset, hil) into the stored ones instead of replacing them -- use it to add one key, e.g. a hub.map label, without dropping the identity hub(action=discover) wrote. Leave it off to replace, which is the only way to remove a stale entry.
notesNo
probeNo
actionYesWhich operation to perform.
sessionNoOptional debug-session name. Omit for the default target.
elf_pathNo
svd_pathNo
server_argsNo
server_typeNo
project_rootNo

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing top-level-only merge semantics, whole-block replacement of nested blocks, the concrete hub example of accidental data loss, and that the profile is in-memory only and empty again after a server restart. That last point is critical volatility context the annotations (readOnly=false, destructive=false, idempotent=false) do not convey.

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

Conciseness4/5

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

Dense and front-loaded, opening with the resource and actions before explaining merge semantics and the lifetime caveat. The hub example earns its place, though the 'replace is the only way to remove' point is restated, adding mild redundancy.

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

Completeness4/5

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

For a no-output-schema tool it does state the return value ('full resulting profile') and covers the tricky merge/volatility behavior thoroughly. The gaps are the unexplained optional parameters (notably session) against 13 params at 31% coverage, so it is strong but not complete.

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

Parameters3/5

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

With only 31% schema description coverage, the description carries much of the load: it enumerates the set-able fields and richly explains merge and hub. However, several parameters (session, board, notes, server_type/server_args) get no meaning beyond their names, so compensation is partial.

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

Purpose4/5

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

States the resource (active debug profile) and the two operations (action=get | set) with the set-field list, so an agent knows it reads/writes the session's debug configuration. Sibling differentiation is weak, though: it does not explicitly separate itself from adjacent tools like debug_config, hub, or get_session.

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

Usage Guidelines4/5

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

Gives clear conditional guidance for the merge flag: enable it to add one nested key without dropping identity, leave it off to replace and thereby remove a stale entry. This is real when-to-use reasoning, though it stays at the parameter level and names no alternative tool for configuration.

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

debug_untilA

One-call repro step: set an optional conditional/temporary breakpoint at a location, run, and return the stop event PLUS the decoded backtrace and innermost-frame locals. Collapses set_breakpoint + run + read frame/vars into a single round-trip.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
locationYesWhere to break, e.g. 'trigger_divzero' or 'main.c:21'.
conditionNoOptional C condition, e.g. 'g_divisor == 0'.
temporaryNoAuto-delete the breakpoint after the first hit (default true).
timeout_secNoMax seconds to wait (default 10).
ignore_countNoHits to ignore before stopping.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare safety profile (readOnly=false, destructive=false, idempotent=false), so the bar is lower. The description adds real value: it discloses the return payload (stop event, decoded backtrace, innermost-frame locals) and the temporary/conditional breakpoint behavior, which annotations alone don't convey.

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

Conciseness5/5

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

Two sentences, front-loaded with the action, and the collapse rationale is a tight second clause. No padding.

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

Completeness4/5

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

With no output schema, the description correctly summarizes the return values (stop event, backtrace, locals). Reasonably complete for a repro tool; minor gap on error/timeout outcomes but not blocking.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all six parameters. The description reinforces 'optional conditional/temporary breakpoint' but adds little syntax or default detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb chain (set breakpoint, run, return stop event) on a specific resource (a location) and explicitly names what it collapses. An agent can distinguish it from breakpoint/run/read_call_stack siblings immediately.

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

Usage Guidelines4/5

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

Frames usage as a 'one-call repro step' and names the three sibling operations it replaces (set_breakpoint + run + read frame/vars), giving clear context for selection. It does not explicitly exclude alternatives like run_to_line or run_and_wait, keeping it below a 5.

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

decode_peripheral_registerB
Read-onlyIdempotent

Reads and decodes a peripheral register with SVD bitfield names and enumerated values.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
registerYesRegister name (e.g., 'MODER').
peripheralYesPeripheral name (e.g., 'GPIOA').

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description usefully discloses the decoded output shape (bitfield names, enumerated values), but omits the key behavioral prerequisite that SVD data must be loaded for decoding to succeed, and says nothing about failure behavior when it is not.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or repetition. It is appropriately sized for the tool's simplicity, though it could have spent a few more words on the load_svd dependency.

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

Completeness3/5

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

With no output schema, the description does convey what the return value looks like (bitfields, enums), which is valuable. But for a tool sitting in a debug session, the missing mention of the SVD prerequisite and the unresolved overlap with read_peripheral_register leave meaningful gaps.

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

Parameters3/5

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

Schema description coverage is 100% and the description adds no parameter-level detail beyond what the schema already documents (peripheral, register, optional session). Baseline 3 is appropriate since the schema carries the parameter semantics.

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

Purpose4/5

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

States a specific verb+resource ('Reads and decodes a peripheral register') and adds the distinguishing detail that results carry SVD bitfield names and enumerated values, so it is clearly richer than a raw read. However, it never references the near-identical sibling 'read_peripheral_register', so an agent cannot tell the two apart from the description alone.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no named alternatives are given. The description does not say when decoding is preferable to the sibling read_peripheral_register, nor that an SVD must be loaded (via load_svd) before decoding works.

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

describe_acceptanceA
Read-onlyIdempotent

Read the loaded AcceptanceSpec or the last verdict. what=summary (name + check counts), checks (full check list), or last_result (the most recent run_acceptance report).

ParametersJSON Schema
NameRequiredDescriptionDefault
whatNosummary|checks|last_result (default summary).
sessionNoTarget session id (default 'default').

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds that it can read either a loaded spec or a previously produced verdict, but doesn't state what happens if no spec is loaded or which verdict (last run only?) is returned.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core action, then the mode breakdown. No filler; every clause carries information.

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

Completeness4/5

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

With no output schema, the description usefully describes the shape of each mode's result, and the schema covers the session parameter and its default. Only minor gaps remain, such as behavior when no spec is loaded, but the definition is sufficient to call the tool correctly.

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

Parameters4/5

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

Schema coverage is 100% and the schema lists the allowed 'what' values, but the description goes further by explaining what each value returns (summary = name + check counts, checks = full list, last_result = the run_acceptance report). That is genuine meaning beyond the schema's bare enum list.

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

Purpose4/5

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

States a specific verb (Read) and resource (the loaded AcceptanceSpec or the last verdict), which immediately distinguishes it from load_acceptance (which loads a spec) and run_acceptance (which executes). It doesn't explicitly call out the siblings it is not, but the read-only framing is unambiguous.

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

Usage Guidelines3/5

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

Usage is implied: you call it to view the loaded spec or the most recent verdict. However there is no explicit when-to-use guidance or routing to alternatives (e.g. 'use this instead of run_acceptance when you only want to inspect'), so the agent must infer the context.

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

describe_boardA
Read-onlyIdempotent

Read the BoardDescription imported by import_netlist. what=summary (MCU + peripherals + counts), pins (full MCU pin map), nets, power (power/ground nets), or peripherals (distinct peripherals in use).

ParametersJSON Schema
NameRequiredDescriptionDefault
whatNosummary|pins|nets|power|peripherals (default summary).
sessionNoTarget session id (default 'default').

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered. The description adds the data-provenance fact (content originates from import_netlist), but nothing about session scoping, error behavior when no netlist was imported, or output size; with annotations carrying the load, a 3 is appropriate.

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

Conciseness4/5

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

A single dense sentence, front-loaded with the action and data source, then the option list. Slightly run-on, but every clause carries information and nothing is padded.

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

Completeness5/5

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

No output schema exists, and the description compensates by describing what each view returns; annotations cover the safety profile and the schema covers both parameters. For a read-only describe tool, an agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description genuinely enriches the terse "summary|pins|nets|power|peripherals" enum by explaining what each view returns (e.g. summary = MCU + peripherals + counts, power = power/ground nets). The session parameter is left to the schema.

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

Purpose5/5

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

Specific verb ("Read") plus a specific resource ("the BoardDescription imported by import_netlist"), and it enumerates the five selectable views. An agent can tell this apart from validate_board, inspect_project, or describe_framework 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.

Usage Guidelines4/5

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

It states the precondition clearly (this reads what import_netlist produced) and explains what each "what" value yields, which is the main selection decision an agent faces. It never names an alternative tool or a when-not condition, 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.

describe_frameworkA
Read-onlyIdempotent

Read the synthesized FrameworkPlan. what=summary (mcu + clocks + peripherals), clocks, gpio (per-pin config), peripherals (init blocks), init_order, or unresolved (the TODO holes that need target data or a design decision). Run design_framework first.

ParametersJSON Schema
NameRequiredDescriptionDefault
whatNosummary|clocks|gpio|peripherals|init_order|unresolved (default summary).
sessionNoTarget session id (default 'default').

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuine context beyond that: the plan is 'synthesized', it must follow design_framework, and the 'unresolved' view exposes TODO holes needing target data or a design decision.

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

Conciseness4/5

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

Front-loaded with the verb and resource, then the selectors, then the prerequisite last. Dense with parentheticals but every clause carries information; no filler sentences.

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

Completeness4/5

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

No output schema exists, so the description carries the return-value burden and does so by enumerating the report sections. It omits what happens if design_framework was never run (empty result vs error), which is the only notable gap for a two-parameter read tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining what each 'what' selector actually returns (summary = mcu + clocks + peripherals, gpio = per-pin config, peripherals = init blocks, unresolved = TODO holes), which is meaning the flat enum string in the schema does not convey.

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

Purpose4/5

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

Specific verb ('Read') plus a specific resource ('the synthesized FrameworkPlan'), and it enumerates the distinct views (summary, clocks, gpio, peripherals, init_order, unresolved) so an agent knows exactly what it gets. It differentiates itself from design_framework by naming it as a prerequisite, though it never distinguishes itself from render_framework.

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

Usage Guidelines4/5

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

'Run design_framework first' gives an explicit ordering prerequisite, which is real usage context that prevents calling it before a plan exists. It stops short of stating when-not to use it or naming render_framework as an alternative for visual output.

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

design_frameworkA

Synthesize a deterministic FrameworkPlan (Pillar D) from the session's imported board: which clocks to enable, how each pin must be muxed, and which peripheral init blocks to emit, in dependency order. Supply per-peripheral HAL .Init parameters via design={'USART1': {'baud': 115200, ...}} and optional AF numbers via af_map. Mandatory .Init members are auto-filled with HAL-standard defaults (a complete, valid init struct, not a half-initialized one) and a few are derived from the netlist (UART flow control from RTS/CTS pins, SPI NSS from an NSS pin); each field is tagged explicit/derived/default. Alternate-function numbers are also auto-derived from a pin-capability DB (db_path or the STM32_GDB_MCP_PIN_DB env) when its entries carry an 'af' field; an explicit af_map overrides the DB per pin. Anything that needs a human decision (baud, timer period, I2C timing) is surfaced as unresolved, never guessed. Import a netlist first (import_netlist).

ParametersJSON Schema
NameRequiredDescriptionDefault
af_mapNoOptional alternate-function numbers: {line_or_family: {port_pin: {'USART1_TX': 7}}}. Overrides db_path per pin.
designNoPer-peripheral config, e.g. {'USART1': {'baud': 115200, 'word_length': 'UART_WORDLENGTH_8B'}}.
db_pathNoOptional JSON pin-capability DB (CubeMX-derived); entries with an 'af' field auto-fill alternate-function numbers.
sessionNoTarget session id (default 'default').
from_specNoBuild from the session's imported product spec (import_spec) instead of, or merged under, an explicit design (explicit keys win).

TDQS

A4.6/5.0
Behavior5/5

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

Far beyond the annotations, it discloses auto-fill of mandatory .Init members with HAL defaults, derivation from the netlist (UART flow control, SPI NSS), explicit/derived/default tagging per field, AF auto-derivation from a pin DB, and precedence rules (explicit af_map overrides DB). It also states the safety-relevant policy that ambiguous fields are surfaced as unresolved rather than guessed.

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

Conciseness4/5

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

The purpose and output list are front-loaded in the first sentence, and each following sentence carries distinct information (parameter shapes, defaults, derivation, precedence). It is dense and slightly long, but no sentence is filler.

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

Completeness5/5

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

For a five-parameter, nested-object tool with no output schema, the description covers purpose, prerequisites, parameter semantics, behavioral rules, and the shape of the produced plan (clocks, muxing, init blocks in dependency order). An agent has everything needed to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the schema already documents all five parameters; the baseline is 3. The description adds genuine value on top, documenting the design and af_map shapes, the STM32_GDB_MCP_PIN_DB env fallback for db_path, and the merge/precedence semantics of from_spec.

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

Purpose5/5

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

The description names a specific verb (Synthesize), resource (FrameworkPlan / Pillar D), and concrete outputs (clocks to enable, pin muxing, peripheral init blocks in dependency order), so an agent knows exactly what the tool produces. It also ties itself to the sibling import_netlist as a prerequisite, anchoring it in the workflow.

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

Usage Guidelines4/5

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

It clearly states the precondition ('Import a netlist first') and explains when to supply design/af_map versus relying on auto-fill, and how from_spec merges with explicit design. It does not explicitly contrast with sibling tools like describe_framework or render_framework, so routing between those is left to inference.

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

detect_probeA
Read-onlyIdempotent

Lists physical ST-Link, J-Link, and CMSIS-DAP probes currently connected over USB. Preserves serial numbers so multiple identical probes are never silently collapsed.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds a concrete behavioral trait beyond annotations: it preserves serial numbers so identical probes are not collapsed, which is important for identifying multiple devices. It does not cover return format or error cases.

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

Conciseness5/5

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

Two tightly written sentences, front-loaded with the action and resource, with no filler. Every clause carries information.

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

Completeness4/5

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

For a simple detection tool with one optional parameter and no output schema, the description conveys the essential purpose and a key output guarantee (serial-number preservation). It could say more about the returned format (e.g., list of serials/names), but the annotation set covers safety and the tool's scope is clear.

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

Parameters3/5

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

Schema coverage is 100% and the single optional 'session' parameter is documented in the schema ('Optional debug-session name. Omit for the default target.'). The description adds no additional meaning about the parameter. Baseline 3.

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

Purpose5/5

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

States a specific verb ('Lists') and resource ('physical ST-Link, J-Link, and CMSIS-DAP probes currently connected over USB'), and adds the serial-number preservation guarantee that differentiates it from a generic list tool. The scope is unambiguous and no sibling performs the same action.

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

Usage Guidelines2/5

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

Provides no when-to-use guidance, prerequisites, or alternatives. It does not say whether to call this before starting a debug session or how it relates to tools like start_debug_session or self_check. Implied usage only.

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

detect_rtosA
Read-onlyIdempotent

Detects whether FreeRTOS symbols are available in the current GDB session.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and closed-world behavior, so the safety profile is covered. The description adds session scoping but does not describe return shape, failure behavior, or prerequisites beyond that.

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

Conciseness5/5

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

A single front-loaded sentence with no filler. It communicates the essential purpose immediately.

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

Completeness4/5

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

For a simple detection tool, the purpose plus schema and annotations are nearly sufficient; the boolean-style result is implied by 'detects whether.' However, it does not explicitly state the return form or behavior when no session exists, leaving minor gaps.

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

Parameters3/5

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

Schema description coverage is 100%, and the sole optional session parameter is fully documented in the schema. The description adds no extra meaning beyond what the schema already provides, so the baseline is 3.

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

Purpose5/5

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

States a specific verb and resource: detect FreeRTOS symbol availability. The scope, 'current GDB session,' makes it clearly distinct from siblings such as read_freertos or session diagnostics.

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

Usage Guidelines2/5

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

The description says what the tool does but not when to use it instead of alternatives like read_freertos or detect_probe. There is no explicit when-to-use, when-not-to-use, or prerequisite guidance.

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

diagnose_faultB
Read-onlyIdempotent

Reads and decodes Cortex-M fault registers into likely fault causes.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds that the output is an interpreted result ('likely fault causes') rather than raw register dumps, which is genuinely useful, but it omits any precondition about the target being halted in a fault state and does not describe what is read.

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

Conciseness5/5

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

A single front-loaded sentence with zero filler; every word (verb, resource family, output type) earns its place.

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

Completeness3/5

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

With no output schema, the description must carry the return-value burden, and it only gestures at the output ('likely fault causes'). It also omits the crucial precondition that a fault condition exists to diagnose. Adequate but with clear gaps for a diagnostic tool.

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

Parameters3/5

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

Schema description coverage is 100% for the single optional 'session' parameter, so the schema already explains the omit-for-default behavior. The description adds no additional semantics about the session parameter, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific verb pair (reads and decodes) and a specific resource (Cortex-M fault registers), plus the derived output (likely fault causes). The scope is clear, but it does not distinguish itself from close siblings such as reconstruct_fault_context or coredump, so an agent cannot route between them from the text alone.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisite (e.g. target halted due to a fault), and no mention of alternatives like reconstruct_fault_context or session_diagnostics. The agent is left to infer the diagnostic context entirely.

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

disassembleC
Read-onlyIdempotent

Disassembles N instructions at a location (default $pc).

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
locationNoWhere to disassemble from (default '$pc').
instructionsNoNumber of instructions (default 8).

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, covering the safety profile. The description adds default values ($pc, N) that are already in the schema, but no behavioral context beyond what structured fields provide.

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

Conciseness4/5

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

A single, front-loaded sentence with zero waste. It states the action, count, and default location efficiently, though it could benefit from marginally more structure to aid selection among siblings.

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

Completeness3/5

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

For a simple read-only tool whose annotations cover safety and whose schema is fully described, the description is minimally adequate. However, it lacks any usage context or differentiation from many similar debug siblings, leaving selection ambiguous.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all three parameters. The description repeats the default location ($pc) and instruction count concept, adding no new meaning. Baseline 3 is appropriate when the schema carries the explanatory load.

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

Purpose4/5

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

States a specific verb ('Disassembles') and resource ('instructions') with scope ('N instructions at a location'). Clear what the tool does, but does not distinguish itself from sibling debug tools like step, read_memory, or read_call_stack.

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

Usage Guidelines2/5

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

Provides no when-to-use guidance, no alternatives, and no prerequisites. The agent is left to infer context from the name alone among many debug-oriented siblings.

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

export_debug_reportA

Writes a single self-contained JSON report (journal + metrics + profile, optionally a state snapshot and a coredump) tied to the run-id, so a bug session is fully reproducible and shareable from one artifact.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesOutput path for the report JSON.
sessionNoOptional debug-session name. Omit for the default target.
coredump_pathNoIf set, capture a coredump there and reference it in the report.
include_snapshotNoCapture and embed a debug snapshot (requires a halted target).

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare write (readOnlyHint=false), non-destructive, non-idempotent, non-open-world, so the safety profile is already covered. The description adds genuine context beyond them: that it produces one self-contained artifact tied to the run-id and can optionally embed a snapshot and a coredump. It omits any note on disk/permission requirements or cost of capturing a coredump.

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

Conciseness5/5

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

A single dense sentence that front-loads the action and artifact, then qualifies the optional components. Every phrase earns its place with no redundancy.

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

Completeness4/5

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

For a write tool with no output schema, the description adequately explains what is produced and where it is anchored (run-id). It could say more about what the report enables next or any preconditions, but nothing critical for calling it is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all four parameters including the 'requires a halted target' constraint on include_snapshot. The description confirms the optional snapshot/coredump nature but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Writes') and resource ('a single self-contained JSON report') and enumerates the composite content (journal + metrics + profile, optionally snapshot and coredump), which distinguishes it from siblings like snapshot, coredump, and session_diagnostics. It does not explicitly name a sibling it replaces, 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.

Usage Guidelines3/5

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

The clause 'so a bug session is fully reproducible and shareable from one artifact' implies the use case (packaging a bug session for sharing), but there is no explicit when-to-use vs when-not guidance and no named alternative such as snapshot or coredump for narrower needs.

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

expressionsA

Evaluate C/GDB expressions. action=assert(assertions) | capture([expressions,table]) | compare(expressions,action). assertions=[{expression,expected[,operator]}]; table={index_range,columns}; compare runs 'action' between the two captures.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableNoOptional indexed table request, e.g. columns=['count'], index_range=[2,6].
actionYesWhich operation to perform.
sessionNoOptional debug-session name. Omit for the default target.
assertionsNo
expressionsNoGDB/C expressions to evaluate.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, so the agent knows this is not a pure read, yet the description never explains what state it mutates or what permissions/conditions are required. It does disclose one meaningful behavioral fact beyond the annotations: compare 'runs action between the two captures', i.e. it can drive execution (consistent with the step/continue/halt enum), which is genuinely valuable context.

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

Conciseness4/5

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

Front-loaded with the purpose, then compressed into pipe-delimited signatures; every clause carries content. It is dense and telegraphic rather than verbose, though the trailing 'compare runs action between the two captures' restates what the signature already implies.

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

Completeness3/5

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

For a 5-parameter tool with nested objects and no output schema, the description covers action, assertions, table, and expressions but omits the 'session' parameter entirely and says nothing about what results are returned. Adequate for the main action flows, incomplete for the full surface.

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

Parameters4/5

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

With ~80% schema coverage the baseline is 3, and the description earns an extra point by spelling out the per-action argument shapes: assertions=[{expression,expected[,operator]}], table={index_range,columns}, and the action list for compare. This maps parameters to intent more directly than the schema's raw object definitions.

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

Purpose4/5

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

States a specific verb+resource ('Evaluate C/GDB expressions') and enumerates the three operations it actually performs (assert/capture/compare), so its scope is legible. However, it never distinguishes itself from sibling evaluation tools like read_variable, read_memory, or read_registers, leaving the agent to 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.

Usage Guidelines3/5

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

The action signatures implicitly communicate what each mode is for (assert compares to expected, capture snapshots, compare diffs two captures), which is usable guidance. But there is no explicit when-to-use/when-not statement and no routing to alternative tools for plain variable reads.

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

flash_and_runA
Destructive

One-call bring-up: flash an ELF (loads symbols), reset-halt, set a temporary breakpoint at an entry point (default 'main'), run to it, and return the decoded stop context. With hub_channel (or usb_location) and no session running, it starts one pinned to that probe first -- so 'flash the firmware on channel 4' is this single call, on a bench with several probes, without disconnecting any of the others.

ParametersJSON Schema
NameRequiredDescriptionDefault
mcuNoPassed through when this call starts the session; falls back to the profile.
run_toNoEntry point to stop at (default 'main').
sessionNoOptional debug-session name. Omit for the default target.
file_pathYesPath to the ELF to flash.
hub_channelNoStart a session on the probe at this hub channel first, if none is running. Uses the usb_location recorded for it in the profile's hub.map. Ignored when a session is already live -- it flashes through that one.
timeout_secNoMax seconds to wait (default 10).
usb_locationNoSame, but naming the USB position directly, e.g. '1-1.4'.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already flag the tool as destructive, non-read-only, and non-idempotent. The description adds substantial context: the internal sequence (load symbols, reset-halt, temporary breakpoint, run to entry, return decoded stop context) and session-pinning logic, including that hub_channel is ignored when a session is already live.

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

Conciseness4/5

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

Two sentences, front-loaded with the core operation. The second sentence is dense but delivers non-redundant session behavior; no wasted words, though a more structured presentation could improve readability.

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

Completeness5/5

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

For a complex, multi-step tool with no output schema, the description covers the purpose, action sequence, session selection, and return value ('decoded stop context'). All required parameters are documented in the schema, and nothing critical for correct invocation appears missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all seven parameters, including defaults for run_to ('main') and hub_channel behavior. The description reinforces the default entry point and session logic but does not add syntax, format, or examples beyond what the schema provides, so baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific composite verb+resource ('one-call bring-up: flash an ELF... reset-halt, set breakpoint, run...') and explicitly frames it as a single call that replaces multiple steps. It distinguishes itself from single-operation siblings like flash_firmware or reset_target by emphasizing the combined workflow.

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

Usage Guidelines4/5

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

It gives a clear usage context: with hub_channel or usb_location and no session running, it starts a session pinned to that probe, and it does not disconnect other probes. However, it does not explicitly name alternatives (e.g., call flash_firmware then reset_target) or state when not to use this tool, so guidance falls short of the top score.

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

flash_eraseA
Destructive

Erases a flash range on the target (OpenOCD 'flash erase_address pad'), rounding out to the driver's erase-sector boundaries. The recovery tool for a board that will not boot: clearing a corrupt OTA journal, a stale boot descriptor, or a half-written image. Requires an explicit address AND length — there is deliberately no mass-erase default.

ParametersJSON Schema
NameRequiredDescriptionDefault
lengthYesBytes to erase. Rounded UP to the erase-sector boundary.
verifyNoRead back the first 64 bytes and confirm they hold this part's erased value — 0x00 on STM32L0/L1, 0xFF elsewhere, taken from the profile MCU (default true).
addressYesStart address, e.g. '0x08016000'. Rounded DOWN to the erase-sector boundary.
sessionNoOptional debug-session name. Omit for the default target.
sector_size_bytesNoErase-sector size of this part (e.g. 4096 on STM32L1, up to 131072 on F4). Give it and the write guard checks the padded range that is really erased; omit it and the guard can only check the range you asked for.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructive=true and idempotent=false, so the safety profile is covered. The description adds real context beyond that: the driver-boundary rounding behavior, the deliberate absence of a mass-erase default, and the recovery framing. It does not describe failure/abort behavior or what the call returns.

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

Conciseness5/5

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

Three sentences, front-loaded with the core action, then use case, then the key constraint. The OpenOCD parenthetical adds precision without padding; nothing is wasted.

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

Completeness4/5

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

For a destructive, non-idempotent tool with no output schema and annotations covering safety, the description supplies purpose, trigger scenarios, required-arg expectations, and boundary/verify behavior. The only gap is the absence of any statement about the outcome or failure modes after erasing, but the verify parameter partially compensates.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents length/address rounding, verify, session, and sector_size. The description only reinforces that both address and length are mandatory and explains the design rationale ('deliberately no mass-erase default'); it adds no per-parameter meaning beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

Precise verb+resource: 'Erases a flash range on the target,' reconciled with the OpenOCD 'flash erase_address pad' primitive. The scope ('rounded out to the driver's erase-sector boundaries,' 'no mass-erase default') is distinct from flash_firmware/write_memory, which write rather than erase an arbitrary range.

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

Usage Guidelines4/5

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

Clear when-to-use context: 'The recovery tool for a board that will not boot,' with three concrete scenarios (corrupt OTA journal, stale boot descriptor, half-written image). It gives strong positive guidance but does not explicitly name an alternative tool or an exclusion condition relative to siblings like flash_firmware.

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

flash_firmwareA
Destructive

Flashes a compiled firmware binary to the target. Accepts GCC .elf or Keil .axf. By default it then resets and RUNS the firmware (Keil-style 'Load + Run'). Pass reset_run=false to flash only (e.g. to set breakpoints before the firmware starts). Refuses (elf_layout_unsupported) an image GDB would flash incompletely, such as a Keil ARMCC5 AXF whose RW initializer lies outside its segment; flash its fromelf BIN instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
file_pathYesAbsolute path to the compiled firmware file (e.g. .elf/.axf).
reset_runNoReset and run after flashing (default true). False = flash only, leave halted.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and non-idempotence; the description adds substantial behavior beyond that: default post-flash reset-and-run, the option to leave the target halted, and a named refusal mode (elf_layout_unsupported) with the workaround. It stops short of describing timing, session state effects, or how a failure leaves the target.

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

Conciseness4/5

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

Front-loaded with the core action and each subsequent sentence carries new information (formats, default run, opt-out, refusal workaround). Slightly dense and dependent on parenthetical device-tool jargon, but no wasted sentences.

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

Completeness4/5

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

For a destructive, non-idempotent single-parameter-ish operation with no output schema, the description covers the action, the default side effect, the opt-out, and one notable failure mode with an alternative. Adequate without over-explaining return values.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: why reset_run=false matters (breakpoint setup), what the omitted session defaults to, and which formats file_path accepts. Useful context without re-documenting syntax.

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

Purpose5/5

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

States a specific verb (Flashes) and resource (compiled firmware binary) plus supported input formats (.elf/.axf). An agent can immediately tell this is the flash-and-execute path rather than the sibling flash_erase or verify_flash tools.

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

Usage Guidelines4/5

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

Gives clear conditions for the reset_run=false variant ('to set breakpoints before the firmware starts') and for using a fromelf BIN instead of an AXF. It does not explicitly contrast itself with the sibling flash_and_run, so routing between those two is left to inference.

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

frameA
Read-onlyIdempotent

Stack-frame navigation. action=select(level) | source([location,count]) | variables([level,include_raw]). level 0 is the innermost frame.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoApproximate number of lines (default 10).
levelNoFrame level, 0 is the innermost/current frame.
actionYesWhich operation to perform.
sessionNoOptional debug-session name. Omit for the default target.
locationNoWhere to list around. Omit to continue from current.
include_rawNoInclude the raw GDB transcript (default false).

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds the useful semantic that level 0 is the innermost frame, but says nothing about return format or how 'source/variables' continue from current context.

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

Conciseness5/5

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

Two dense, front-loaded sentences with zero filler. The action/param map is compressed into a single readable line and the key semantic constraint is appended last.

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

Completeness4/5

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

With 6 fully documented params and a oneOf schema, and no output schema required, the description covers the shape of all three operations adequately. It stops short of explaining what each action returns, but the schema carries the rest.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real value by mapping which parameters belong to which action (select→level, source→location/count, variables→level/include_raw), which is not obvious from the oneOf structure alone. The 'level 0 is innermost' note also clarifies the most important enum-adjacent parameter.

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

Purpose4/5

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

States a specific resource (stack frames) and enumerates the three operations (select/source/variables), so an agent knows this is stack-frame navigation rather than a stack dump. It does not explicitly differentiate from close siblings like read_call_stack or analyze_stack, which would push it higher.

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

Usage Guidelines3/5

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

The action breakdown implies when each operation applies (choose level, view source, inspect variables), but there is no explicit guidance on when to prefer this tool over read_call_stack, analyze_stack, or step. Usage is inferable but not stated.

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

get_sessionA
Read-onlyIdempotent

Returns this session's record by view: 'journal' (every tool call with args/ok/summary/duration; supports limit), 'timeline' (compact human-readable replay), or 'metrics' (per-tool call counts, success/failure, durations).

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoWhich view (default journal).
limitNojournal: return only the most recent N entries.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish readOnly=true, idempotent=true, non-destructive=false, so the safety profile is covered. The description adds substantive value by detailing what each view returns (args/ok/summary/duration for journal, per-tool counts and durations for metrics), which is meaningful behavioral context beyond the annotations.

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

Conciseness4/5

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

One front-loaded sentence with the resource and view breakdown, no filler. It is dense and readable, though the parenthetical enumeration is heavy enough that a slightly more structured form might scan faster.

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

Completeness4/5

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

With no output schema, the description carries the burden of explaining return values, and it does so for all three views. Remaining gaps (pagination/ordering beyond 'most recent N', session default behavior) are minor for a read-only introspection tool.

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

Parameters4/5

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

Schema coverage is 100%, so the enum values and limit semantics are already documented. The description nonetheless enriches the view parameter by explaining the distinct content of each mode and notes that limit applies specifically to journal, adding meaning the bare schema descriptions do not convey.

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

Purpose5/5

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

States a specific verb (returns) and resource (this session's record) and immediately enumerates the three views with what each yields. An agent can distinguish it from list_sessions (which enumerates sessions rather than reading one session's contents) without opening either schema.

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

Usage Guidelines3/5

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

The view names imply which one to pick for a given goal, but the description never states when to use get_session versus alternatives like session_diagnostics, list_sessions, or export_debug_report, nor when a view is preferable. Usage is left to inference.

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

halt_executionC

Interrupts/halts the target device execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare this is a non-read-only, non-destructive, non-idempotent operation, covering the safety profile. The description adds nothing beyond the verb: it does not say whether execution state is preserved, whether the halt is resumable via continue_execution, or how it interacts with breakpoints or running scenarios. It does not contradict the annotations.

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

Conciseness4/5

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

A single short sentence with no filler and the action front-loaded. It is appropriately sized, though it is thin rather than efficient—the brevity comes partly from omission of useful context.

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

Completeness3/5

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

For a simple one-optional-parameter mutation with annotations present and no output schema, the description is minimally adequate. It still leaves the agent unsure about resumability and the operational effect of halting relative to sibling stop/reset tools, which a one-line addition could resolve.

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

Parameters3/5

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

With a single optional parameter and 100% schema description coverage, the schema already fully explains the session argument ('Omit for the default target'). The description adds no extra meaning, which is the expected baseline when the schema carries the parameter burden.

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

Purpose4/5

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

The description states a specific action (interrupts/halts) on a specific resource (target device execution), so the core purpose is unambiguous. However, it does nothing to distinguish itself from closely related siblings like continue_execution, stop_debug_session, reset_target, or wait_for_stop, leaving the agent to 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.

Usage Guidelines2/5

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

There is no guidance on when to use this versus alternatives such as stop_debug_session (session teardown) or reset_target (restart). No prerequisites, no follow-up guidance (e.g., whether continue_execution can resume afterward), and no exclusions are given.

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

hubA
Destructive

Programmable USB hub: per-port power, USB2 data lines, cold boot, and V/I sampling. action=describe | power(state[,channel,confirm]) | data(state[,channel,exclusive,confirm]) | cycle([channel,off_ms,settle_ms,confirm]) | measure([channel,duration_sec,interval_sec,all_channels]) | discover([apply,force,settle_sec]) | dashboard([state,port,interval_sec,open_browser]). dashboard serves a read-only live web page on 127.0.0.1 and returns its URL. state=on|off; channel is 1-based and defaults to the session's mapped hub channel. Removing port power cold-boots that board and un-enumerates its probe.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoHTTP port on 127.0.0.1 (default 8765).
applyNoWrite the discovered map into the debug profile.
forceNoRun even though a GDB server is alive on this session.
stateNoTarget state for the port.
actionYesWhich operation to perform.
off_msNoMilliseconds to hold power off (default 400).
channelNo1-based hub channel. Defaults to the session's mapped hub channel.
confirmNoRequired to cut power/data when the guard is in confirm mode or a session is live.
sessionNoOptional debug-session name. Omit for the default target.
exclusiveNoWith state=on, disconnect every other port's data line.
settle_msNoMilliseconds to wait after restoring power (default 1500).
settle_secNoSeconds to wait for USB re-enumeration per toggle (default 1.0).
all_channelsNoSample every channel instead of just one.
duration_secNoSampling window; 0 (default) takes one snapshot.
interval_secNoDelay between samples (default 0.05).
open_browserNoAlso open the page in the default browser.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true / not readOnly, so the bar is lower, yet the description still adds real behavioral context: cutting port power cold-boots the board and un-enumerates its probe, the dashboard is a read-only live page on 127.0.0.1 whose URL is returned, and 'confirm' guards power/data cuts when a session is live. It stops short of stating permission/rate-limit or expected failure behavior.

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

Conciseness4/5

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

Front-loads the tool's identity, then compresses all seven action signatures into one dense line, then adds two short behavioral sentences. Nearly every clause carries information, though the signature list is terse enough to require careful reading.

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

Completeness4/5

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

For a 7-action, 16-parameter mutation tool with no output schema, the description covers the action set, key defaults (channel mapping, state values), the dashboard return value, and the destructive cold-boot consequence. It omits returns for most non-dashboard actions and any sequencing guidance, so it is strong but not exhaustive.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter is already documented in the schema, and the inline action(...) signatures largely restate that mapping. The description does reinforce that channel is 1-based and defaults to the session's mapped channel, but adds little syntax or default information beyond what the schema already carries. Baseline 3 applies.

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

Purpose5/5

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

Opens with a concrete verb+resource scoping ('Programmable USB hub: per-port power, USB2 data lines, cold boot, and V/I sampling') and then enumerates the seven actions with their signatures, so an agent immediately knows this is a hardware power/data control surface rather than a debug-inspection tool. It is clearly distinguishable from the surrounding debug/flash siblings.

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

Usage Guidelines3/5

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

The action list implies the usage of each operation, and the note that 'Removing port power cold-boots that board and un-enumerates its probe' hints at when power cycling is appropriate. But there is no explicit when-to-use vs when-not-to-use guidance, no ordering advice among actions (e.g., discover before power), and no pointer to alternatives.

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

import_netlistA

Parse a schematic netlist (KiCad .net today) into a machine-readable BoardDescription: the MCU part/family/line, a per-pin map (package pin -> port pin -> net -> inferred peripheral function), and the power/ground nets. This is the input contract for automated framework design. Pass 'path' or 'text'. The result is stored on the session; read views with describe_board.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoPath to a netlist file (e.g. board.net).
textNoNetlist contents inline (alternative to path).
formatNoNetlist format: auto (default), kicad, altium (Protel .NET), orcad (pstxnet.dat) or csv (generic pin-map).
db_pathNoOptional JSON pin-capability DB; when given (or STM32_GDB_MCP_PIN_DB is set), pins are resolved physically (package position -> port pin, AF corroboration).
sessionNoTarget session id (default 'default').

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false; the description justifies the write by disclosing that 'the result is stored on the session', which explains the mutation and how to retrieve it. It also notes the optional pin-capability DB enables physical pin resolution, adding context beyond the annotations, though it does not discuss failure behavior or idempotency.

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

Conciseness5/5

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

Three tightly packed sentences with zero filler; the core purpose and output shape come first, then input options, then the read-view pointer. Every sentence carries information.

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

Completeness5/5

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

With no output schema, the description compensates by enumerating the return structure (MCU part/family/line, pin map, power nets) and pointing to describe_board for views, and it covers the session-storage side effect. 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds value: it frames path/text as mutually exclusive inputs and explains that db_path (or the STM32_GDB_MCP_PIN_DB env var) triggers physical pin resolution with AF corroboration — behavior the schema does not spell out.

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

Purpose5/5

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

States a specific verb (parse) and resource (schematic netlist, KiCad .net) and precisely characterizes the output (BoardDescription: MCU part/family/line, per-pin map, power/ground nets). It is clearly distinguishable from siblings like describe_board, which it names as the read-side counterpart.

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

Usage Guidelines4/5

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

Explicitly frames the tool as 'the input contract for automated framework design', tells the agent it may pass either 'path' or 'text', and routes it to describe_board for reading results. It lacks explicit when-not conditions or alternatives for other import paths (e.g., import_spec), 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.

import_specA

Translate a controlled-vocabulary product spec (human/product terms) into the per-peripheral design params design_framework consumes, and cross-check it against the imported netlist. This is the upstream guard the pipeline lacked: instead of hand-writing HAL macros, supply intent -- UART framing '8N1', direction 'txrx', flow_control 'rtscts'; SPI role 'master', spi_mode 0..3, data_size, bit_order; I2C speed 'fast', addressing '7bit'; ADC resolution 12, conversion 'continuous'; a timer update_hz; plus dma / interrupt / priority opt-ins -- and the machine expands it deterministically (8E1 -> UART_WORDLENGTH_9B + UART_PARITY_EVEN, honoring HAL's parity-bit-in-word-length rule). A peripheral named in the spec but absent from the netlist is a conflict; an intent key or value the machine does not model is surfaced as unresolved -- never guessed. Then design_framework(from_spec=true) builds the plan from the translated params. Import a netlist first so the spec is cross-checked.

ParametersJSON Schema
NameRequiredDescriptionDefault
specNoPer-peripheral intent, e.g. {'USART1': {'baud': 115200, 'framing': '8N1', 'direction': 'txrx'}, 'ADC1': {'resolution': 12, 'conversion': 'continuous', 'dma': true}}.
sessionNoTarget session id (default 'default').

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare this is a mutation (readOnlyHint=false) that is non-destructive and non-idempotent. Beyond that, the description adds real behavioral context: deterministic expansion, a named-but-absent peripheral being a 'conflict,' unmodeled intent surfaced as 'unresolved -- never guessed.' It stops short of describing the returned conflict/unresolved payload, but it substantially enriches the annotation profile.

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

Conciseness4/5

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

Front-loaded with purpose and workflow, and the prerequisite/downstream sequencing bookends the text well. It is dense with examples and slightly verbose, but nearly every clause conveys new vocabulary or behavior rather than padding.

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

Completeness4/5

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

For a mutating tool with no output schema, the description covers the translation contract, conflict/unresolved handling, prerequisite import, and downstream consumption. It does not state the exact response shape (e.g., what the unresolved/conflict report looks like), which is the main residual gap.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema's single example, enumerating the accepted vocabulary per peripheral type (framing, direction, flow_control, spi_mode, data_size, resolution, conversion, update_hz, dma/interrupt/priority opt-ins) and the HAL expansion rule. This meaningfully clarifies the opaque 'spec' object.

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

Purpose5/5

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

States a specific verb and resource: translate a controlled-vocabulary product spec into per-peripheral design params and cross-check against the netlist. It explicitly distinguishes itself from its siblings import_netlist (prerequisite) and design_framework (downstream consumer), 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.

Usage Guidelines5/5

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

Gives explicit ordering: 'Import a netlist first so the spec is cross-checked,' and names the downstream call 'design_framework(from_spec=true) builds the plan from the translated params.' The when-to-use context and the alternative route are both stated, leaving little to inference.

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

inspect_projectB
Read-onlyIdempotent

Discovers firmware project artifacts such as ELF, map, linker script, SVD, and STM32CubeMX .ioc metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
project_rootNoProject directory to scan. Uses debug profile project_root if omitted.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety and side-effect profile is fully covered. The description adds that this is a scanning/discovery operation over project artifacts, but says nothing about whether results are cached into session state, whether it re-scans each call, or how it interacts with the optional debug session.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or repetition. It is tight and readable, though it is arguably too terse for a tool whose output shape is undocumented.

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

Completeness3/5

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

With no output schema, the description carries the burden of explaining what a caller gets back, and it only vaguely implies a list of discovered artifacts without stating the return shape, grouping, or failure behavior when nothing is found. Annotations cover the safety side, so the remaining gap is moderate rather than severe.

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

Parameters3/5

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

Schema description coverage is 100%, and both parameters (session, project_root) have their defaults and fallback behavior documented in the schema itself. The description mentions no parameters at all, so it adds no meaning beyond the schema — baseline 3 is correct.

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

Purpose4/5

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

States a specific verb ("Discovers") and resource ("firmware project artifacts") and enumerates concrete examples (ELF, map, linker script, SVD, .ioc). However, it never distinguishes itself from siblings that also ingest project artifacts such as load_svd, load_device_pack, or load_symbols, so the agent must guess which discovery tool applies to a given need.

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

Usage Guidelines2/5

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

There is no indication of when to call this tool, when not to, or what alternative covers a related need. The only hint is the implied "discovery/first step" framing, which the agent must infer from the word 'Discovers' alone.

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

inspect_symbolA
Read-onlyIdempotent

Symbol / type introspection. what=size(expr) | type(expr) | address(symbol) | resolve(expr) | functions([regex]) | variables([regex]). resolve maps an address back to source, returning {resolved,symbol,offset,section,file,line}; resolved=false means no symbol there.

ParametersJSON Schema
NameRequiredDescriptionDefault
exprNoType or expression to size, e.g. 'struct foo'.
whatYesWhich operation to perform.
regexNoOptional regex to filter function names.
symbolNoSymbol name, e.g. 'g_state'.
addressNoAlias for 'expr'.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral context by documenting the return shape of resolve ({resolved,symbol,offset,section,file,line}) and the meaning of resolved=false, which matters because there is no output schema.

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

Conciseness4/5

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

Two tightly packed sentences with the general purpose stated first, then the operation-to-argument mapping, then the one non-obvious return contract. The terse notation is efficient and front-loaded, though it is dense enough that it reads more like a reference line than prose.

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

Completeness3/5

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

With six operations and no output schema, an agent needs return-shape information for each mode, but only resolve is documented; it is unclear what size, type, address, functions or variables return. The tool's purpose and argument mapping are complete, but the return contract is only partially covered.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3, but the description adds real value beyond it by binding each operation to its expected argument — size(expr), type(expr), address(symbol), functions([regex]) — clarifying which of the six parameters pairs with which what value. The bracket notation on regex also communicates that it is an optional filter.

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

Purpose4/5

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

The description names a specific capability ('Symbol / type introspection') and enumerates all six operations via the what= syntax, so an agent immediately knows this is a symbol/type query tool rather than a memory or register reader. It does not explicitly name which siblings to prefer (read_variable, expressions, load_symbols), so sibling differentiation is only implicit.

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

Usage Guidelines3/5

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

The operation list implies what each mode is for (size/type/address/resolve/functions/variables), which is more than nothing, but there is no explicit when-to-use vs when-not guidance and no named alternatives among the many sibling introspection tools. Usage must be inferred from the operation names.

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

list_sessionsA
Read-onlyIdempotent

Lists all debug target sessions (the 'default' one plus any named) with their liveness and port. To debug MULTIPLE boards at once, pass a 'session' argument (any string) to any tool — e.g. start_debug_session(session='rackA', ...) — and each gets fully isolated state.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is low. The description adds real behavioral context beyond that: what the result contains (liveness and port), the existence of a 'default' session alongside named ones, and the per-session isolation guarantee. No return-format or failure behavior is described, keeping it out of 5 territory.

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

Conciseness4/5

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

Two tightly written sentences, with the core behavior front-loaded and the multi-board tip second. The second sentence is arguably about other tools rather than this one, but it earns its place by explaining the session argument the agent will reuse everywhere.

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

Completeness4/5

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

For a zero-required-param, read-only listing tool with annotations covering the safety profile and no output schema, the description covers what is returned (liveness, port) and the naming model. Nothing essential for calling it correctly is missing; only failure/empty-list behavior is unstated.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description nevertheless adds non-obvious semantics: the session name may be any arbitrary string and each name yields fully isolated state, which the schema's one-line description does not convey.

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

Purpose4/5

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

States a specific verb and resource ('Lists all debug target sessions') and adds scope detail — the default plus any named — plus what each entry shows (liveness and port). It does not name the closest sibling (get_session) for a single-session lookup, so differentiation is implicit rather than explicit.

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

Usage Guidelines3/5

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

The second sentence explains the multi-session model and how to pass 'session' to any tool, which is genuinely useful context. But it never says when to call list_sessions versus get_session, session_diagnostics, or recover_session, so the guidance for choosing this tool is only implied.

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

load_acceptanceA

Load a machine-checked AcceptanceSpec (product-spec → deterministic checks) from an inline 'spec' object or a JSON 'path'. Checks: memory_u32 (any memory-mapped register), variable (C global), core_register, no_fault, stopped_at (PC in a symbol). Stored on the session; evaluate with run_acceptance.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoPath to a JSON AcceptanceSpec (alternative to 'spec').
specNoInline AcceptanceSpec {name, description, checks:[...]}.
sessionNoTarget session id (default 'default').

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false), so the bar is lower. The description adds real context beyond them: state is persisted ('Stored on the session') and the spec's check vocabulary is enumerated, which aids correct authoring. It omits error/failure behavior and permission needs.

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

Conciseness4/5

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

Front-loaded with purpose and sources, then the check vocabulary. Dense but every clause earns its place; the check-type enumeration is long yet genuinely informative for authoring a spec.

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

Completeness4/5

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

No output schema, and the safety profile is covered by annotations. The description supplies the source format, the check vocabulary, and the follow-up call, which is sufficient for a loader. Missing only failure/return-format details, which is minor here.

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

Parameters4/5

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

Schema coverage is 100% so the baseline is 3, but the description adds the explicit either/or relationship between the two sources ('inline spec object or a JSON path'), which is meaningful semantics the schema only states separately. No syntax detail for the check schema beyond the type list.

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

Purpose5/5

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

States a specific verb (Load) and resource (AcceptanceSpec), clarifies what the spec represents (product-spec → deterministic checks), enumerates the supported check types, and distinguishes itself from run_acceptance by naming evaluation as the next step. An agent can tell it apart from siblings like import_spec and synthesize_acceptance.

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

Usage Guidelines3/5

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

Implies the workflow (load here, then evaluate with run_acceptance), which is useful. However, it never states when to prefer this over near-siblings such as import_spec or synthesize_acceptance, and provides no prerequisites or exclusions.

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

load_device_packA

Register a verified device-fact pack (Pillar F) so the deterministic solvers cover a new STM32 family: its DMA request routing, irregular NVIC vectors, clock PLL profile, and timer bus/width. Facts are DATA, never guessed -- STM32F4/L4 ship built-in; add a family by supplying a validated pack (schema 'stm32-device-pack/v1') via path= (a JSON file) or inline pack=. Call with no arguments to report current coverage. Honest by design: a malformed pack is rejected with the list of problems and never half-loaded; shadowing a built-in family needs allow_override=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
packNoInline device-pack object (takes precedence over path).
pathNoPath to a device-pack JSON file to load and register.
sessionNoOptional debug-session name. Omit for the default target.
allow_overrideNoPermit shadowing a built-in family pack (default false).

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare the write/repeat safety profile; the description adds substantive behavior: malformed packs are rejected with a problem list, never half-loaded, and shadowing a built-in family is gated behind allow_override=true. That is exactly the extra context the annotations do not carry.

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

Conciseness4/5

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

Purpose is front-loaded in the first clause, followed by coverage facts, input modes, and failure semantics in a tight block. Slightly dense and the 'Facts are DATA, never guessed' phrasing is rhetorical rather than operational, but every other sentence earns its place.

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

Completeness5/5

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

With no output schema, the description covers return behavior (rejection with problem list, coverage report on no-arg call) and the override prerequisite. An agent has everything needed to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, and the description's parameter remarks (path as JSON file, inline pack precedence, override gating) largely restate what the schema already documents. It adds no syntax or format detail for session, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Register a verified device-fact pack') and names the exact content it controls (DMA request routing, NVIC vectors, PLL profile, timer bus/width), which distinguishes it from sibling loaders like load_svd or describe_board. 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.

Usage Guidelines4/5

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

Explains the trigger (adding a new STM32 family beyond the built-in F4/L4), the two input modes (path= JSON file or inline pack=), and a no-argument mode that reports current coverage. It lacks explicit when-not-to-use guidance or a named alternative, 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.

load_svdC

Loads an SVD file for peripheral parsing.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
filepathYesPath to the .svd file.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false and openWorldHint=false, so the agent knows this mutates state without being read-only or repeatable. The description adds no behavioral context beyond that: it doesn't say the loaded SVD is attached to the session, what happens to a previously loaded SVD, or how invalid/missing files are handled.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or redundancy. It is efficient, though the extreme brevity is the root of the gaps noted in other dimensions rather than a structural flaw.

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

Completeness2/5

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

For a non-read-only state-mutating tool with no output schema, the description omits what the load actually affects (session-scoped vs global), persistence across sessions, and failure behavior. An agent cannot tell from this text alone how the operation changes system state.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'session' and 'filepath' documented in the schema itself, so the baseline is 3. The description adds no meaning beyond the schema (e.g., path resolution rules or what the default target means).

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

Purpose4/5

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

States a specific verb (Loads) and resource (SVD file) plus the downstream purpose (peripheral parsing), which is more informative than a bare 'load' label. However, it does not distinguish itself from sibling loaders like load_symbols or load_device_pack, so an agent must infer which loader applies.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no alternatives named. The phrase 'for peripheral parsing' only weakly implies it should precede read_peripheral_register/decode_peripheral_register, and nothing tells the agent how it relates to load_device_pack or load_symbols.

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

load_symbolsA

Loads symbols from an ELF/AXF into the current GDB session WITHOUT flashing. Symbols are per-session, so after a fresh connect or recover_session you need this (or flash_firmware) before symbol breakpoints resolve. Falls back to the debug profile's elf_path if elf_path is omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
elf_pathNoPath to the ELF/AXF. Defaults to the profile elf_path.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so safety is partly covered, but the description adds meaningful context beyond them: that symbols are per-session, that no flashing occurs, and that the profile elf_path is a fallback. It does not disclose the non-idempotent behavior hinted by idempotentHint=false or error behavior when a path is invalid.

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

Conciseness5/5

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

Three tightly-packed sentences, front-loaded with purpose and the key constraint 'WITHOUT flashing', and every sentence earns its place by adding a distinct fact (non-flashing, per-session lifetime, fallback path).

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

Completeness4/5

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

With no output schema and zero required parameters, the description covers what an agent needs to call it: when to use it, the no-flash constraint, and the elf_path fallback. It could be stronger by noting behavior on failure or the distinction from flash_firmware's side effects, but it is nearly complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters, including the same elf_path default the description repeats. The description adds no syntax, format, or precedence detail beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (loads) and resource (symbols from an ELF/AXF) with an explicit scope qualifier, 'WITHOUT flashing', that immediately distinguishes it from the sibling flash_firmware. An agent can identify exactly what this does versus the nearby flash/build tools.

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

Usage Guidelines5/5

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

Explains the triggering conditions ('after a fresh connect or recover_session you need this') and names the alternative ('or flash_firmware'). It also states the purpose of loading (so symbol breakpoints resolve), giving the agent clear selection logic.

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

loggingA

Firmware log capture over a channel. action=start(channel[,port,baudrate,command,args,file,timeout]) | stop(channel) | get(channel[,limit,since_index,clear]) | clear(channel). channel=rtt|swo|uart; uart takes port/baudrate, rtt/swo take command/args or file.

ParametersJSON Schema
NameRequiredDescriptionDefault
argsNortt/swo: command arguments.
fileNoswo: tail OpenOCD's ITM decode file (run setup_swo first) — no external decoder needed.
portNouart: serial port, e.g. COM3 or /dev/ttyUSB0.
clearNoClear returned entries after reading.
limitNoMax recent entries to return.
actionYesWhich operation to perform.
channelNoLog channel.
commandNortt/swo: executable to launch (rtt defaults to JLinkRTTClient).
sessionNoOptional debug-session name. Omit for the default target.
timeoutNouart: read timeout seconds (default 0.1).
baudrateNouart: baudrate (default 115200).
since_indexNoOnly entries with index greater than this.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, so the safety profile is partly covered. The description adds the channel-to-parameter mapping, but says nothing about whether start blocks, whether logs persist across sessions, what get returns, or that clear discards buffered entries — all relevant for a stateful multi-action tool.

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

Conciseness5/5

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

A single dense line that front-loads the purpose, then presents actions and the channel/parameter rules compactly with no filler. Every clause carries information; nothing is redundant with surrounding prose.

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

Completeness3/5

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

With 12 parameters, four mutating/side-effecting actions, and no output schema, the definition should say more about what get returns (entries with indices, per since_index) and what clear/stop do to ongoing capture. It covers the invocation surface but leaves the result and state-management behavior to inference.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description's channel-conditioned parameter grouping (port/baudrate for uart, command/args/file for rtt/swo) largely echoes what the schema property descriptions already say, adding little beyond orientation.

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

Purpose4/5

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

The description states a concrete verb and resource ('Firmware log capture over a channel') and then enumerates the four operations with their argument shapes, so an agent immediately knows this is a log-capture tool rather than a config or state tool. It does not explicitly contrast itself with nearby siblings such as setup_swo or capture_state, which keeps it from a 5.

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

Usage Guidelines3/5

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

The action grammar (start/stop/get/clear) implies the lifecycle, and the note that rtt/swo take command/args or file while uart takes port/baudrate hints at channel-dependent usage. However, there is no explicit statement of when to choose this tool over setup_swo, capture_state, or session_diagnostics, nor any prerequisites or exclusions.

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

mcp_infoA
Read-onlyIdempotent

Identifies THIS running stm32-gdb-mcp server: release version, git commit, the package directory the code was imported from (plus the install root the git probe used), whether compact mode is hiding tools, and how many tools this build advertises versus how many exist. Needs NO debug session, NO probe and NO target — call it the moment a tool you expect is missing or behaves like an older build, instead of guessing which checkout the client actually launched.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond them: it requires no session, no probe and no target, and it explains the compact-mode interaction that can hide tools. That is genuine value, though it does not describe return format or cost.

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

Conciseness5/5

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

One dense sentence that front-loads the identity payload before the 'no prerequisites' clause and the usage trigger. Every clause carries distinct information (what is returned, what is not needed, when to call it) with no filler.

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

Completeness4/5

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

No output schema exists, so the description is right to enumerate the returned fields, and it does so fairly exhaustively. For a single-optional-param read-only introspection tool this is close to complete; it omits nothing an agent needs to call it correctly, though return shape nuance (ordering, formats) is unstated.

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

Parameters3/5

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

Only one optional parameter with 100% schema description coverage, so the schema already documents the debug-session name and its omission default. The description's 'Needs NO debug session' adds a mild hint about the optional nature but no syntax or format detail beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource: it 'identifies THIS running stm32-gdb-mcp server' and then enumerates the exact facts returned (release version, git commit, package/install dir, compact mode state, tool counts). An agent immediately knows what it gets. It does not, however, name or distinguish itself from near-neighbors like self_check or tool_help.

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

Usage Guidelines4/5

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

Gives an explicit trigger ('call it the moment a tool you expect is missing or behaves like an older build') and frames the alternative to avoid ('guessing which checkout the client actually launched'). It also pre-clears prerequisites ('Needs NO debug session, NO probe and NO target'). It stops short of naming a sibling it should be preferred over, so no exclusion clause.

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

read_call_stackA
Read-onlyIdempotent

Reads the call stack as a decoded list of frames {level, func, file, line, addr} plus a one-line summary. Set include_raw=true to also get the raw GDB output.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
include_rawNoInclude the raw GDB transcript (default false).

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive behavior, so the safety profile is covered. The description adds genuinely useful context beyond that by spelling out the decoded return shape and the one-line summary, which matters since there is no output schema.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the core action and return shape, with the optional flag mentioned second. No wasted text.

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

Completeness4/5

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

For a read-only inspection tool with full annotation coverage and full schema coverage, the description supplies the return structure an agent needs in the absence of an output schema. Only the session parameter's role and sibling differentiation are left implicit.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented. The description only restates include_raw's effect (raw GDB output) and says nothing about the session parameter, so it adds little beyond the schema.

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

Purpose4/5

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

States a specific verb and resource ('Reads the call stack') and even characterizes the returned structure ({level, func, file, line, addr} plus a one-line summary). It does not distinguish itself from nearby siblings like analyze_stack or frame, which likely overlap.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this over analyze_stack, frame, or reconstruct_fault_context. The only conditional instruction ('Set include_raw=true...') is parameter usage, not tool selection.

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

read_freertosA
Read-onlyIdempotent

Reads FreeRTOS state by 'what': 'current_task' (pxCurrentTCB), 'tasks' (ready list: names/priorities/TCB/stack), 'task_lists' (ready/delayed/suspended/deleted), 'queue' or 'mutex' (needs handle = a Queue_t expression), or 'heap' (heap_4/5 usage).

ParametersJSON Schema
NameRequiredDescriptionDefault
whatYes
handleNoFor 'queue'/'mutex': GDB expression for the Queue_t pointer/handle.
sessionNoOptional debug-session name. Omit for the default target.
max_tasksNotasks/task_lists: max tasks to return.
max_prioritiesNotasks/task_lists: priority count override.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds real value beyond them by disclosing what each mode actually retrieves (TCB pointers, names/priorities/stack, heap_4/5 usage), which is not inferable from the annotations or schema.

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

Conciseness5/5

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

A single dense sentence with the primary verb and the mode enumeration front-loaded; every parenthetical clause maps to a real parameter value and none is filler. No wasted words.

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

Completeness4/5

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

With no output schema, the description carries the burden of explaining returns, and it does so for each mode. It omits only secondary details such as the exact output shape or how session/max_tasks/max_priorities interact with results, which the schema partially covers.

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

Parameters4/5

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

Schema coverage is 80% (baseline 3), and the description goes beyond the bare enum list by explaining the semantics of every 'what' value and restating that 'queue'/'mutex' require a Queue_t handle expression. It adds meaningful interpretation the enum alone does not provide.

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

Purpose5/5

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

States a specific verb (Reads) and resource (FreeRTOS state) and then enumerates exactly what each 'what' value yields, including internal structures like pxCurrentTCB and ready/delayed/suspended/deleted lists. An agent can distinguish this from siblings like detect_rtos or analyze_stack 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.

Usage Guidelines3/5

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

It gives conditional requirements (queue/mutex need a handle) and describes what each mode returns, but never states when to reach for this tool versus detect_rtos, analyze_stack, or read_variable. Usage is implied by the mode descriptions rather than explicitly scoped.

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

read_memoryA
Read-onlyIdempotent

Reads a block of memory from the target. Returns the raw bytes in memory order, plus value_le -- the same bytes as one little-endian value -- for a 1/2/4/8-byte read. Use value_le for a peripheral register: the raw string arrives least-significant-byte first, so reversing it by hand is where bit positions get misread.

ParametersJSON Schema
NameRequiredDescriptionDefault
lengthYesNumber of bytes to read.
addressYesHex address to read from, e.g., '0x20000000'.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds real value beyond them: it documents the return shape (raw bytes in memory order plus value_le), the little-endian byte ordering, and the rationale that hand-reversing leads to misread bit positions. That is useful behavioral/output context not present in the annotations.

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

Conciseness4/5

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

Three sentences, front-loaded with the core action, and no repetition of the schema. The third sentence is longer but earns its place by explaining the byte-ordering pitfall that motivates value_le.

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

Completeness5/5

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

There is no output schema, so the description carries the burden of explaining return values, and it does so clearly (raw bytes plus value_le, with little-endian semantics). For a simple read tool whose annotations already cover the safety profile, nothing essential for invoking it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the schema documents address, length, and session, making 3 the baseline. The description adds meaning tied to length by specifying the useful sizes (1/2/4/8 bytes) for which value_le is produced, which is semantic guidance absent from the schema itself.

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

Purpose4/5

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

Specific verb 'Reads' plus resource 'a block of memory from the target', and it goes further by describing what the call returns (raw bytes plus value_le). It does not, however, draw a line against adjacent siblings such as read_variable, read_registers, typed_memory, or read_peripheral_register, so the boundary is left to the agent to infer.

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

Usage Guidelines3/5

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

It gives one concrete usage instruction -- use value_le when the read targets a peripheral register -- which is clear context for interpreting the result. But there is no statement of when to choose read_memory over its many read-oriented siblings, and no prerequisites or exclusions, so the guidance is largely implied.

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

read_peripheral_registerA
Read-onlyIdempotent

Reads a peripheral register using its name from the loaded SVD.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
registerYesRegister name (e.g., 'ODR').
peripheralYesPeripheral name (e.g., 'GPIOA').

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered structurally. The description adds the SVD dependency as behavioral context but says nothing about failure behavior when the SVD is absent or the name is unknown, and nothing about the return format.

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

Conciseness5/5

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

A single front-loaded sentence with the action, resource, and lookup mechanism stated in order and zero filler. Nothing is superfluous.

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

Completeness4/5

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

For a simple read tool with full schema coverage and annotations covering the safety profile, the description is nearly sufficient. The only gap is that it does not indicate what a read yields (raw value vs decoded fields), which matters given there is no output schema.

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

Parameters3/5

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

Schema description coverage is 100% – every parameter (session, register, peripheral) is documented with examples ('ODR', 'GPIOA') including the optional session. The description adds no meaning beyond the schema; baseline 3 applies when the schema does all the work.

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

Purpose4/5

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

Clear specific verb+resource ('Reads a peripheral register') with a scope qualifier ('using its name from the loaded SVD') that distinguishes it from an address-based read. However, it does not differentiate itself from close siblings such as read_registers or decode_peripheral_register, which an agent must still disambiguate by schema inspection.

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

Usage Guidelines3/5

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

'From the loaded SVD' implies a prerequisite (an SVD must be loaded, cf. load_svd) and that lookup is by symbolic name, which is useful context. But there is no explicit when-to-use, when-not-to-use, or named alternative versus read_registers/decode_peripheral_register, so guidance is only implied.

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

read_registersB
Read-onlyIdempotent

Read CPU register groups. what=core([include_raw]) | fault | cycle([enable]). fault decodes CFSR/HFSR; cycle reads the DWT cycle counter.

ParametersJSON Schema
NameRequiredDescriptionDefault
whatYesWhich operation to perform.
enableNoIf true, enable and zero the counter before reading.
sessionNoOptional debug-session name. Omit for the default target.
include_rawNoInclude the raw GDB transcript (default false).

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive behavior, so the safety profile is covered. The description adds what the fault and cycle modes actually yield, but omits the notable side effect that enable=true enables and zeroes the counter (a state change on a tool marked idempotent) and says nothing about return shape.

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

Conciseness4/5

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

Two compact, front-loaded sentences with no filler. The terse bracket notation is dense but still parseable, and the leading sentence establishes scope before the mode breakdown.

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

Completeness3/5

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

For a 4-parameter tool with no output schema, the description covers the mode semantics adequately but leaves gaps: the behavior of enable (zeroing the counter), the meaning of session, and the shape of returned register data are not addressed. Annotations carry the safety story, so this is workable but incomplete.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description lightly annotates include_raw and enable within the mode shorthand but adds no syntax or semantics beyond what the oneOf schema already documents.

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

Purpose4/5

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

States a specific verb and resource ('Read CPU register groups') and enumerates the three selectable modes (core/fault/cycle), so an agent knows exactly what the tool does. It stops short of distinguishing itself from near-siblings like read_peripheral_register or diagnose_fault.

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

Usage Guidelines3/5

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

The mode listing implies when to pick fault ('decodes CFSR/HFSR') versus cycle ('reads the DWT cycle counter'), which is useful selection guidance. However, there is no explicit when-not or pointer to overlapping siblings such as diagnose_fault, which also handles fault analysis, so usage must be inferred.

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

read_variableA
Read-onlyIdempotent

Reads the value of a C variable currently in scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the variable to read.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is fully covered. The description's only added behavioral detail is the scoping requirement ('currently in scope'), which usefully implies the target must be halted/at a stop; it says nothing about failure modes such as optimized-out or out-of-scope variables.

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

Conciseness5/5

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

A single tight sentence with no filler, and the key qualifier ('currently in scope') is placed where it will be read. Nothing is padded or restated from the schema.

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

Completeness3/5

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

No output schema exists, so return-format explanation would be welcome but is absent; the tool is simple and annotations cover safety, so the description is adequate. It stops short of noting prerequisites (halted session, symbols loaded) or what happens when the variable cannot be resolved.

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

Parameters3/5

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

With 100% schema description coverage, both parameters ('name' and optional 'session') are already documented in the schema. The description adds no additional parameter meaning such as name syntax, fully-qualified paths, or session default behavior, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb and resource ('Reads the value of a C variable') plus a scope qualifier ('currently in scope'), so an agent knows exactly what it returns. It does not differentiate itself from closely related siblings like track_variable, inspect_symbol, or expressions, which an agent might otherwise confuse it with.

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

Usage Guidelines3/5

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

The phrase 'currently in scope' implicitly tells the agent the variable must exist at the current execution point, which is a real usage constraint. However, there is no explicit when-to-use/when-not guidance and no routing to alternatives such as track_variable for ongoing monitoring or expressions for computed values.

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

reconstruct_fault_contextA

Reconstructs the full crash site after a HardFault: decodes fault registers, unwinds the auto-stacked exception frame from MSP/PSP via EXC_RETURN to recover the true faulting PC, and resolves it to source file:line. Run this when halted in a fault handler.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare a non-read-only, non-idempotent, non-destructive, closed-world operation, and the description does not contradict that. It adds real behavioral context about the underlying method (MSP/PSP unwinding, EXC_RETURN handling), but it never explains why the tool is not read-only or what side effects/preconditions the non-idempotent hint implies.

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

Conciseness5/5

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

Two sentences, front-loaded with the core action and mechanism, and the second sentence delivers the invocation condition with zero filler. Every clause carries technical meaning about what the tool does or when to call it.

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

Completeness4/5

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

For a diagnostic tool with annotations present and no output schema, the description covers what it does, why it is non-trivial, and when to invoke it. It would be fully complete with the prerequisite (e.g., symbols loaded) and a note on how it relates to the fault-diagnosis siblings, but nothing essential is missing.

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

Parameters3/5

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

With a single parameter at 100% schema description coverage, the schema already fully documents 'session' (optional, default target). The description adds nothing about the parameter's meaning or format, so this sits at the baseline of 3 where structured data does the heavy lifting.

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

Purpose4/5

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

The description names a specific verb (reconstructs) and resource (the crash site after a HardFault) and details the mechanism: decoding fault registers, unwinding the auto-stacked exception frame from MSP/PSP via EXC_RETURN, and resolving to source file:line. This is far more specific than a tautology, but it never distinguishes itself from nearby siblings such as diagnose_fault, analyze_stack, or coredump, which an agent could plausibly confuse it with.

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

Usage Guidelines4/5

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

It gives an explicit trigger condition: 'Run this when halted in a fault handler,' which is exactly the state-dependent cue an agent needs. However, it names no alternatives or exclusions, so an agent halted in a fault has no guidance on when to prefer diagnose_fault or analyze_stack over this tool.

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

recover_sessionA

Recovers a dropped or wedged session: cleanly tears down the GDB client and server, then restarts the server (with retry/backoff for a busy probe) using the last start_debug_session arguments and reconnects. Use after a probe_unavailable or connection_lost error. When a programmable USB hub is configured (debug_profile hub.channel), a retry that cannot fix the probe escalates to toggling its USB data lines and then power-cycling the port -- the only in-band cure for a wedged endpoint. Any hub action taken is reported in recovery_steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
deepNoAdd a long (2 s) power-off rung to drain bulk capacitance.
sessionNoOptional debug-session name. Omit for the default target.
escalateNoAllow hub data-line/power escalation when a plain retry fails (default true).

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations (which only flag readOnly/destructive/idempotent false) by disclosing what gets torn down and restarted, retry/backoff behavior, hub data-line toggling and power-cycling escalation, and that hub actions are reported in recovery_steps. Rich operational context an agent could not get 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.

Conciseness4/5

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

Front-loaded with the core action, then the trigger, then the hub escalation, then the reporting note. Dense but every sentence carries information; only slightly verbose in the hub explanation.

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

Completeness4/5

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

For a complex recovery tool with no output schema, it covers trigger, mechanism, escalation, and result reporting. Annotations supply the safety profile, so remaining gaps are minor.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents deep, session, and escalate. The description explains the escalation concept but does not add parameter-specific syntax or format detail beyond the schema, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (recovers) and resource (session) and details the exact mechanism: tear down GDB client/server, restart server, reconnect. This clearly distinguishes it from siblings like close_session, stop_debug_session, or start_debug_session.

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

Usage Guidelines4/5

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

Explicitly gives the trigger condition: 'Use after a probe_unavailable or connection_lost error.' It also describes the escalation path when a hub is configured. It stops short of naming an alternative tool to use instead when recovery is not the right call.

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

render_frameworkA

Render the synthesized FrameworkPlan to a HAL C init skeleton (bsp_init.c + bsp_init.h). Every derived fact (clock enables, GPIO modes, mapped .Init fields) is concrete; every unresolved value is a clearly marked TODO — nothing is fabricated. Returns the files, their content, and a todo_count. Run design_framework first.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNoCode style (default 'hal').
sessionNoTarget session id (default 'default').

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations, the description discloses meaningful behavior: each unresolved value becomes a clearly marked TODO and 'nothing is fabricated,' and it names what is returned (files, content, todo_count). It does not clarify whether files are written to disk (annotations imply non-read-only) or describe error/permission conditions, so it is strong but 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.

Conciseness5/5

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

Three tight sentences, front-loaded with the core action and output, followed by the behavior guarantee (TODOs, no fabrication) and the prerequisite. No filler.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden and does so (files, content, todo_count), and it names the upstream dependency. It is nearly complete for this tool; only error/failure and disk-write behavior are left unspecified.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (style, session) are already documented with defaults in the schema. The description adds no parameter-level detail, so baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (Render) plus the exact resource and output artifacts: the synthesized FrameworkPlan turned into a HAL C init skeleton (bsp_init.c + bsp_init.h). An agent immediately knows what this produces and can distinguish it from design_framework (which builds the plan) and describe_framework.

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

Usage Guidelines4/5

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

Explicitly states the prerequisite: 'Run design_framework first.' This is clear context for when the tool is actionable, but it offers no alternatives or when-not-to-use conditions, so it stops short of full routing guidance.

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

report_issueA

Files a GitHub issue about an MCP problem from THIS session — auto-bundling the session journal, metrics, and MCP version into a structured report (via the gh CLI). Call this when a tool misbehaves or confuses you. Deduplicated per session so retries don't spam. Defaults to the stm32-gdb-mcp repo.

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoAgent/IDE + model, e.g. 'Cursor / deepseek-v4-pro'.
repoNoowner/repo to file under (default the MCP repo).
titleYesShort issue title, e.g. '[agent] start_debug_session ignores server_args'.
sessionNoOptional debug-session name. Omit for the default target.
descriptionYesWhat you were doing and what went wrong.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare a non-readOnly, open-world write with no idempotency. The description adds real behavioral context beyond that: it bundles journal/metrics/version automatically, is deduplicated per session so retries won't spam, and defaults to the stm32-gdb-mcp repo. It doesn't state auth/permission needs or what happens if gh is unavailable, 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.

Conciseness5/5

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

Four compact sentences, front-loaded with the core action and mechanism, then the trigger, then the dedup safeguard, then the default target. Every sentence earns its place with no filler.

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

Completeness4/5

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

With no output schema present, the description still conveys enough for correct invocation: what gets bundled, the dedup behavior, and the default repo. It leaves the return/confirmation behavior unstated, a minor gap for a write tool posting to an external service.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is already documented, making 3 the baseline. The description adds only marginal meaning beyond the schema (confirms the repo default and the session target), so no lift above baseline.

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

Purpose5/5

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

States a specific verb (Files) and resource (GitHub issue about MCP problems from this session), plus the key mechanics: auto-bundling the session journal, metrics, and MCP version via the gh CLI. An agent can distinguish this from export_debug_report or self_check 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.

Usage Guidelines4/5

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

Explicit trigger: "Call this when a tool misbehaves or confuses you." This gives clear context for use. It doesn't name alternatives (e.g., export_debug_report for a local export vs. filing upstream) or explicit when-not conditions, keeping it below a 5.

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

reset_targetA
Destructive

Resets the target device. Can optionally halt immediately after reset. strategy="cold" removes target power through a configured programmable USB hub before resetting, which is the only strategy that produces a true power-on reset (RCC_CSR POR flag, cleared .noinit, drained RAM); it fails rather than silently doing a warm reset when no hub channel is mapped. It needs no confirm argument -- asking for a cold reset by name IS the confirmation the hub guard wants -- and it stops the GDB session before the cut, then re-establishes it.

ParametersJSON Schema
NameRequiredDescriptionDefault
haltYesIf true, halts the CPU immediately after reset.
commandNoOptional custom GDB monitor reset command.
sessionNoOptional debug-session name. Omit for the default target.
strategyNoOptional reset strategy: default, under_reset, software, or cold (hub power cycle). "software" issues soft_reset_halt, which resets through the debug unit WITHOUT asserting SYSRESETREQ -- so RCC_CSR does not record it and its sticky reset flags do not move; use "default" when the reset must be visible there, e.g. when proving a cold boot by watching a sticky flag disappear. "under_reset" is currently an alias of "default". The result's `note` says which of these applied to the call you actually made.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, and the description goes well beyond them by disclosing that cold reset cuts power via a programmable hub, clears .noinit and RAM, stops the GDB session and then re-establishes it, and fails closed when no hub channel is mapped. The confirm-argument explanation (naming cold IS the confirmation the hub guard wants) is non-obvious behavioral context an agent could not derive 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.

Conciseness4/5

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

Purpose and optional halt are front-loaded in the first sentence, and the remaining content is dense with useful detail rather than filler. The second sentence is a long em-dash-and-parenthetical chain that is harder to parse than it needs to be, which costs it the top mark.

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

Completeness4/5

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

With no output schema, the description carries the return-value burden, and it partially meets it by hinting at failure behavior for cold reset. It is well covered for the cold path but says little about what a plain or software reset leaves behind on the target, which is the main remaining gap for a destructive mutation tool.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description nonetheless adds real meaning by explaining the semantics and preconditions of strategy="cold" and its distinct failure mode versus the other strategies. It stops short of covering the halt, command, or session parameters, so it does not fully round out parameter guidance.

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

Purpose4/5

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

The opening sentence gives a specific verb+resource ("Resets the target device") plus an optional behavior (halt after reset), so the action is unambiguous. However, it never differentiates itself from potentially confusable siblings such as recover_session, stop_debug_session, or halt_execution, leaving that discrimination to inference.

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

Usage Guidelines4/5

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

Substantive guidance is given for the cold strategy: when it is required (true power-on reset), what it guarantees (RCC_CSR POR flag, cleared .noinit, drained RAM), and how it fails (refuses rather than silently doing a warm reset with no hub channel). What is missing is any statement of when not to use the tool at all, or which alternative to pick for a simpler warm reset.

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

run_acceptanceA

Evaluate the loaded AcceptanceSpec against live silicon state and return a deterministic pass/fail/error verdict per check (the closed-loop judge). An unreadable target is reported as 'error', never a silent pass. A failing/errored check derived by synthesize_acceptance carries provenance.source — the init function + line that should satisfy it — so fixes are precision-guided. Run load_acceptance first; halt the target at the state you want to assert.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoTarget session id (default 'default').

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=false), the description discloses the error contract ('An unreadable target is reported as error, never a silent pass'), determinism of the verdict, and the provenance.source carried by failing/errored checks. These are non-obvious behavioral traits an agent needs before invoking it.

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

Conciseness4/5

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

Three sentences, front-loaded with the core action and output, then error semantics, then prerequisites. Dense but every sentence carries information; the parentheticals are compact rather than redundant.

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

Completeness5/5

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

No output schema exists, and the description adequately covers the return contract (per-check pass/fail/error verdict, provenance.source). Combined with the stated prerequisite (load_acceptance) and target-state requirement, an agent has enough to call it correctly.

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

Parameters3/5

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

Only one parameter (session) with 100% schema description coverage, so the schema already documents the default 'default' value. The description adds nothing about the session parameter, which is acceptable given full coverage but not additive; baseline 3.

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

Purpose5/5

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

States a specific verb (Evaluate) and resource (loaded AcceptanceSpec against live silicon state) with a concrete output shape (deterministic pass/fail/error verdict per check). It self-labels as 'the closed-loop judge', which distinguishes it from siblings like run_scenario, run_acceptance_iteration, and start_acceptance_loop.

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

Usage Guidelines4/5

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

Gives explicit prerequisites: 'Run load_acceptance first; halt the target at the state you want to assert.' This tells the agent the ordering and the required target state. It does not explicitly contrast itself with run_acceptance_iteration/start_acceptance_loop, so it falls short of naming the alternative condition.

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

run_acceptance_iterationA

Run one bounded loop iteration: (optional build) → (optional flash+run-to) → evaluate the AcceptanceSpec against live silicon, then record the verdict and return a decision (converged / should_continue / exhausted / stalled) plus the checks to fix. A build or run-to failure is recorded as a phase_error, not a crash. Refuses to run a terminal loop unless force=true. start_acceptance_loop first.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoRun even if the loop already converged/exhausted/stalled.
sessionNoTarget session id (default 'default').

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is largely covered. The description adds genuinely useful behavioral detail beyond that: failures are recorded as a phase_error rather than a crash, and a terminal loop is refused unless force=true. It does not cover rate limits or auth, but the mutation/iteration semantics are well disclosed.

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

Conciseness4/5

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

Front-loaded with the core action and the phase sequence, then the outcome/decision set, then the edge-case rules. It is dense but each clause carries actionable information; the parenthetical step notation is compact. Slightly clause-heavy, but no wasted sentences.

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

Completeness4/5

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

No output schema exists, but the description explains the return value (a decision among converged/should_continue/exhausted/stalled plus checks to fix), covering what would otherwise be missing. With annotations and full parameter coverage, an agent has enough to invoke it correctly, though the loop lifecycle around start_acceptance_loop/acceptance_loop_status could be tied together more explicitly.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters (force, session) are already documented in the schema. The description adds marginal meaning to force by tying it to the terminal-loop refusal, but offers nothing new for session. Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose5/5

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

States a precise verb and resource ('Run one bounded loop iteration') and enumerates the exact pipeline phases (build → flash+run-to → evaluate AcceptanceSpec). It distinguishes itself cleanly from siblings like run_acceptance and start_acceptance_loop by framing this as a single iteration within an existing loop.

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

Usage Guidelines4/5

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

Gives an explicit prerequisite ('start_acceptance_loop first') and the terminal-loop/force condition, which tells the agent when it is and isn't allowed to call. It stops short of naming alternative tools or explicitly stating when not to use it versus run_acceptance, so it is clear context without full exclusion guidance.

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

run_and_waitA

Resumes the target and waits, returning a structured stop event (reason, symbolized frame, breakpoint id, signal) or a timeout. Use this instead of continue_execution + polling to close the debug loop.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
timeout_secNoMax seconds to wait for a stop (default 10).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare this is a mutating control op (readOnlyHint=false) with no open-world or destructive side effects, lowering the bar. The description adds genuine value beyond annotations by disclosing the return shape (stop event fields) and the timeout outcome, and 'resumes the target' confirms the control action. It does not mention required session state or error modes.

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

Conciseness5/5

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

Two sentences, zero filler. The return contract is front-loaded and the usage directive follows, so the most decision-relevant information comes first.

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

Completeness4/5

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

With annotations covering the safety profile, a fully documented two-param schema, and no output schema, the description appropriately explains the returned stop event and timeout. It is nearly complete, lacking only prerequisites (e.g., an active paused session) to be fully self-sufficient.

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

Parameters3/5

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

Schema description coverage is 100% with two optional parameters, so the schema already documents 'session' and 'timeout_sec' (default 10). The description references the timeout outcome but adds no syntax or format detail beyond the schema; the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Resumes the target and waits') plus the return contract (structured stop event with reason, symbolized frame, breakpoint id, signal, or timeout). It also names the sibling it replaces ('continue_execution + polling'), so an agent can distinguish it from continue_execution, wait_for_stop, and run_to_line.

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

Usage Guidelines4/5

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

Explicitly routes the agent: 'Use this instead of continue_execution + polling to close the debug loop' names the alternative and the intent. It does not address when to prefer the other siblings (wait_for_stop, run_for_duration, debug_until) or when a plain resume is sufficient, so it falls short of full when/when-not coverage.

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

run_for_durationA

Runs the target freely for a wall-clock duration, halts it, and returns one structured report with final frame/context and optional expression captures. Useful for counters, telemetry buffers, polling loops, and timing-sensitive bus diagnostics without breakpoint perturbation.

ParametersJSON Schema
NameRequiredDescriptionDefault
thenNoAction after duration (default halt).
sampleNoBest-effort low-rate debugger polling while running; does not halt the target.
captureNo
sessionNoOptional debug-session name. Omit for the default target.
duration_secYesSeconds to let the target run freely.
resume_afterNoResume execution after capture (default false).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and idempotentHint=false, and the description adds genuine context beyond them: it halts the target, produces one structured report, distinguishes 'best-effort low-rate polling while running' from post-halt 'capture', and notes the no-breakpoint-perturbation behavior. It omits failure/partial-capture behavior, so it isn't 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.

Conciseness5/5

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

Two tight sentences that front-load the core behavior and then the use case. No filler; every clause contributes (duration run, halt, structured report, capture, usage contexts).

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

Completeness4/5

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

For a 6-param tool with nested objects and no output schema, the description usefully sketches the return value ('final frame/context and optional expression captures') and the run/halt/capture flow. It leaves the sampling/capture parameter interplay to the schema, which is reasonable but not exhaustive.

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

Parameters3/5

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

Schema coverage is 83%, so the schema already carries most parameter meaning. The description only references 'optional expression captures' and the structured report, adding little to the schema's own descriptions of capture, sample, resume_after, and session. Baseline 3 applies for high-coverage schemas.

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

Purpose5/5

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

States a precise verb+resource with full lifecycle: 'Runs the target freely for a wall-clock duration, halts it, and returns one structured report.' This clearly separates it from siblings like run_to_line, debug_until, run_and_wait, and continue_execution, since the duration-bounded free-run is the distinguishing scope.

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

Usage Guidelines4/5

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

Gives concrete usage contexts ('counters, telemetry buffers, polling loops, and timing-sensitive bus diagnostics') and a key selection rationale ('without breakpoint perturbation'). It does not, however, name when NOT to use it or point to specific alternatives such as run_and_wait or debug_until, 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.

run_pipelineA

Spec-to-silicon capstone (Pillar G): run the whole deterministic DESIGN half in one call. Chains the existing, individually verified tools in dependency order -- import_netlist? -> import_spec? -> design_framework -> solve_clock_tree? -> solve_timer? -> render_framework -> synthesize_acceptance -- turning a netlist plus a product spec into a flashable HAL skeleton and a machine-checked acceptance spec, then hands off to the build/verify loop. Optional stages (marked ?) run only when their input is present. Honest by construction: it GUESSES NOTHING -- it sequences verified tools and aggregates every stage's own unresolved/conflict gaps into one 'human decisions / data still needed' list. A required-stage hard error (no board, invalid input) stops with pipeline_status=blocked at that stage; expected gaps (an AF needing a pin DB, an unmodelled clock) surface as complete_with_unresolved; a clean run is complete. Operates on the session's board unless netlist= is supplied.

ParametersJSON Schema
NameRequiredDescriptionDefault
specNoProduct spec object to import and design from (import_spec).
styleNoRender style for the framework skeleton (default hal).
af_mapNoAlternate-function map for GPIO AF resolution {line_or_family: {port_pin: {'PERIPH_SIG': af}}}.
designNoPeripheral config overrides merged into the design {PERIPH: {..}}.
sourceNoClock source for solve_clock_tree (e.g. hse/hsi).
db_pathNoPath to a pin-capability DB for AF resolution (else STM32_GDB_MCP_PIN_DB).
irq_mapNoIRQ-number map for NVIC acceptance checks {line_or_family: {irq_name: number}}.
netlistNoNetlist to import first: {path|text, format?}. Omit to use the board already in this session.
sessionNoOptional debug-session name. Omit for the default target.
gpio_mapNoGPIO base-address map for pin acceptance checks {line_or_family: {port_letter: base_address}}.
source_hzNoClock source frequency in Hz for solve_clock_tree.
sysclk_hzNoTarget SYSCLK in Hz; presence enables the solve_clock_tree stage.
need_48mhzNoRequire a 48 MHz domain (USB/SDMMC) in the clock solve.
stopped_atNoSymbol the acceptance spec should assert the core halts at.
synthesizeNoSet false to stop after render_framework and skip acceptance synthesis (default true).
register_mapNoClock-enable register map for acceptance placement {line_or_family: {clock: {address, bit}}}.
acceptance_nameNoName for the derived acceptance spec.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only cover safety flags (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds substantial behavior beyond them: the status outcomes (pipeline_status=blocked, complete_with_unresolved, complete), the error-vs-gap distinction, and the guarantee that it 'GUESSES NOTHING' and aggregates unresolved gaps into one human-decision list.

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

Conciseness4/5

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

Purpose and the chained-tool sequence are front-loaded, and every sentence carries operational content. It is dense rather than padded, though the 'Honest by construction' framing is slightly rhetorical and the run is long for a single description.

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

Completeness5/5

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

For a 17-parameter, no-output-schema capstone tool, the description supplies what is otherwise missing: the stage order, the fallback behavior of netlist=, and the terminal status values an agent must interpret. Nothing critical to invoking or reading results is absent.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description adds conditional semantics by explaining that optional stages ('?') run only when their input is present and that omitting netlist= falls back to the session board. It does not go further into per-parameter interaction, so it sits just above baseline.

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

Purpose5/5

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

The description states a specific verb and resource ('run the whole deterministic DESIGN half in one call') and explicitly enumerates the chained stages, so an agent can distinguish it from the individually-verified siblings (import_netlist, design_framework, render_framework, synthesize_acceptance). It also names the output ('a flashable HAL skeleton and a machine-checked acceptance spec').

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

Usage Guidelines4/5

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

It gives clear context for when to use this over the individual tools ('run the whole deterministic DESIGN half in one call') and explains that optional stages run only when their input is present, plus the netlist= override for the session board. It stops short of explicitly naming when NOT to use it (e.g., when you only need one stage).

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

run_scenarioA
Destructive

Replays a declarative scenario — a list of {tool, args} steps — deterministically and returns a per-step pass/fail report. Provide inline 'steps' or a 'path' to a JSON scenario file. The minimal-step way to re-run a complex bug repro.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoPath to a JSON scenario file (alternative to inline steps).
stepsNoOrdered steps, each {tool, args}.
sessionNoOptional debug-session name. Omit for the default target.
stop_on_failureNoStop at the first failing step (default true).

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructive/openWorld/non-idempotent, so the safety profile is covered. The description adds genuinely new context: deterministic replay semantics and the fact that it returns a per-step pass/fail report, which matters because no output schema exists. It does not warn that composed steps may carry arbitrary side effects, but the destructiveHint covers that baseline.

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

Conciseness4/5

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

Three tight sentences: purpose/return value first, input options second, use case last. Front-loaded and nearly waste-free, with only the slight redundancy of restating the inline-steps-or-path choice already in the schema.

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

Completeness4/5

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

With no output schema, the description correctly takes on describing the return value (per-step pass/fail report). Input forms and intended use are covered. Missing only edge behavior such as what happens on failure beyond the stop_on_failure schema note, or how scenarios compose with the current session.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters (path, steps, session, stop_on_failure) are already documented in the schema. The description only restates that steps are {tool, args} and that path is an alternative, adding no syntax or format detail beyond the schema. Baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb and resource: replays a declarative scenario of {tool, args} steps and returns a per-step pass/fail report. The scope is concrete and an agent can picture the operation. However, it never distinguishes itself from sibling multi-step runners such as batch, run_pipeline, or run_acceptance, 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.

Usage Guidelines4/5

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

"The minimal-step way to re-run a complex bug repro" gives a clear when-to-use context. There are no exclusions or named alternatives (e.g. run_pipeline, batch), which keeps it from a 5, but the intended use case is explicit rather than merely implied.

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

run_to_lineB

Runs until a given location is reached (function, 'file.c:42', or '*0xADDR').

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
locationYesWhere to run to.

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already disclose that this is not read-only, not idempotent, and not destructive. The description adds that the operation runs until a target location is reached, which indicates blocking execution-control behavior. However, it omits important behavioral details such as timeout behavior, what happens if the location is never reached, and whether an active debug session is required.

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

Conciseness5/5

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

The description is a single front-loaded sentence with no wasted words. It immediately states the core behavior and examples of valid location syntax.

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

Completeness3/5

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

For a debug execution-control tool with annotations covering safety and a fully described schema, the definition is minimally viable. It still lacks usage differentiation from sibling tools and behavioral details such as timeout or failure behavior, but the safety-relevant traits are covered by annotations.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaningful syntax examples for the required location parameter: a function, 'file.c:42', or '*0xADDR'. The optional session parameter is documented only in the schema, but the location guidance provides useful extra semantics.

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

Purpose4/5

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

The description states a specific execution-control action: run until a given location is reached. It also clarifies acceptable location formats such as a function name, file.c:42, or *0xADDR. It does not explicitly distinguish itself from close siblings like debug_until, run_and_wait, or continue_execution.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to use this tool instead of alternatives such as step, continue_execution, run_and_wait, or debug_until. The intended context is implied by the tool name and description, but no conditions, exclusions, or prerequisites are stated.

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

sample_pcA

Statistical PC profiler: enables DWT and samples the program counter while the core RUNS (non-intrusive, over SWD — no SWO pin or firmware change). Returns a symbolized hot-spot histogram (top functions by %), not raw hex — the fast way to find where firmware spends time or what loop it is stuck in. A high 'unsampleable' count means the core is halted/asleep; a high 'zero_samples' count means nothing was profiled at all. Leave enable=true: GDB cannot write the enable bit while the core runs, so this halts briefly to set it and resumes, and only when it is not already set. Note some links cannot serve memory reads while the core runs at all (measured: OpenOCD + ST-Link + STM32L1) — there PC sampling is unavailable and the result says so rather than inventing a hot spot.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of samples (default 128; more = better statistics, slower).
enableNoEnable DWT trace before sampling (default true). With false, a target whose trace unit is off yields nothing.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare the safety flags; the description adds the behaviors that matter: brief halt to set the DWT enable bit, non-intrusive SWD sampling with no SWO pin or firmware change, interpretation of 'unsampleable' vs 'zero_samples' results, and a documented link limitation where it reports unavailability instead of fabricating samples.

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

Conciseness4/5

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

Dense and front-loaded: purpose, return format, and diagnostic interpretation come first, then the enable guidance and edge-case caveat. It is long for a 3-param tool, but each sentence carries distinct operational information rather than filler.

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

Completeness5/5

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

There is no output schema, so the description carries the return-value burden and does so: it names the symbolized hot-spot histogram, explains the diagnostic counters, and describes the failure mode. For a complex sampling tool with unusual failure states, 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning for 'enable' — that GDB cannot write the enable bit while the core runs, so it halts briefly and only when the bit is not already set. That is semantics beyond the schema text, though 'count' and 'session' add nothing new.

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

Purpose5/5

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

States a specific verb+resource ('Statistical PC profiler … samples the program counter while the core RUNS') and immediately names its distinguishing output ('symbolized hot-spot histogram … not raw hex'). An agent can tell this apart from halt-based siblings like read_call_stack or halt_execution 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.

Usage Guidelines4/5

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

Gives clear context for when to reach for it ('the fast way to find where firmware spends time or what loop it is stuck in') and conditions that make it unusable (links that cannot serve memory reads while running). It stops short of explicitly naming the alternative profiling/halt tools it replaces, so it is clear 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.

self_checkA

Validates the link right after connecting: reads CPUID and DBGMCU IDCODE and checks byte order, that a real Cortex-M is present, and that the device matches the expected family (from the profile MCU or the 'expected_family' arg). Run this first to catch endianness/config faults before debugging. Halts the core first (identity reads are unreliable while running); pass halt=false to skip.

ParametersJSON Schema
NameRequiredDescriptionDefault
haltNoHalt the core before reading (default true).
sessionNoOptional debug-session name. Omit for the default target.
expected_familyNoExpected MCU/family, e.g. 'STM32L431'. Defaults to the profile MCU.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only carry generic safety hints, yet the description discloses concrete behavior: it halts the core first and explains why (identity reads are unreliable while running), plus the halt=false escape hatch. This is meaningful state-mutating context that explains the readOnlyHint=false flag; only the failure/return behavior is left unstated.

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

Conciseness4/5

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

Front-loads the purpose, then the run-first guidance, then the halt caveat in a logical order with no filler. The single dense paragraph is slightly heavy but every clause carries information.

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

Completeness4/5

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

With no output schema, the description still covers what is validated and the core-halting side effect, which is sufficient to call it correctly. It does not describe what a failure report looks like, a minor gap for a diagnostic tool.

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

Parameters3/5

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

Schema description coverage is 100%, so both the halt default and the expected_family/profile-MCU default are already documented. The description largely restates these ("from the profile MCU or the 'expected_family' arg", "pass halt=false"), adding little beyond the schema; baseline 3 applies.

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

Purpose5/5

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

Names a specific verb (validates) and precisely enumerates what is checked: CPUID, DBGMCU IDCODE, byte order, Cortex-M presence, and family match. An agent can immediately distinguish this identity/link sanity check from siblings like diagnose_fault, session_diagnostics, or validate_board.

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

Usage Guidelines4/5

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

"Run this first to catch endianness/config faults before debugging" gives explicit ordering and intent. It stops short of naming a competing sibling or stating when NOT to use it, but the context for invocation is unambiguous.

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

session_diagnosticsB

Session/transport diagnostics. what=health([reconnect]) | events | server_logs. events returns recent GDB/MI records; server_logs returns the GDB server's stderr.

ParametersJSON Schema
NameRequiredDescriptionDefault
whatYesWhich operation to perform.
sessionNoOptional debug-session name. Omit for the default target.
reconnectNoIf true, try to reconnect the GDB client to the running server.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so safety is partially covered. Beyond that the description does add useful context by disclosing what 'events' (recent GDB/MI records) and 'server_logs' (GDB server stderr) return, but it never explains the 'health' operation or the side effect of reconnect.

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

Conciseness4/5

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

Front-loaded with the domain, then a compact enumeration, with two sentences of return-value context. Very little waste, though the 'what=health([reconnect]) | events | server_logs' notation is densely cryptic to parse.

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

Completeness3/5

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

With no output schema, the description is expected to convey return values; it covers events and server_logs but leaves the health result unexplained. For a 3-operation oneOf tool with 100% schema coverage, this is adequate but with a clear gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds a small amount by binding '[reconnect]' to the health operation, a linkage the oneOf branches don't encode, but it adds no format or semantic detail beyond the schema.

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

Purpose4/5

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

States the domain ('Session/transport diagnostics') and enumerates its three concrete operations (health, events, server_logs), so the resource and scope are evident. It doesn't explicitly contrast itself with nearby siblings like get_session or self_check, keeping it from a 5.

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

Usage Guidelines2/5

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

There is no when-to-use / when-not guidance and no named alternative. The reader can infer that the three 'what' values are selectable operations, but nothing tells them when diagnostics is the right tool versus get_session or self_check.

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

set_adapter_speedA
Destructive

Sets the SWD/JTAG adapter clock (kHz) at runtime. The default ST-Link speed is only ~480 kHz; raising it (e.g. 4000) speeds up flashing and memory reads ~8x. Lower it if reads/flash become unreliable.

ParametersJSON Schema
NameRequiredDescriptionDefault
khzYesAdapter clock in kHz, e.g. 4000.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A4.2/5.0
Behavior4/5

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

Goes meaningfully beyond the annotations by disclosing the default ST-Link speed (~480 kHz), the expected ~8x throughput gain, and the failure condition that should trigger a reduction. It does not explain persistence (session-scoped vs. global) or why the tool carries destructiveHint=true, leaving the flagged destructiveness unexplained.

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

Conciseness5/5

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

Three tight sentences with the action front-loaded and the performance/risk trade-off following. No filler; every sentence carries information an agent can act on.

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

Completeness4/5

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

For a two-parameter config tool with annotations covering the mutation profile and no output schema, the description supplies enough context to call it correctly. The only material omission is whether the setting persists across sessions or only affects the current target.

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

Parameters3/5

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

Schema description coverage is 100% — both khz and session are documented in the schema, including the 'e.g. 4000' example. The description reinforces the practical meaning of khz but adds no syntax or format detail beyond the schema, and never mentions the session parameter, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource — 'Sets the SWD/JTAG adapter clock (kHz) at runtime' — with units and mechanism. No sibling tool changes adapter clock speed, so it is trivially distinguishable from the rest of the list.

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

Usage Guidelines4/5

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

Gives concrete when-to guidance in both directions: raise it (e.g. 4000) to speed flashing and memory reads, lower it if reads/flash become unreliable. It stops short of naming prerequisites or the alternative of leaving the default, but the tuning context is clear.

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

setup_swoA
Destructive

One-call SWO/ITM printf setup. Configures the target's TPIU+ITM from the debugger (no firmware ITM-init needed) for the given core clock (hclk_hz) and SWO baud, and returns the OpenOCD capture commands + the firmware printf retarget snippet. Then capture with logging(action=start, channel='swo', file=). Requires the SWO pin (e.g. PB3) wired to the probe.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoITM stimulus port for printf (default 0).
outputNoOpenOCD ITM decode output file to tail (default 'swo_itm.log').
swo_hzNoDesired SWO baud (default 2000000; ST-Link V2 max ~2 MHz).
hclk_hzYesCore clock (HCLK) in Hz, e.g. 80000000 for an L4 at 80 MHz.
sessionNoOptional debug-session name. Omit for the default target.
tpiu_nameNoOpenOCD tpiu object name if not the default '$_CHIPNAME.tpiu'.
apply_openocdNoAlso run the OpenOCD capture commands via monitor now (default false).

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false, so the safety profile is covered. The description still adds genuine context beyond the schema: no firmware ITM-init is required, it exercises the debugger, it returns OpenOCD capture commands plus a printf retarget snippet, and it needs hardware wiring. It does not explain the destructive aspect in words, which keeps it from 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.

Conciseness5/5

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

Front-loaded with the one-line purpose, followed by the essential mechanics, the next-step routing, and the hardware prerequisite. Every sentence carries distinct information with no filler.

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

Completeness4/5

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

With no output schema, the description steps in to say what is returned (capture commands and firmware snippet), plus the workflow and prerequisite. That covers an agent's needs to call and chain it correctly; only a note on side effects on target state is missing.

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

Parameters3/5

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

Schema coverage is 100%, so all seven parameters are already documented in the schema. The description references hclk_hz and SWO baud but adds no format or constraint detail beyond what the schema provides, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb+resource immediately: 'One-call SWO/ITM printf setup.' It names exactly what is configured (target's TPIU+ITM from the debugger) and the inputs that drive it (hclk_hz, SWO baud), distinguishing it from generic setup or logging siblings.

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

Usage Guidelines4/5

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

Gives explicit usage routing: 'Then capture with logging(action=start, channel="swo", file=<output>)' names the follow-on tool and params, and it states the prerequisite (SWO pin wired to probe). It lacks an explicit 'do not use when' clause, so not a full 5.

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

snapshotB
Read-onlyIdempotent

One-shot diagnostic snapshot. scope=full([include_project,include_rtos,include_logs,log_limit,project_root]) | rtos. full bundles registers+stack+faults; rtos captures task/queue state.

ParametersJSON Schema
NameRequiredDescriptionDefault
scopeYesWhich operation to perform.
sessionNoOptional debug-session name. Omit for the default target.
log_limitNoMaximum number of RTT log entries to include.
include_logsNoInclude captured RTT logs.
include_rtosNoInclude FreeRTOS runtime context.
project_rootNoOptional project root for discovery.
include_projectNoInclude project discovery context.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety burden is lifted. The description adds that it is 'one-shot' and what each scope captures, but says nothing about session targeting, cost, or what the capture returns. Moderate additive context.

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

Conciseness4/5

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

Purpose is front-loaded in four words and the rest is dense with no filler. The telegraphic 'scope=full([...]) | rtos' notation is compact but slightly cryptic on first read.

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

Completeness3/5

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

For a 7-parameter diagnostic tool with no output schema, the definition explains the scopes but leaves the return shape, the session parameter, and how the capture interacts with active sessions unexplained. Usable, but not fully self-contained.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The parenthetical correctly associates include_project/include_rtos/include_logs/log_limit/project_root with the full scope, which adds a little ordering meaning, but it never mentions the session parameter and gives no format or default details.

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

Purpose4/5

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

States a specific action (one-shot diagnostic snapshot) and enumerates the two scopes with what each collects (registers+stack+faults vs task/queue state). It does not distinguish itself from near-siblings like capture_state or session_diagnostics, which is the only thing keeping it off a 5.

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

Usage Guidelines3/5

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

The scope semantics ('full bundles registers+stack+faults; rtos captures task/queue state') imply which mode to pick, but there is no explicit when-to-use/when-not guidance and no mention of the alternative snapshot-style siblings. Adequate implied usage only.

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

solve_clock_treeA

Synthesize a concrete SystemClock_Config() for the session's FrameworkPlan (Pillar D Tier 3) - the last hand-written gap in generated init code. Given a clock source (HSE + crystal Hz, or HSI) and a target SYSCLK, it computes the exact PLL dividers (M/N/P or R, Q for 48 MHz USB), AHB/APB bus prescalers, and flash wait-states via pure datasheet math, then stores the result so the next render_framework emits real clock code instead of a TODO stub. Deterministic and honest: an unmodelled device or an infeasible target is surfaced, never guessed. Built-in profiles: STM32F401/F407/F411 and mainstream L4 (<=80 MHz); pass an explicit profile for others. Run design_framework first.

ParametersJSON Schema
NameRequiredDescriptionDefault
loadNoStore the solution into the plan so render_framework uses it (default true).
sourceNoClock source: 'HSE' or 'HSI' (default 'HSI').
profileNoOptional explicit device profile; overrides the built-in table.
sessionNoTarget session id (default 'default').
source_hzNoHSE crystal frequency in Hz (required when source=HSE).
sysclk_hzNoTarget SYSCLK in Hz (e.g. 168000000).
need_48mhzNoRequire an exact 48 MHz PLL output for USB/SDIO/RNG (default false).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark this as a non-read-only, non-idempotent write, and the description adds real context beyond them: the result is stored into the plan unless load=false, the math is 'pure datasheet math', and infeasible or unmodelled targets are surfaced rather than guessed. It never contradicts the annotations. The only gap is that the shape of a 'surfaced' failure is not described, which matters since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded paragraph that starts with the verb and the produced artifact, with zero bare filler. It is dense and carries some flavor phrasing ('the last hand-written gap in generated init code', 'Pillar D Tier 3') that slightly inflates length without adding invocation guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with no output schema, the description covers workflow position, scope limits, determinism guarantees, and the side effect of storing into the plan. Return-value semantics are only implied ('is surfaced'), which is the main remaining hole given the absent output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is already 100%, so the baseline is 3; the description goes further by tying parameters together, explaining that HSE requires a crystal Hz value, that a 48 MHz target drives the R/Q branch, and what 'profile' overrides (the built-in device table). It adds cross-parameter meaning rather than restating field docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and artifact: 'Synthesize a concrete SystemClock_Config()' for the session's FrameworkPlan, and spells out exactly what gets computed (PLL M/N/P or R/Q, AHB/APB prescalers, flash wait-states). This clearly distinguishes it from siblings like design_framework and solve_timer without needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the prerequisite ('Run design_framework first') and the follow-on consumer ('the next render_framework emits real clock code'), plus the scope boundary that built-ins cover F401/F407/F411 and mainstream L4 <=80 MHz with an explicit profile needed otherwise. There is no explicit statement of when NOT to use it, so it falls just short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

solve_timerA

Solve a timer's Prescaler/Period (PSC/ARR) for a target update frequency (Pillar D Tier 3). Turns intent ('TIM3 at 1 kHz') into concrete register values using the timer input clock (TIMxCLK) derived from the solved clock tree. Record a target via design_framework(design={'TIM3': {'update_hz': 1000}}) then run solve_clock_tree first, or pass timer_clock_hz directly for a what-if. Deterministic and honest: an exact target yields zero-error PSC/ARR, an inexact one yields the closest pair plus the achieved frequency and ppm error, and an unrepresentable target or an unknown timer bus is surfaced, never guessed. Injects the result into the plan so render_framework emits concrete values instead of a TODO.

ParametersJSON Schema
NameRequiredDescriptionDefault
busNoOverride the timer's APB bus: 'apb1' or 'apb2'.
loadNoPersist the solved PSC/ARR into the plan (default true).
timerNoTimer to solve, e.g. 'TIM3'. Omit to solve every timer that has a recorded target.
sessionNoTarget session id (default 'default').
arr_bitsNoARR width override: 16 or 32 (for 32-bit timers TIM2/TIM5).
target_hzNoTarget update frequency in Hz; overrides the recorded design target (requires timer).
timer_clock_hzNoExplicit TIMxCLK in Hz; bypasses the clock-solution + bus derivation (pure what-if).

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly=false), it discloses that the tool injects results into the plan (a mutation), how it handles exact/inexact/unrepresentable targets, and that unknown timers are surfaced rather than guessed. This is rich, non-obvious behavioral context that the structured fields do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then workflow and behavior. Mostly earns its space, though minor jargon ('Pillar D Tier 3') adds little. Slightly dense but well-organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does so: it explains the result shape (zero-error PSC/ARR, closest pair with achieved frequency and ppm error) and the downstream effect on render_framework. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already documented (baseline 3). The description adds the relationship between parameters, describing timer_clock_hz as a what-if bypass of clock derivation and target_hz as an override path, which sharpens usage beyond the schema text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Solve a timer's Prescaler/Period'), names the exact intent-to-registers transformation, and clearly distinguishes itself from siblings solve_clock_tree and design_framework. An agent can tell immediately what this produces.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit sequencing: record a target via design_framework, run solve_clock_tree first, or pass timer_clock_hz directly for a what-if. This routes the agent between prerequisites and an alternative path with no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_acceptance_loopA

Start a bounded spec-to-silicon acceptance loop (Pillar C) for the loaded AcceptanceSpec. Each run_acceptance_iteration does one build → flash → run-to-state → run_acceptance pass; the loop stops on convergence, on max_iterations, or on a stall (same checks failing repeatedly). Omit build/flash to run evaluate-only iterations (you flash manually). Load a spec first.

ParametersJSON Schema
NameRequiredDescriptionDefault
buildNoOptional build_firmware config {kind, project|build_dir|directory, target, config, rebuild, command, cwd}.
flashNoOptional flash+run config {file_path, run_to (default 'main'), timeout_sec}.
sessionNoTarget session id (default 'default').
max_iterationsNoHard bound on iterations (default 10).
stall_patienceNoStop if the same checks fail this many times in a row (default 3).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply the safety profile (non-readonly, non-idempotent, non-destructive). The description adds real behavioral context beyond them: the three termination conditions (convergence, max_iterations, stall), what a stall means ('same checks failing repeatedly'), and the evaluate-only variant. It omits how to observe an in-flight loop or what the run emits, but this is strong disclosure for the core mechanics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, purpose and scope front-loaded, then loop mechanics, then the optional-stage variant. No filler; every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex, multi-object, no-output-schema tool with annotations covering safety, the description is nearly complete: it explains the loop, its stopping rules, the evaluate-only mode, and the spec prerequisite. It could go one step further by pointing to acceptance_loop_status for monitoring a running loop, but nothing required 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns above-baseline credit by explaining the semantic effect of omitting build/flash (evaluate-only, manual flash) rather than just restating them. max_iterations and stall_patience semantics are left to the schema, where they are already documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Start a bounded spec-to-silicon acceptance loop') and scopes it to the loaded AcceptanceSpec. It distinguishes itself from siblings by explaining that each iteration is a composition of build/flash/run-to-state/run_acceptance via run_acceptance_iteration, which no other sibling combines into a loop.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear when-to-use context: run it against a loaded spec, and the explicit prerequisite 'Load a spec first.' It also documents a meaningful usage mode ('Omit build/flash to run evaluate-only iterations'). It stops short of naming the monitoring/alternative siblings (acceptance_loop_status) that an agent might reach for instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_debug_sessionA

Starts the specified GDB Server (openocd, stlink, jlink) and connects the GDB Client to it. openocd REQUIRES server_args naming the probe and target, e.g. ['-f','interface/stlink.cfg','-f','target/stm32l4x.cfg'] — without them OpenOCD cannot find a config or adapter. Omitted values come from the active debug profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
probeNoOptional OpenOCD probe type: stlink, jlink, or cmsis-dap. Falls back to the profile, then a unique detected probe.
serialNoProbe/ST-Link serial to select a specific board (for concurrent multi-target). Auto-added as 'adapter serial <serial>'.
sessionNoOptional debug-session name. Omit for the default target.
speed_khzNoOpenOCD adapter clock used when server_args are inferred (default 4000).
hub_channelNoTake the probe on this hub channel, using the usb_location recorded for it in the profile's hub.map. Falls back to hub.channel, then to the map entry whose label matches this session's name.
server_argsNoOptional args for the server e.g. ['-f', 'interface/stlink.cfg', '-f', 'target/stm32f4x.cfg']
server_typeNoType of debug server backend.
usb_locationNoSelect the probe by physical USB position, e.g. '1-1.4'. This is how to pick one of several probes that report NO serial number (most clone ST-Links), and unlike hub isolation it disconnects nobody -- two sessions can debug two boards at once. Added as 'adapter usb location <value>'. Usually you want hub_channel instead, which looks this up.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the non-read-only, non-idempotent, non-destructive profile, so the bar is lower; the description still adds value by disclosing a concrete failure mode (OpenOCD without server_args) and the fallback chain to the active profile. It does not say what happens to an already-running server/session, whether a process is spawned, or how failures surface, so it falls short of full disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first clause, followed by the one constraint an agent will most likely trip over and a formatting example. Three sentences, no restatement of the name and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter, zero-required session-start tool with no output schema, the description covers the essential call-shaping information (backend choice, mandatory openocd args, profile fallbacks). It leaves unclear the interaction with stop_debug_session/close_session and whether a prior session must be closed first, which is the main remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning beyond it: it flags that server_args are mandatory for openocd (the schema calls them merely 'optional'), names the required -f interface/target form, and explains that unspecified parameters are resolved from the active debug profile.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Gives a specific verb (starts) plus two concrete resources (the GDB server and the GDB client connection) and enumerates the supported backends (openocd, stlink, jlink). An agent immediately knows what the tool does, though it never names a sibling such as stop_debug_session or detect_probe to disambiguate the session lifecycle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies a real precondition — OpenOCD cannot run without server_args naming probe and target, with a concrete example — and notes that omitted values fall back to the active debug profile. However, it gives no guidance on when to prefer this over adjacent tools (suggest_server_args, detect_probe, hub, recover_session); usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stepA

Single-steps the target: kind='over' (over the line), 'into' (into calls), 'out' (run until the function returns), or 'instruction' (one machine instruction; set over=true to step over a call).

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoStep kind (default 'over').
overNoFor kind='instruction', step over a called function.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the mutation/safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), lowering the bar. The description adds the semantics of each step mode, which is genuine behavioral content, but does not state prerequisites (an active session must exist) or what happens on failure. Adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the verb, packing all four mode definitions without waste. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a step tool with full schema coverage, complete annotations, and no output schema, the description covers the mode space well. Minor gaps remain around session prerequisites and post-step state, but nothing critical for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real value the schema lacks: it documents each enum value of kind ('over', 'into', 'out', 'instruction') and explains the interaction of over=true with kind='instruction', which the schema's terse per-field descriptions do not cover.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Single-steps the target') and enumerates all four step kinds with their semantics. An agent immediately understands the operation. It does not name sibling alternatives like run_to_line, continue_execution, or debug_until, so it misses the top-tier sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The per-mode glosses ('into calls', 'run until the function returns') imply when each kind is appropriate, which gives usable context. But there is no explicit when-to-use-this vs alternatives guidance, e.g. versus run_to_line or debug_until. Usage is inferable rather than declared.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_debug_sessionB

Stops the GDB client/server, variable tracking, and all active RTT/SWO/UART readers.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower; the description goes further by naming exactly which subsystems are terminated (GDB client/server, variable tracking, all active RTT/SWO/UART readers). This is useful context beyond the annotations, though it sits in mild tension with destructiveHint=false since live streams are being torn down.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tightly written sentence with the action verb front-loaded and no redundant filler. It is efficient, though the trailing enumeration makes it slightly list-like rather than fully structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-required-param tool with annotations and no output schema, the description is adequate about what gets stopped, but it omits post-stop state (are sessions cleared or recoverable?), whether it acts on a named session vs default, and how it relates to close_session/recover_session.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single optional 'session' parameter is already documented as omitting to the default target. The description adds no additional parameter semantics, so the baseline 3 for a fully-covered schema is correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Stops") plus the resource ("debug session") and enumerates the concrete components torn down (GDB client/server, variable tracking, RTT/SWO/UART readers). That makes the operation's scope clear, but it does not differentiate itself from the sibling close_session, which appears to be an overlapping teardown concept.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is given, and the prominent sibling close_session is never mentioned, so an agent cannot tell which teardown tool applies to its situation. Only an implicit 'clean up after debugging' reading is available.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_server_argsA
Read-onlyIdempotent

Returns the correct OpenOCD server_args for an MCU family + probe (e.g. STM32L431 + stlink -> ['-f','interface/stlink.cfg','-f','target/stm32l4x.cfg']) and validates the config files exist in OpenOCD's bundled scripts dir. Call this to get start_debug_session args — do NOT search the disk for .cfg files.

ParametersJSON Schema
NameRequiredDescriptionDefault
mcuYesMCU or family, e.g. 'STM32L431' or 'STM32F4'.
probeNoOptional. Debug probe: stlink, jlink, or cmsis-dap. If omitted, uses debug profile probe.
sessionNoOptional debug-session name. Omit for the default target.
speed_khzNoAdapter clock in kHz (default 4000; 0 keeps the config default).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds real behavioral context beyond that: it validates that the referenced .cfg files exist in OpenOCD's bundled scripts dir, implying a possible failure mode, and shows the exact arg vector returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences: the capability and its example come first, the routing instruction second. No filler, and the most actionable line (call this, don't scan disk) is kept intact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully previews the return shape via example args and notes validation of config files. It is nearly complete, though it doesn't say what happens when validation fails or when the MCU/probe pair is unsupported.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and each parameter already has a description, so the baseline is 3. The worked example ('STM32L431 + stlink -> [...]') loosely illustrates how mcu and probe combine, but adds no syntax or default detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (returns OpenOCD server_args for an MCU family + probe) and illustrates it with a concrete input/output example. It also names its downstream consumer (start_debug_session args), which separates it from siblings like detect_probe or describe_board.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit call condition ('Call this to get start_debug_session args') plus a clear exclusion ('do NOT search the disk for .cfg files'). An agent knows both when to reach for it and what anti-pattern to avoid.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

synthesize_acceptanceA

Auto-derive a machine-checked AcceptanceSpec from the synthesized FrameworkPlan (Pillar D Tier 3) and load it as the session's acceptance judge — welding design synthesis to the acceptance loop. Always emits a no_fault check (init must not HardFault); adds a memory_u32 bits_set check per clock the plan enables (RCC enable bit), a memory_u32 bits_set check per interrupt the plan enables (arch-standard NVIC ISER bit, from the resolved IRQ number), and a masked memory_u32 eq check per configured pin (GPIO MODER = AF/analog; F1's CRL/CRH is skipped). Register/IRQ/port placements come from the session's loaded SVD or explicit register_map/irq_map/gpio_map; anything unresolvable is surfaced, never guessed. Each derived check also carries source provenance (the init function + line that should satisfy it), so a later failure points straight at the fix site. Run design_framework first; load an SVD (start_debug_session/set svd) for clock/NVIC/GPIO checks.

ParametersJSON Schema
NameRequiredDescriptionDefault
loadNoLoad the derived spec as the session acceptance judge (default true).
nameNoOptional spec name.
irq_mapNoOptional explicit IRQ numbers {line_or_family: {irq_name: number}} (name with or without _IRQn); overrides the SVD.
sessionNoTarget session id (default 'default').
gpio_mapNoOptional explicit GPIO port bases {line_or_family: {port_letter: MODER_address}}; overrides the SVD.
stopped_atNoOptional symbol to also assert the PC reached after init (e.g. 'main').
include_gpioNoEmit GPIO MODER checks for configured pins (default true).
include_nvicNoEmit NVIC ISER checks for enabled interrupts (default true).
register_mapNoOptional explicit RCC placements {line_or_family: {clock: {address, bit}}}; overrides the SVD.
include_no_faultNoEmit the no_fault check (default true).

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations only covering the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description adds substantial behavioral detail: exactly which checks are emitted (no_fault, per-clock RCC bits_set, per-IRQ NVIC ISER, per-pin GPIO MODER), that unresolvable items are surfaced rather than guessed, and that each check carries source provenance pointing at the fix site. This is rich context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose in the first sentence, followed by the emitted checks, provenance behavior, and prerequisites. It is dense and jargon-heavy with long parentheticals, but every sentence carries distinct information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex 10-parameter tool with no output schema, the description adequately explains what is produced (the derived check set and its provenance) and what setup is required. It does not detail the returned object's shape or failure semantics when nothing is resolvable, leaving a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all 10 parameters, giving a baseline of 3. The description adds the SVD-vs-explicit-map precedence relationship (register_map/irq_map/gpio_map override the SVD), which is useful but largely mirrors what the schema descriptions already state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb and resource: auto-derive a machine-checked AcceptanceSpec from the synthesized FrameworkPlan and load it as the session acceptance judge. It even distinguishes itself from siblings by referencing design_framework (the input producer) and the acceptance loop, so an agent knows this is the synthesis bridge, not load_acceptance or run_acceptance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit prerequisites: 'Run design_framework first; load an SVD (start_debug_session/set svd) for clock/NVIC/GPIO checks.' This names the ordering dependency and the setup alternative. It lacks an explicit when-not (e.g., 'if you already have a spec, use load_acceptance instead'), which keeps it from a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

timeoutsB

GDB operation timeouts. action=get | set(overrides). overrides={connect,reset,memory,...} in seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhich operation to perform.
sessionNoOptional debug-session name. Omit for the default target.
overridesNoMap of timeout name -> seconds, e.g. {"memory": 4.0, "connect": 8.0}.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so safety profile is partly covered. The description adds useful behavioral context by stating overrides are 'in seconds', but omits whether settings are session-scoped, persistent, or what happens to unlisted timeouts. With annotations present, a 3 fits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact fragments, front-loaded with the resource and operations. Nothing is wasted, though the telegraphic style leaves little room for the guidance an agent would benefit from.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with full schema coverage and no output schema, the definition is minimally viable but does not explain what 'get' returns or how the overrides map behaves across sessions. Adequate, with clear gaps in behavioral framing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents action, session, and overrides. The description adds the hint that more keys exist beyond connect/reset/memory ('...') and reinforces the seconds unit, but this largely duplicates the schema's own example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource ('GDB operation timeouts') and two explicit operations ('action=get | set(overrides)'), so an agent knows exactly what this tool manipulates. It does not name or differentiate itself from any sibling, but the resource is distinctive enough to stand apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives syntax ('action=get | set(overrides)') but no guidance on when to use this tool, when not to, or what alternatives exist for adjusting debug behavior. An agent must infer the use case entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tool_helpA
Read-onlyIdempotent

Returns descriptions and complete schemas for full-surface tools, including tools hidden in compact mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoExact tool name.
queryNoCase-insensitive name/description search.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety/behavior profile is fully covered. The description adds a genuine piece of context—that tools hidden by compact mode surface here—but says nothing about return shape, size limits, or behavior on an unknown name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler—appropriate for a simple discovery tool. Minor deduction because 'full-surface tools' is unglossed jargon an agent may not resolve without outside knowledge.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does state what is returned (descriptions and complete schemas), covering the return-value burden, and annotations cover safety. It falls short only on operand interaction (name/query/session) and behavior for unmatched lookups.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (name, query, session) are documented in the schema; baseline 3 applies. The description adds no meaning about the parameters—notably not clarifying whether name and query are mutually exclusive or combinable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (returns descriptions and complete schemas for tools) and adds a distinguishing scope note ('including tools hidden in compact mode'). However, it does not name or differentiate itself from closely related siblings like mcp_info or call, which an agent browsing tool-discovery options would need.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the compact-mode reference hints at when this is needed (when a tool isn't visible), but there is no explicit when-to-use, when-not-to-use, or alternative (e.g., mcp_info) guidance. Nothing tells the agent how name vs query should be chosen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

track_variableA

Background variable tracking: action='start' (needs variable + interval_ms), 'stop', or 'get' (returns the sampled data for trend/leak analysis).

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhat to do.
sessionNoOptional debug-session name. Omit for the default target.
variableNoFor 'start': the variable/expression to sample.
interval_msNoFor 'start': polling interval in ms.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the agent knows this mutates state non-destructively. The description adds that tracking runs 'in the background' and that 'get' returns samples for trend/leak analysis, but is silent on resource cost, whether a running tracker must be stopped, or interval limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence that front-loads the tool's nature and then maps each action to its inputs/effect. No filler, and the most important scope statement leads.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does explain what 'get' produces (sampled data for trend/leak analysis). It omits what 'stop' or 'start' return and the default-session behavior, leaving minor gaps for a 4-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, and the description adds conditional parameter meaning: 'start' specifically requires variable + interval_ms, and 'get' returns sampled data. This clarifies where the schema just says 'For start: ...' without linking the pairing requirement.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Background variable tracking') and enumerates the three actions with their effects, so an agent understands this is a polled-sampler rather than a one-shot read. It does not explicitly name sibling read_variable, so the differentiation from a simple read is only implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The per-action semantics (start/stop/get) imply the workflow of starting a tracker, stopping it, and then fetching samples. However, there is no explicit guidance on when to prefer this over read_variable or how the background tracking interacts with the debug session lifecycle.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

typed_memoryB
Destructive

Typed (struct-aware) memory access. action=read(address,width_bits,count) | write(address,value,width_bits). width_bits=8|16|32|64.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of elements to read.
valueNoValue to write, e.g., '0x12345678'.
actionYesWhich operation to perform.
addressNoHex address to read from, e.g., '0x20000000'.
sessionNoOptional debug-session name. Omit for the default target.
width_bitsNoElement width in bits.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=false, so the safety profile is carried by structured data. The description adds the typing constraint ('struct-aware', width_bits values) but says nothing about write semantics, alignment requirements, or the optional session parameter's effect, so it adds only modest behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with no filler: purpose first, then the allowed signatures and value constraint. The pipe/equals notation is compact though slightly terse for reading, keeping it just below maximally clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, dual-mode tool with no output schema, the description covers the required-parameter model but omits return values, error behavior on misaligned/out-of-range addresses, and how 'typed' semantics differ from the raw memory tools. Annotations cover the safety side, so this is adequate but visibly incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates the read/write parameter signatures and the width_bits enumeration, both of which are already expressible from the oneOf branches and the enum, so it adds little meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives specific verbs and resource ('Typed (struct-aware) memory access') plus the concrete signatures for read and write, so an agent knows exactly what operations it performs. However, it never distinguishes itself from the sibling tools read_memory and write_memory; the only differentiation is the vague parenthetical 'struct-aware', which the agent must interpret on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no statement of preconditions (a live debug session is implied by the sibling set but not stated), and no comparison to the raw read_memory/write_memory alternatives. Usage is only inferable from the action syntax, which the schema already provides.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_boardA
Read-onlyIdempotent

Validate the imported BoardDescription: detect a package pin wired to multiple nets (short), a peripheral signal routed to multiple pins, a port pin driven by multiple nets, and missing power/ground/debug/reset nets. With a pin-capability DB (db_path or the STM32_GDB_MCP_PIN_DB env) it also checks alternate-function legality; unknown pins degrade to 'unverified', never a false conflict. Run import_netlist first.

ParametersJSON Schema
NameRequiredDescriptionDefault
db_pathNoOptional JSON pin-capability DB (CubeMX-derived) for AF-legality checks.
sessionNoTarget session id (default 'default').

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations' read-only/idempotent/non-destructive profile, the description explains detailed validation behavior and fallback semantics: unknown pins degrade to 'unverified' rather than being reported as conflicts. That is exactly the kind of behavioral context an agent needs to interpret results correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first clause, validation specifics follow in a compact list, and the prerequisite is placed at the end. Despite covering several checks and a fallback rule, every clause carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description thoroughly explains what is validated and how the optional DB affects results. It does not describe the return format or how findings are reported, which is a minor remaining gap for a validation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented. The description still adds meaning for db_path by noting the STM32_GDB_MCP_PIN_DB environment fallback, which the schema does not mention. The session parameter receives no extra description, keeping this from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (Validate) and resource (imported BoardDescription), then enumerates the exact conflict classes it detects: package-pin shorts, peripheral fanout, port-pin conflicts, and missing power/ground/debug/reset nets. It clearly distinguishes itself from import_netlist by naming the prerequisite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit prerequisite: 'Run import_netlist first.' It also clarifies the optional DB condition for AF-legality checks. It does not name a direct alternative or state when not to use this tool, but the operational context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_flashA
Read-onlyIdempotent

Verifies that target flash matches an ELF (GDB compare-sections). Compares read-only sections, which is what lives in flash; writable sections hold the ELF's initial RAM values and always differ once the firmware has run, so including them would fail every healthy target. Pass include_writable=true only right after a load, before the target has executed.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
file_pathYesPath to the ELF to verify against.
include_writableNoAlso compare writable (RAM) sections. Only meaningful immediately after a load.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds real context beyond that: it discloses which sections are compared, why writable sections are excluded (they always differ post-execution), and the failure mode of including them. It stops short of describing the result/failure output, but the behavioral disclosure is well above the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with the core purpose front-loaded, followed by the key default-behavior decision and the exception. Every sentence carries information; none restate the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a verification tool with no output schema, the description covers the operation, defaults, and the critical parameter decision thoroughly. Its one gap is not indicating what the verification returns (pass/fail shape, mismatch reporting), which the absent output schema leaves to the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (baseline 3). The description adds genuine semantic value by explaining what comparing read-only vs writable sections means and precisely when include_writable is meaningful, going beyond the schema's terse 'Only meaningful immediately after a load.'

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Verifies that target flash matches an ELF') and grounds it in a known mechanism (GDB compare-sections). This clearly distinguishes it from sibling write operations like flash_firmware and flash_erase.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when the default behavior applies (read-only sections always) and gives a precise when-to-use and when-not-to-use rule for include_writable: 'only right after a load, before the target has executed.' The rationale for exclusion is spelled out rather than left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_stopA
Read-onlyIdempotent

Waits for the next stop event WITHOUT resuming the target, returning a structured stop event or a timeout.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionNoOptional debug-session name. Omit for the default target.
timeout_secNoMax seconds to wait for a stop (default 10).

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds genuinely useful context beyond them: it does not resume the target and yields either a structured stop event or a timeout. It stops short of explaining what conditions trigger a stop or whether the call blocks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the critical non-resuming constraint placed first and zero wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does name the two outcomes (structured stop event or timeout). For a 2-param, fully annotated, all-optional tool this is nearly complete, though the exact stop-event shape remains unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters documented (session and timeout_sec). The description adds no syntax or default details beyond the schema's own '(default 10)' and 'Omit for the default target', so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (waits) and resource (next stop event), and the key differentiator 'WITHOUT resuming the target' separates it from resuming siblings like continue_execution or run_and_wait. It does not name a specific sibling, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'WITHOUT resuming the target' implies when this tool is appropriate (observing a stop without advancing execution), but there is no explicit when-to-use, when-not-to-use, or named alternative among the many run/step siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_guardC

Memory-write guardrail. action=policy([mode,add_allow,add_protected]) | audit([limit]). mode=enforce|dry_run.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoGuard mode.
limitNoReturn only the most recent N entries.
actionYesWhich operation to perform.
sessionNoOptional debug-session name. Omit for the default target.
add_allowNoRegions to explicitly allow, overriding protection.
add_protectedNoAdditional regions to protect from writes.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false, so the safety profile is covered structurally. The description adds almost nothing behavioral beyond restating the dry_run/enforce enum, already present in the schema — no mention of persistence of added regions, session scope, or what audit returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose, then a compact action/parameter map. It is efficient, though the telegraphic notation trades clarity for brevity and could be slightly more readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter configuration tool with full schema coverage and no output schema, the definition covers the action-parameter relationship but omits return-value expectations, whether policy changes persist, and how session scoping interacts with the default target. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description meaningfully maps parameters to actions (policy takes mode/add_allow/add_protected; audit takes limit), which the oneOf schema does not disambiguate. This is genuine added value beyond the structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Memory-write guardrail', which conveys the general domain, and it names two operations (policy, audit). However, it never says in plain language what 'policy' or 'audit' actually do — the purpose is expressed only through compressed notation, and it does not differentiate this tool from siblings like write_memory or configure_debug_freeze.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose policy vs audit, no prerequisites, and no mention of alternative tools. The action list implies two modes of operation but leaves all selection logic to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_memoryC
Destructive

Writes a value to a specific memory address.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesValue to write, e.g., '0xFF' or '1234'.
addressYesHex address to write to, e.g., '0x20000000'.
sessionNoOptional debug-session name. Omit for the default target.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, covering the safety profile. The description adds nothing further: it doesn't state that existing memory is overwritten, whether the write is verified, or any failure behavior. For a destructive hardware write, this is a meaningful gap beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. Efficient, though its brevity borders on under-specification rather than deliberate conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive memory-mutation tool with no output schema, the description should address write confirmation, alignment/addressing constraints, or guarded alternatives like write_guard. None are mentioned, leaving the definition incomplete for a low-level write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so address, value, and session are fully documented in the schema with format examples. The description adds no additional parameter meaning. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear specific verb+resource: 'Writes a value to a specific memory address.' An agent understands it mutates target memory. However, it does not differentiate from close siblings like typed_memory (typed writes) or write_guard (guarded writes), so scope against alternatives is unstated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, prerequisites, or alternatives. With read_memory, typed_memory, and write_guard as siblings, the description never indicates which to choose, when writes are unsafe, or whether verification is needed. Pure absence of guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 86 tool updatesv0.15.1
    • First observedacceptance_loop_status
    • First observedanalyze_stack
    • First observedbatch
    • First observedbreakpoint
    • First observedbuild_firmware
    • First observedcall
    • First observedcall_read
    • First observedcapture_state
    • First observedclear_session_journal
    • First observedclose_session
    • First observedconfigure_debug_freeze
    • First observedcontinue_execution
    • First observedcoredump
    • First observeddebug_config
    • First observeddebug_profile
    • First observeddebug_until
    • First observeddecode_peripheral_register
    • First observeddescribe_acceptance
    • First observeddescribe_board
    • First observeddescribe_framework
    • First observeddesign_framework
    • First observeddetect_probe
    • First observeddetect_rtos
    • First observeddiagnose_fault
    • First observeddisassemble
    • First observedexport_debug_report
    • First observedexpressions
    • First observedflash_and_run
    • First observedflash_erase
    • First observedflash_firmware
    • First observedframe
    • First observedget_session
    • First observedhalt_execution
    • First observedhub
    • First observedimport_netlist
    • First observedimport_spec
    • First observedinspect_project
    • First observedinspect_symbol
    • First observedlist_sessions
    • First observedload_acceptance
    • First observedload_device_pack
    • First observedload_svd
    • First observedload_symbols
    • First observedlogging
    • First observedmcp_info
    • First observedread_call_stack
    • First observedread_freertos
    • First observedread_memory
    • First observedread_peripheral_register
    • First observedread_registers
    • First observedread_variable
    • First observedreconstruct_fault_context
    • First observedrecover_session
    • First observedrender_framework
    • First observedreport_issue
    • First observedreset_target
    • First observedrun_acceptance
    • First observedrun_acceptance_iteration
    • First observedrun_and_wait
    • First observedrun_for_duration
    • First observedrun_pipeline
    • First observedrun_scenario
    • First observedrun_to_line
    • First observedsample_pc
    • First observedself_check
    • First observedsession_diagnostics
    • First observedset_adapter_speed
    • First observedsetup_swo
    • First observedsnapshot
    • First observedsolve_clock_tree
    • First observedsolve_timer
    • First observedstart_acceptance_loop
    • First observedstart_debug_session
    • First observedstep
    • First observedstop_debug_session
    • First observedsuggest_server_args
    • First observedsynthesize_acceptance
    • First observedtimeouts
    • First observedtool_help
    • First observedtrack_variable
    • First observedtyped_memory
    • First observedvalidate_board
    • First observedverify_flash
    • First observedwait_for_stop
    • First observedwrite_guard
    • First observedwrite_memory

TDQS

A3.5/5.0

Scored across 86 tools

Disambiguation3/5

Many tools overlap in the run/stop/context-capture space (run_and_wait, wait_for_stop, continue_execution, run_for_duration, run_to_line, capture_state) and multiple meta-call tools (call, call_read, batch, tool_help) create selection ambiguity. Descriptions are detailed enough to mostly disambiguate, but with 86 tools an agent can still easily misselect.

Naming Consistency4/5

Most names follow a predictable snake_case verb_noun pattern (start_debug_session, read_memory, flash_firmware, solve_clock_tree). A minority are single-noun mega-tools (hub, breakpoint, expressions, logging, frame, snapshot), which is a minor deviation but still readable and internally consistent within that subset.

Tool Count2/5

86 tools is far beyond the well-scoped 3-15 range and is too many even for this broad server. Although it spans debug, build, board design, acceptance loops, and USB hub control, the surface is unwieldy and likely to overwhelm clients and agents; consolidation into more action-parameter mega-tools is needed.

Completeness5/5

The tool surface covers the embedded debug lifecycle comprehensively: sessions, flashing, symbols, memory/registers, breakpoints, RTOS, SVD, fault/stack recovery, logging, profiling, coredump, acceptance loops, netlist-to-framework design, clock/timer solving, and hub power control. No obvious domain gap remains for the stated STM32 GDB/debug-and-build purpose.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables AI agents to debug embedded systems by providing a comprehensive interface for GDB operations across multiple architectures like ARM and x86. It supports remote debugging via gdbserver or QEMU, allowing for detailed inspection of memory, registers, stack frames, and variables.
    31
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants like Claude to directly debug microcontrollers via JLink, supporting breakpoints, single-step, memory/register access, variable inspection, RTT logging, and firmware flashing.
    25
    7
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI tools to perform full-featured embedded microcontroller debugging via pyOCD and CMSIS-DAP probes, including probe management, flashing, breakpoints, register/memory access, fault analysis, and RTT communication.
    58
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to debug ARM Cortex-M targets via GDB and OpenOCD, supporting attach, breakpoints, stepping, register/memory inspection, and SVD peripheral decoding.
    MIT