Skip to main content
Glama
cc8887

RAD Debugger MCP

by cc8887

RAD Debugger MCP

独立的 Windows x64 原生调试 MCP 服务。通过 RAD Debugger 进行启动、附加、断点、单步、调用栈和表达式检查。

不需要 Unreal Editor、UnrealEditor MCP、UE 插件、PythonScriptPlugin 或正在运行的编辑器。 普通带 PDB 的 C/C++ EXE、UnrealEditor、游戏客户端和 Dedicated Server 都使用同一个原生调试流程。通用表达式格式化由 RAD 提供,服务另补充显式布局验证的 UE 结构化读取;兼容性需要在目标引擎版本验证。

当前实现使用 MCP stdio。每个调试会话拥有一个无图形 RAD 后端、随机回环端口、独立认证令牌和配置目录。认证令牌不通过 MCP 返回,也不写入配置文件。不暴露原始 RAD 命令、shell 或内存写入工具;rad_launch 会执行指定的本地 EXE,应只用于明确授权的目标。

构建与启动

要求:Windows x64、Python 3.11+、Git、MSVC x64 Build Tools 与 Windows SDK。当前验证环境为 Python 3.14、MCP Python SDK 1.26.0、MSVC 19.38。

先克隆本项目和官方 RAD 源码,再构建独立后端:

git clone https://github.com/cc8887/raddebugger-mcp.git
cd raddebugger-mcp
git clone https://github.com/EpicGames/raddebugger.git ../raddebugger
python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e .
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-backend.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/start.ps1

已经存在源码目录时跳过相应 clone。build-backend.ps1 默认从相邻的本地仓库创建 .build/raddebugger 构建副本,并固定在 771f63dd35d3d17f0c7914c5031959282802be5f;不会改动原始 RAD 仓库。可用 -Upstream ../your-rad-checkout 指定其他源码位置。构建后的来源与 SHA-256 写入 .build/backend-manifest.json。

start.ps1 会设置模块路径,因此开发阶段也可以使用已有 MCP SDK 的 Python 启动,不要求 editable install。stdio 启动后没有命令提示符;它等待 MCP 客户端。

支持 MCP stdio 的客户端配置示例(安装包后;将 <absolute-repo-path> 替换成实际检出目录的绝对路径):

{
  "mcpServers": {
    "raddebugger": {
      "command": "<absolute-repo-path>/.venv/Scripts/python.exe",
      "args": ["-m", "raddebugger_mcp"]
    }
  }
}

也可以将 command 指向 powershell.exe,args 设置为 -NoProfile -ExecutionPolicy Bypass -File <absolute-repo-path>/scripts/start.ps1 的各个独立参数。其他位置的后端使用 --backend <exe> 或 RAD_MCP_BACKEND。会话目录使用 --session-root <directory>。

Related MCP server: vibe-debug

调试流程

  1. rad_create_session 得到 session_id。这一步仅启动 RAD 后端。

  2. rad_set_breakpoint 设置函数、行或地址断点;可以在目标启动前设置。

  3. rad_launch 启动 EXE,默认停在入口;或通过 rad_list_processes 找到明确的 PID,再 rad_attach。

  4. rad_continue 返回 wait_after_run_gen 和 wait_after_stop_count;传给 rad_wait_for_stop 等待新的停点或退出。

  5. 在停点调用 rad_get_stack、rad_get_state、rad_evaluate;用 rad_select_context 选择线程或栈帧。

  6. rad_step 支持源码 into/over/out 及指令 into/over;rad_run_to_line 运行到行。

  7. rad_close_session 默认分离并恢复应用。只有显式 terminate_debuggee=true 才终止目标。

例如启动 UE 项目,参数仍然是普通 EXE 参数:

{
  "session_id": "<rad_create_session 返回的 ID>",
  "program": "<absolute-engine-path>/Engine/Binaries/Win64/UnrealEditor.exe",
  "args": ["<absolute-project-path>/MyGame.uproject", "-log"],
  "stop_at_entry": true
}

这里没有向编辑器发送 MCP 请求。现有 Editor、客户端或 Server 也可以独立附加。目标必须允许原生调试,并有与二进制匹配的符号;首次 PDB → RDI 转换可能耗时。debug_subprocesses 默认关闭,可在 launch 中明确开启。

工具

工具

功能

rad_create_session, rad_list_sessions, rad_close_session

会话生命周期

rad_list_processes, rad_launch, rad_attach

选择、启动、附加目标

rad_get_state, rad_wait_for_stop

状态、停点代际与有界等待

rad_set_breakpoint, rad_list_breakpoints, rad_remove_breakpoint

行、函数、地址断点

rad_continue, rad_pause, rad_step, rad_run_to_line

原生执行控制

rad_get_stack, rad_select_context

调用栈、线程及栈帧选择

rad_evaluate, rad_address_to_line

类型/值与地址到源码映射

rad_read_value

有界结构化读取 FString、FText、TArray 与稀疏 TMap(显式 UE4.26 Win64 布局)

rad_read_object

通过运行时 UClass/FProperty 读取蓝图专属属性,递归展开结构体、TArray/TMap

rad_open_crash_dump

本地 dump 装载;受 dump/PDB 数据覆盖限制

返回值的含义

  • requested:命令已发送,应使用返回的基线等待停点;不代表已经停住。

  • stopped:观察到了比基线更新的停点。

  • exited:观察到目标进程集合已清空;具体退出码需要结合输出/停点原因确认。

  • timeout:截止时间前没有新的停点,不会自动终止、暂停或重放命令。

  • 断点的 resolution=configured 只表示 RAD 配置已存在;不能据此宣称机器地址已解析或断点已命中。

  • 表达式返回 ok、messages、read_failed、run_gen、stop_count、线程/帧、时间戳和读取方式。补丁后端的 memory_freshness=direct_process_read 表示进程内存绕过异步页面缓存;读取不完整或失败会令 ok=false。寄存器、栈展开和符号仍由 RAD 提供,consistency=same_stop_epoch 不代表整个进程的原子快照。显示上限为 512 UTF-8 字节,按完整 Unicode 序列截断,并返回 possibly_truncated、type_truncated、value_encoding_valid、type_encoding_valid、invalid_encoding。截断不是完整成功;旧字段 display_limit_chars 仅为兼容保留,请使用 display_limit_bytes。

UE 值的结构化读取

在已停止、具有匹配 PDB 的目标上调用:

{"session_id":"<id>","expression":"this->SettingsByName","kind":"tmap","layout":"ue4_26","start":0,"count":16,"slot_scan_budget":256}

表达式中的成员名仅为示例,以目标的实际 PDB 为准。kind 可为 auto、fstring、ftext、tarray、tmap。本工具不需要 UE 插件或编辑器接口,不调用目标函数,也不修改目标内存。

  • FString/FText 使用精确 UTF-16 数值读取并严格解码,保留嵌入 NUL,支持中文与非 BMP 字符。start / next_index 是 UTF-16 单元偏移,单页 max_string_units 默认及最大 4096;不会从代理对中间续读。complete=false / truncated=true 表示部分结果。

  • FText 只读取 PDB 已验证的 localized shared string 或 generated display string;未知 history/layout 明确失败,不调用 ToString()、本地化解析或强制刷新文本。

  • 常规 rad_evaluate 遇到 FText 也复用这一语义路径,返回带引号的显示文本及 representation=ue4_26_ftext_display_string;原生通用结构展开的诊断单独保存在 native_display_diagnostics。显式 raw(...) / typeof(...) 保留原生行为。语义读取失败不会退回看似成功的通用展开;512 字节上限仍适用,全文请用 rad_read_value。

  • TMap 按稀疏槽位的占用位图跳过空洞,由 PDB 推导槽位地址,不猜测 sizeof(Key)+sizeof(Value)。start / next_index 是物理槽位索引,count 限制返回条目,slot_scan_budget 限制扫描槽位;扫描预算耗尽仍有明确续页位置。支持的叶值包括 FName、FString/FText、标量与对象指针;未知结构体返回 opaque,不伪装成完整反射树。

  • 单次最多 512 个求值探针、60 秒;所有探针与最终检查使用同一锁定停点/进程/线程/帧。任何代际变化立即失败,不拼接跨停点数据。该一致性仍不是整个进程的原子快照。

布局目前仅为显式 ue4_26 Windows x64 profile;UE5、定制 allocator/name pool 和任意 FText history 未作普遍兼容承诺。更新 Python 服务后,需要客户端重新连接以刷新新增工具清单。

  • 使用先前快照作决策时,传 expected_run_gen/expected_stop_count。过期快照返回 STALE_SNAPSHOT;运行中的值检查返回 TARGET_RUNNING。

蓝图与 UObject 属性树

rad_read_object 接收 UObject 指针表达式,从目标进程的 ClassPrivate → ChildProperties/SuperStruct → FProperty 获取实际字段名、声明类、偏移、类型及容器布局,PDB 只提供元数据结构的成员偏移。蓝图专属变量不需要出现在 C++ PDB 成员表中。blueprint_defined 来自声明类的 CLASS_CompiledFromBlueprint 标志;declared_by 保留声明来源。它不依赖 UnrealEditor MCP、编辑器 RPC、UE Python 或目标函数调用。

{"session_id":"<id>","expression":"this","include_inherited":false,"metadata_only":true,"count":128}
{"session_id":"<id>","expression":"this","property_path":["Inventory",2,"Attributes"],"max_depth":5,"count":16}

先用 metadata_only=true 发现字段,再用 properties=["实际字段名"] 或 property_path 选择读取。路径由精确运行时字段名、数组下标、Map 物理槽位下标加 "key"/"value" 组成;用户自定义蓝图结构体的字段可能带 GUID,不擅自重命名。结构体及固定数组、TArray、TMap 可递归嵌套,Map 使用 FMapProperty.MapLayout 与稀疏位图推导地址。支持标量、布尔位域、枚举底层整数、FName、FString、FText 及对象引用;软/弱引用、Set、委托和未知属性类明确报告不支持。

对象引用默认只返回地址、名称和运行时类身份;follow_objects=true 才递归读取,循环引用返回地址引用标记。深度耗尽、分页和元素上限返回 complete=false,不是完整成功。顶层 start/count 控制属性页或选中容器的页,嵌套 max_elements/max_properties 限制展开,返回的 property_path/next_index 可用于继续读取;Map 下标不是条目序号。默认深度 3(最大 8)、节点 256(最大 1024)、元数据字段 1024(最大 2048)、字符串单页 256 个 UTF-16 单元(最大 4096);单次最多 4096 个求值探针、60 秒、512 KiB 输出。所有探针及最终校验仍属于同一停点/进程/线程/帧,不是整个进程的原子快照。仅承诺有匹配 PDB 的 UE4.26 Win64 已支持布局,不承诺任意引擎版本或任意 UObject 图完整展开。

会话状态、目标参数、stdout/stderr 和 RAD 日志保存在本地会话目录,不会自动上传。普通关闭与 MCP stdin EOF 会尝试先分离目标,再退出后端;后端还禁用了 Windows 的 debugger-exit-kills-debuggee 行为。断电、强制结束主机、目标自身异常等不属于正常清理验收。

验证

$env:PYTHONPATH = "$PWD/src"
.\.venv\Scripts\python.exe -m unittest discover -s tests -v
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-types-fixture.ps1
.\.venv\Scripts\python.exe scripts/regression_types.py
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/build-fixture.ps1
.\.venv\Scripts\python.exe -u scripts/smoke.py
.\.venv\Scripts\python.exe -u scripts/regression_detach.py

smoke 测试使用官方 Python MCP SDK,通过真实 stdio 协议调用本服务,再经认证 TCP 控制 RAD,调试项目内自带的 MSVC/PDB 测试程序。结果写入 artifacts/smoke-*/result.json。在禁止本机 socket/Windows 异步 I/O 的沙箱中,需要在主机权限环境运行测试。

regression_types.py 使用独立 UE4.26 布局 C++/PDB fixture,经真实 MCP stdio 验证直接 Unicode 显示、有界 UTF-16 解码、FText 存储、容器分页、稀疏位图和不同槽位大小。它不是 Unreal 运行时验收;可用 --backend <old-backend.exe> 做旧后端负对照。记录位于 artifacts/types-layout-regression-*/result.json。

regression_detach.py 专门覆盖源码单步、指令单步、函数断点、行断点、暂停和运行中关闭这六类直接分离路径,默认各重复两次。有限程序必须在分离后通过原始 Windows 进程句柄确认退出码为 0,且输出正确;不会把“短暂存活”当作通过。循环程序还必须无调试器且计数继续增长。可用 --backend <old-backend.exe> --cases source_step --repeat 1 做旧后端负对照。结果位于 artifacts/detach-regression-*/result.json。

详细能力边界与验收记录见 docs/verification.md。运行时只依赖 RAD 和 MCP SDK;这些测试不需要 UE 安装。

真实 UE 项目验收(可选,需要已有项目、UE 5.8.1 和匹配插件 DLL/PDB):

.\.venv\Scripts\python.exe -u scripts/smoke_ue.py --project ../RmlUiUnrealTest/RmlUiUnrealTest.uproject --engine "<path-to-UE_5.8>"

该脚本通过 MCP 启动现有项目内的 RmlUi.Animation.MovieSceneRuntime.Lifecycle 自动化,验证函数/行断点、源码单步、局部结构体与完成计数;分离后再附加同一个正在运行的 UE PID,验证引擎 Tick 地址断点、指令单步和帧计数。测试使用 NullRHI,不作为画面验收;不安装插件、不编译或改写目标源码,也不调用 UnrealEditor MCP。结束时仅清理本脚本启动并保留了原始句柄的 UE 进程。结果位于 artifacts/ue-smoke-*/result.json。外部 UE 工程和原始私有验收产物不随本仓库发布,普通单元测试与 C/PDB smoke 不需要它们。

源码与维护

  • src/raddebugger_mcp/:MCP 工具、会话、分帧与 Metadesk 回复解析。

  • native/upstream.patch:固定提交的少量桥接改动;新增代码在 native/mcp_extension.c。

  • scripts/build-backend.ps1:独立源码副本、补丁和后端构建。

  • tests/、scripts/smoke.py、scripts/regression_detach.py:协议、分离契约回归与真实调试验收。

  • scripts/smoke_ue.py、scripts/ue_pe.py:可选现有 UE 项目验收及引擎导出地址解析,均不属于服务运行时依赖。

RAD 补丁提供:回环绑定、每会话认证、TCP 请求重组、正常断连处理、较大的回复队列、无图形链接修复、进程/线程数值选择、调用栈/配置证据、独立目标配置输入,以及直接内存求值和读取失败报告。启动时不覆盖 RAD 自动保存的活动项目文件,已有断点 ID 保持有效。升级上游时需要重新核对补丁和协议,不能直接替换为任意官方 release EXE。

Win32 分离还会保留独立线程句柄,在目标线程保持调试器显式挂起时,先处理属于该 PID 的待续行调试事件,再请求 Windows 分离并恢复线程。调试器自身的单步/断点事件与程序自身异常采用不同续行状态;续行或分离请求失败时保留会话用于重试。此前“单步后直接分离”可导致目标以 0x80000003 退出,旧构建应重新构建,不能只更新 Python 服务。

当前没有 Blueprint VM、Actor/Component 枚举、资产编辑、PIE 操作、GPU 调试、Android/主机调试、远程调试、内存写入或目标函数调用 API。rad_evaluate 使用 RAD 表达式语言,不承诺任意 C++ 表达式兼容性。Shipping/优化构建可能缺失局部变量。

表达式示例:g_counter 读取变量;hex(cast(uint64)(&g_counter)) 获取地址;*(cast(int32*)0xADDRESS) 读取明确地址。优先使用 RAD 的 cast(type),一元运算的操作数再加一层括号;内置整数类型为 int32/uint64 等。不要把 (uint64)&value 当作可靠的 C++ 转换写法。求值失败时以 ok=false 和 messages 为准,不使用显示出的占位数值。

项目采用 MIT 许可;RAD Debugger 的版权与 MIT 声明保存在 native/UPSTREAM_LICENSE。MCP 使用 官方 Python SDK。

Available Tools

20 tools
rad_address_to_lineB
Read-only

Resolve a virtual address to source lines in the selected process.

NameRequiredDescriptionDefault
addressYes
session_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds one useful behavioral trait — the lookup happens against the *currently selected* process, not an arbitrary one — but is silent on what happens when no process is selected or when the address doesn't map to any line.

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 tight sentence with the action and scope front-loaded and no filler. Brevity is appropriate, though the same sentence count could have carried the missing session/context prerequisites.

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?

Output schema exists, so return values needn't be described, and annotations cover the safety profile. What's missing is the session/context prerequisite and the meaning of session_id — meaningful gaps for a two-required-parameter tool with zero schema documentation.

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

Parameters2/5

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

Schema description coverage is 0% for both required parameters, so the description must compensate and mostly doesn't. It implies 'address' is a virtual address, but 'session_id' is never mentioned and its relationship to the 'selected process' is left entirely to inference.

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 ('resolve') plus a precise resource ('virtual address to source lines') with the scope ('selected process') stated. An agent can tell this apart from siblings like rad_get_stack or rad_evaluate, though the description stops short of contrasting them explicitly.

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 prefer this over rad_get_stack or rad_evaluate, and no stated prerequisites (e.g. that a session must be attached and a context selected). 'In the selected process' hints at a precondition but never names it as one.

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

rad_attachA

Attach to an existing local application PID and wait for a debug stop. May pause the application.

NameRequiredDescriptionDefault
pidYes
timeoutNo
session_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior4/5

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

Annotations only declare the non-read-only, non-destructive, closed-world profile; the description adds genuinely new behavioral facts — the call blocks waiting for a debug stop and may pause the target. That pause warning is exactly the kind of side effect an agent needs before calling. It stops short of explaining how timeout or failed attach behaves.

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

Conciseness5/5

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

Two short sentences, action first, hazard second. Nothing is wasted and the key caveat is front-loaded.

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

Completeness3/5

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

An output schema exists, so return values need not be described. But for a blocking debugger attach with a required session handle and an undocumented timeout, the definition is thin — it omits the session prerequisite and what happens on timeout or failed attach.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, but it only glosses 'pid' via 'existing local application PID'. session_id (a required string) and timeout (default 15, units unspecified) are never explained anywhere.

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 ('Attach to an existing local application PID'), which implicitly distinguishes it from rad_launch. It doesn't name a sibling explicitly, but the 'existing' qualifier makes the attach-vs-launch split inferable.

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: attaching to an already-running process. There is no explicit statement of when to prefer this over rad_launch, nor any mention of prerequisites such as needing a session from rad_create_session first, despite session_id being required.

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

rad_close_sessionA
Destructive

Close RAD and detach/resume applications by default. terminate_debuggee=true explicitly terminates attached processes.

NameRequiredDescriptionDefault
session_idYes
terminate_debuggeeNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, and the description usefully clarifies that the default is the non-destructive detach/resume path while termination only happens on an explicit flag — context the annotation alone does not convey. It still omits whether closing is reversible and what happens to session state afterward.

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 sentences, front-loaded with the default behavior and the flag semantics; every clause carries information. The unexplained acronym "RAD" is the only mild bloat/inaccessibility.

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 an output schema present, return values need not be described, and the description covers the key behavioral fork for a destructive close. It is nearly complete, lacking only how to source session_id and what state remains after closing.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry semantics; it does explain terminate_debuggee (terminates attached processes, default false), which is the non-obvious parameter. However, session_id is left completely unexplained — no mention of where to obtain it or its format — so compensation is only 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 a specific verb and resource: closing the RAD session, and adds the default detach/resume behavior. It is clearly distinguishable from siblings like rad_launch or rad_attach, though it never names them explicitly.

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

Usage Guidelines3/5

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

The two sentences give an implicit decision rule for the terminate_debuggee flag (default detach vs. explicit termination), but there is no guidance on when to close a session at all, or what prerequisites/existing state are needed before calling.

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

rad_continueB

Resume attached processes and return a baseline for rad_wait_for_stop.

NameRequiredDescriptionDefault
session_idYes
expected_run_genNo
expected_stop_countNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already state readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that a baseline is returned for rad_wait_for_stop, but it says nothing about whether the call blocks, what happens on an already-running process, or how the expected_run_gen/expected_stop_count guards behave — the most consequential behavior for this tool.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, so nothing wastes space. The terseness, however, is closer to under-specification than compression — there is room for one more sentence on the guard parameters.

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 an output schema present, return values need no explanation, but the two optional generation/stop-count parameters sit at 0% schema description coverage and are the crux of correctly calling this tool — the description leaves an agent unable to know what to pass or when.

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?

Only session_id semantically flows from the description ("attached processes"), leaving expected_run_gen and expected_stop_count unexplored.

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?

"Resume attached processes" gives a specific verb and resource, and it names rad_wait_for_stop as the downstream consumer, which helps place it among siblings like rad_pause, rad_step and rad_run_to_line. It stops short of explicitly distinguishing continue from those stepping tools.

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

Usage Guidelines3/5

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

The reference to rad_wait_for_stop implies a usage pattern (resume, then wait for the next stop), so the context is inferable. But it never says when to choose rad_continue over rad_step or rad_run_to_line, nor any preconditions such as the process needing to be in a paused state.

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

rad_create_sessionB

Create an isolated, authenticated headless RAD backend. Does not start an application.

NameRequiredDescriptionDefault
nameNonative-debug
startup_timeoutNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/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 openWorldHint=false. The description adds that the backend is 'isolated, authenticated headless,' which hints at auth needs and isolation. However, it doesn't explain lifecycle (persistence until rad_close_session), behavior on startup_timeout expiry, or what authentication 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.

Conciseness4/5

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

Two tight sentences, with the core action front-loaded and the exclusion immediately after. Every sentence earns its place, though the exclusion could name the sister tool for even sharper routing.

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?

An output schema exists, so return values needn't be explained. But with 0% schema coverage on both parameters and no mention of them in the description, plus unclear session lifecycle, the definition is only partially complete for a tool whose purpose is to establish a working backend.

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

Parameters2/5

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

Schema description coverage is 0% — the two parameters (name, startup_timeout) have only titles and defaults, no descriptions. The description does not mention either parameter, so it fails to compensate for the gap. With two undocumented params, an agent cannot tell what 'name' identifies or what 'startup_timeout' measures.

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: 'Create an isolated, authenticated headless RAD backend.' The second sentence, 'Does not start an application,' distinguishes it from rad_launch, though the tool name says 'session' while the description says 'backend,' a slight naming mismatch an agent must reconcile.

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?

'Does not start an application' implies rad_launch is the tool that does, but the alternative is never named explicitly and no prerequisites or when-not conditions are given. Usage is only implied, not stated.

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

rad_evaluateB
Read-only

Evaluate a RAD read expression while stopped. Returns type, formatted value, messages and explicit cache/epoch evidence.

NameRequiredDescriptionDefault
expressionYes
session_idYes
expected_run_genNo
expected_stop_countNo

Output Schema

NameRequiredDescription

No output parameters

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, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds the meaningful precondition that the process must be stopped and hints at cache/epoch evidence in the result, but it says nothing about what happens when the guards mismatch or what errors/messages can surface.

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 tight sentences with the action front-loaded and no filler. The phrase 'explicit cache/epoch evidence' is jargon-heavy but carries real information.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and the description does signal what comes back. However, for a 4-parameter tool with zero schema coverage and two optional concurrency guards, leaving their purpose undocumented is a material gap.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate and does not: it never mentions expected_run_gen or expected_stop_count, whose guard semantics are entirely opaque and could cause confusing failures if misused. Only 'expression' is indirectly conveyed by 'RAD read expression'.

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 ('Evaluate') and a specific resource ('RAD read expression') with a scope qualifier ('while stopped'), which distinguishes it from siblings like rad_get_state and rad_get_stack that also surface values. It does not name a sibling or contrast explicitly, so it falls just short of 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?

'while stopped' implies the precondition, which is useful, but the description never says what to do if the session is not stopped (e.g., call rad_wait_for_stop first) or when to prefer this over rad_get_state. Usage is implied rather than stated.

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

rad_get_stackB
Read-only

Read the selected thread's native call stack, symbol names and source locations. At most 128 backend frames.

NameRequiredDescriptionDefault
countNo
startNo
session_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds the meaningful detail that at most 128 backend frames are returned, which constrains expectations, but says nothing about pagination behavior or ordering.

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 zero filler. Every clause carries information.

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

Completeness3/5

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

An output schema exists, so return values needn't be described. However, with three undocumented parameters and an unstated session/thread prerequisite, an agent lacks enough to call it correctly without inspecting the schema.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must define 'count', 'start', and 'session_id'. It explains none of them; 'at most 128 backend frames' vaguely hints at a cap on 'count' but never clarifies 'start' as a pagination offset or that 'session_id' identifies the debugging session.

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 (native call stack with symbol names and source locations), plus a hard cap of 128 backend frames. It doesn't explicitly differentiate from siblings like rad_get_state or rad_evaluate, but 'call stack' is distinct enough to route an agent.

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?

'Selected thread' implies a prerequisite (a context must be selected, likely via rad_select_context) but this is never stated explicitly. No when-to-use/when-not guidance or alternatives are named, so usage is only implied.

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

rad_get_stateB
Read-only

Return current run_gen, stop_count, stop reason, processes, threads and local names. Optional full module/stack lists.

NameRequiredDescriptionDefault
session_idYes
include_stackNo
include_modulesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), so the extra burden is low. The description adds that stack/module lists are 'full' and optional, hinting at cost, but does not say how expensive they are or when the extra data is warranted.

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 tight sentences with the primary payload front-loaded and the optional extras second. Minor ambiguity in 'local names' costs a point but there is no filler.

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?

An output schema exists, so return-value format need not be restated. However, with zero schema description coverage, the definition should still clarify which session_id to supply and what the optional flags do; neither gap is closed.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning and does so only partially: 'Optional full module/stack lists' loosely maps to include_modules/include_stack but never names them, and session_id — the required parameter — is entirely unexplained.

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 'Return' plus an explicit enumeration of the state fields (run_gen, stop_count, stop reason, processes, threads, local names). It is distinguishable from rad_get_stack and rad_list_processes by being a combined snapshot, though it never names those siblings to sharpen 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?

No statement of when to call this instead of rad_get_stack, rad_list_processes or rad_evaluate, and no prerequisite context (e.g., that the session must be stopped). Usage is only inferable from the returned fields.

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

rad_launchB

Launch a local x64 executable with PDBs. Arguments are a list; no shell is used. Stops at entry by default.

NameRequiredDescriptionDefault
argsNo
programYes
timeoutNo
session_idYes
stop_at_entryNo
working_directoryNo
debug_subprocessesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already establish that this is not read-only, not destructive, and closed-world. The description adds useful behavior: args are passed as a list with no shell, and execution stops at entry by default. However, it omits session prerequisites, timeout behavior, working-directory handling, and what debug_subprocesses changes.

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

Conciseness5/5

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

The description is two short, front-loaded sentences with no filler. It states the core action first and then supplies important execution semantics.

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 seven-parameter launch tool with zero schema coverage, the description is too sparse. It does not explain the required debug session, timeout implications, working directory, or subprocess debugging, though the output schema does relieve pressure to describe return values.

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

Parameters2/5

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

Schema description coverage is 0% across seven parameters, so the description must compensate. It explains only args (a list, no shell) and the default stop_at_entry behavior, leaving program, session_id, timeout, working_directory, and debug_subprocesses semantically undocumented.

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

Purpose4/5

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

The description states a clear verb and resource: launch a local x64 executable with PDBs. It implicitly contrasts with rad_attach by using 'launch' rather than 'attach', but does not explicitly name an alternative or clarify 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?

It gives no explicit guidance on when to use this versus rad_attach or other session-based tools. The only hint is 'Stops at entry by default', which describes behavior rather than selection criteria.

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

rad_list_breakpointsB
Read-only

Read actual RAD breakpoint configuration and observed hit counts.

NameRequiredDescriptionDefault
session_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly=true, destructive=false, and openWorld=false, so the safety profile is covered. The description does add one useful nuance beyond the annotations — that it returns the real runtime configuration plus observed hit counts, not declared config — but says nothing about session requirements, error behavior, or ordering.

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 no filler; "actual" and "observed hit counts" both carry information. It is close to under-specified rather than over-long, but nothing in the sentence is wasted.

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?

An output schema exists, so return-shape details are not required, and annotations cover safety. What is missing is scope: the description never states that the listing is per-session (the sole required argument), which is the main thing an agent must know to call it correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description is the only place parameter meaning could be supplied, and it contributes nothing. session_id is required but never mentioned; the description does not say results are scoped to the given debugging session or what happens with an invalid/ended session.

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+resource: "Read actual RAD breakpoint configuration and observed hit counts." It is clearly a read/list operation, distinguishable in spirit from rad_set_breakpoint and rad_remove_breakpoint, though it never names those siblings or states that it returns the full list.

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: an agent can infer it should call this to inspect breakpoints rather than mutate them. There is no explicit when-to-use statement, no mention of prerequisites (e.g. needing an active stopped session), and no routing away from rad_get_state or rad_set_breakpoint.

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

rad_list_processesA
Read-only

List local Windows PIDs, executable names and parent PIDs. Select the exact application PID before attaching.

NameRequiredDescriptionDefault
name_containsNo

Output Schema

NameRequiredDescription

No output parameters

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, destructiveHint=false and openWorldHint=false; the description's 'local Windows' wording corroborates the closed-world scope but adds little. It says nothing about ordering, whether all processes are returned, or how the name_contains filter changes results.

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

Conciseness5/5

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

Two short sentences, front-loaded with the resource and return fields, followed by the one actionable constraint. No filler.

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?

Output schema and annotations carry the return shape and safety profile, so the description needn't cover those. However, for a tool with a filtering parameter, omitting any mention of filtering leaves an agent unaware of a capability it can use.

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

Parameters2/5

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

There is one optional parameter (name_contains) with 0% schema description coverage, and the description never mentions that filtering is possible or how it matches. Because the schema provides no semantics, the description was the only place to explain this and it does not.

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 set: list local Windows PIDs, executable names and parent PIDs, so the agent knows exactly what comes back. The phrase 'before attaching' distinguishes it from the mutation/attach siblings, though it never names rad_attach or rad_list_sessions 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?

'Select the exact application PID before attaching' gives a clear usage context and sequencing constraint. It does not state exclusions or name the alternative tools, 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.

rad_list_sessionsA
Read-only

List this MCP service's active debug sessions.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

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, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The word 'active' adds real behavioral context beyond annotations — closed or terminated sessions are excluded from results — and 'this MCP service's' scopes the result set to server-owned sessions. It does not say what happens when no sessions exist or whether results are ordered/paginated.

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. The scope qualifier is placed before the noun it modifies, so an agent reads the key constraint 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?

An output schema exists, so return values need no explanation, and annotations cover the safety profile. For a zero-parameter list tool the description is nearly sufficient; only the expected empty-result behavior and any tie-in to session-handle-consuming siblings like rad_attach are 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?

The tool takes zero parameters, so there is nothing for the schema or the description to disambiguate. Baseline 4 applies; no parameter guidance is needed or missing.

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: 'List ... active debug sessions.' That is clearly distinct from rad_create_session and rad_close_session, and from rad_list_processes, which returns processes rather than sessions. It stops short of explicitly naming a sibling it might be confused with, so a 4 rather than 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 statement of when to call this versus alternatives (e.g. before rad_attach or rad_select_context to find a session handle), and no prerequisites or exclusions. Usage is only inferable from the verb 'List.'

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

rad_open_crash_dumpB

Load a local native crash dump in an empty session. Symbol and memory coverage depend on the dump and matching PDBs.

NameRequiredDescriptionDefault
pathYes
timeoutNo
session_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare this is not read-only, not destructive, and not open-world. The description adds useful context about symbol and memory coverage depending on the dump and matching PDBs, but does not explain what happens on failure or what state changes occur in the session.

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 with the core purpose and key limitation front-loaded. No wasted words.

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

Completeness3/5

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

An output schema exists, so return values need not be described, and annotations cover the safety profile. However, with zero schema coverage on three parameters and no mention of timeout or path, the description is incomplete for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only hints that session_id must refer to an empty session. It does not explain the path parameter (presumably the dump file path) or the timeout parameter, leaving key invocation details undocumented.

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 (load) and resource (local native crash dump) and clarifies it must be in an empty session, which distinguishes it from siblings like rad_attach or rad_launch. It does not name siblings explicitly, but the purpose 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?

The phrase 'in an empty session' implies a precondition and hints at when to use this over other session-opening tools, but there is no explicit guidance on alternatives or exclusions. An agent must infer that rad_create_session is needed first.

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

rad_pauseB

Pause running processes and wait for the resulting stop.

NameRequiredDescriptionDefault
timeoutNo
session_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

The annotations already establish this is a mutating (readOnlyHint=false) but non-destructive, non-open-world operation. The description adds genuinely useful behavior: it blocks and returns only after the stop event occurs, which is not visible in the annotations. However, it never says what happens if the wait exceeds the default 10s timeout or whether the pause is resumable.

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. It is efficient, though arguably underspecified rather than concise given the unresolved timeout and session semantics.

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?

An output schema exists, so return values need not be described. Still, for a blocking, session-scoped debugger operation with 0% parameter documentation, the agent lacks necessary facts: timeout behavior, required session state, and the distinction from rad_wait_for_stop.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries full responsibility for the two parameters, and it names neither. The word 'wait' hints at the blocking semantics of timeout but gives no default, units, or behavior on expiry, and session_id's role is entirely unstated.

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 (pause) and resource (running processes) plus the follow-on effect (waiting for the resulting stop), which is more informative than the tool name alone. It does not distinguish itself from the adjacent rad_wait_for_stop or rad_continue, so an agent must infer the boundary from names.

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, when-not-to-use, or alternative guidance. Nothing tells the agent how this differs from rad_wait_for_stop (which also waits for a stop) or when to prefer rad_continue/rad_step, nor what session state is required beforehand.

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

rad_remove_breakpointA

Remove a breakpoint ID returned by this session. Does not accept arbitrary config IDs.

NameRequiredDescriptionDefault
session_idYes
breakpoint_idYes

Output Schema

NameRequiredDescription

No output parameters

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 and destructiveHint=false, so the mutation profile is partly covered. The description adds the meaningful constraint that only session-scoped IDs are valid, but says nothing about behavior when the ID is unknown, stale, or belongs to another session, nor whether removal is idempotent.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and followed immediately by the key constraint. Every clause earns its place and there is no filler.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and the tool is structurally simple. Still, for a mutation with 0% schema coverage the description should mention the failure mode for invalid IDs or point to rad_list_breakpoints for discovering valid IDs — both absent.

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 0% with two required string parameters, so the description carries real weight. 'Breakpoint ID returned by this session' does constrain breakpoint_id's provenance, partially tying it to session_id's scope, but session_id itself is never explained and no format or validation detail is given.

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 ('Remove a breakpoint ID'), which cleanly separates it from rad_set_breakpoint and rad_list_breakpoints. The qualifier 'returned by this session' adds scope but is slightly ambiguous about which operation returns it (presumably rad_set_breakpoint).

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 exclusion 'Does not accept arbitrary config IDs' is a useful when-not-use signal, implying the ID must originate from this session's own tooling. However, it never names the producing sibling (rad_set_breakpoint) or states prerequisites, leaving the positive usage path implicit.

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

rad_run_to_lineB

Run from the current stop to a source line, another stop, or exit.

NameRequiredDescriptionDefault
fileYes
lineYes
timeoutNo
session_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already establish readOnlyHint=false, destructiveHint=false, and openWorldHint=false. The description adds that execution resumes from the current stop and halts at a line, stop, or exit, but it omits details such as timeout behavior, side effects in the debuggee, and the active-session precondition.

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 wording. It is appropriately concise for the action being described.

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 four undocumented parameters, 0% schema coverage, and a debugger action that can resume target execution, one sentence is not complete enough. The output schema and annotations reduce some burden, but key calling details remain missing.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. "Source line" loosely implies file and line, but session_id and timeout are entirely unexplained, and no format, units, or defaults are provided.

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 debugger action: run from the current stop to a source line, another stop, or exit. The verb and target are clear, though it does not explicitly distinguish this from sibling tools such as rad_continue or rad_step.

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 by "from the current stop," suggesting the tool applies when execution is paused. However, it gives no explicit when-to-use vs when-not-to-use guidance or named alternatives.

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

rad_select_contextA

Select a thread and/or reported stack frame before evaluating locals. Frame indices come from rad_get_stack.

NameRequiredDescriptionDefault
thread_idNo
session_idYes
frame_indexNo
expected_stop_countNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare it is not read-only but non-destructive and closed-world. The description adds useful sequencing context and the source of frame indices, but does not explain what selecting context changes, whether it persists, or how expected_stop_count affects behavior.

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

Conciseness5/5

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

Two direct sentences with no wasted text. The prerequisite statement is front-loaded and easy for an agent to act on.

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?

Output schema exists and annotations cover safety, but the input schema has no parameter descriptions. The description explains the core selection intent and one prerequisite, yet it is not complete enough for all four parameters, particularly expected_stop_count.

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

Parameters2/5

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

Schema coverage is 0%, so the description must carry parameter meaning. It hints at thread_id and frame_index and says frame indices come from rad_get_stack, but session_id and especially expected_stop_count are left unexplained.

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: select a thread and/or stack frame. It also distinguishes the tool's role by tying it to evaluating locals, which differentiates it from siblings like rad_get_stack and rad_evaluate.

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?

Clearly says to use it before evaluating locals and that frame indices come from rad_get_stack. The prerequisite is explicit, though it does not spell out when not to use it or name alternatives beyond the implied sequence.

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

rad_set_breakpointB

Configure one breakpoint: file+line, function name, or address string. Configuration does not prove symbol resolution.

NameRequiredDescriptionDefault
fileNo
kindYes
lineNo
addressNo
functionNo
session_idYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

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

Annotations already establish that this is a non-read-only, non-destructive, non-open-world mutation. The description adds a meaningful caveat that setting a breakpoint does not guarantee symbol resolution, which is useful context beyond annotations. However, it does not describe duplicate handling, failure behavior, session state requirements, or side effects, so it remains only adequate.

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

Conciseness5/5

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

The description is two short sentences with no wasted text. The core action is front-loaded, and the resolution caveat is a valuable second sentence that earns its place.

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?

The output schema covers return values and annotations cover the safety profile, but the description is incomplete for a six-parameter mutation tool with 0% schema description coverage. It leaves session_id and kind semantics unexplained and provides no usage guidance for selecting this tool over siblings.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the burden. It partially maps the three breakpoint modes to file+line, function, and address, but it omits session_id entirely and does not explain the required kind parameter, optionality, or valid field combinations. This is insufficient compensation for six parameters with no schema prose.

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 and resource: "Configure one breakpoint." It also enumerates the three targeting modes (file+line, function name, address string), which distinguishes it from breakpoint-listing and removal siblings. It does not explicitly contrast with alternatives like rad_remove_breakpoint or rad_run_to_line, 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 Guidelines2/5

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

The description gives no explicit when-to-use guidance, prerequisites, or alternative tools. The note that configuration does not prove symbol resolution is a useful caveat, but it does not tell the agent when to choose this tool over siblings such as rad_run_to_line or rad_list_breakpoints.

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

rad_stepB

Step the selected stopped thread at source/instruction level. Returns a new stop, exit or timeout.

NameRequiredDescriptionDefault
kindNoover
timeoutNo
session_idYes
expected_run_genNo
expected_stop_countNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare a non-readonly, non-destructive, closed-world mutation, so the safety profile is covered. The description usefully adds the outcome set (new stop / exit / timeout) and the stopped-and-selected precondition, but says nothing about how stepping interacts with breakpoints or what happens on timeout.

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 front-loaded sentences with no filler; the precondition and outcome come before anything else. Slightly under-sized for the parameter complexity, but that is a completeness issue, not a verbosity one.

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 5-parameter tool with 0% schema description coverage, the description leaves an agent unable to choose the correct 'kind' value or populate the run-gen/stop-count guards. An output schema covers the return payload, but the input side is essentially undocumented.

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

Parameters2/5

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

Schema coverage is 0% for 5 parameters, so the description must carry the load, and it largely does not: the 'kind' enum values (into/over/out vs into_instruction/over_instruction) are only hinted at by 'source/instruction level', and 'timeout', 'expected_run_gen' and 'expected_stop_count' (apparently optimistic-concurrency guards) are never explained.

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 (step) against a specific resource (the selected stopped thread) and names the granularity (source/instruction level). It is distinguishable from rad_continue / rad_run_to_line, though it does not name those siblings explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the precondition 'selected stopped thread', but the description never says when to step versus continue, pause, or run-to-line, and lists no exclusions or alternatives among the many sibling tools.

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

rad_wait_for_stopB
Read-only

Wait at most 60 seconds for a NEW stop/exit. Timeout does not cancel execution. Defaults to the last execution baseline.

NameRequiredDescriptionDefault
timeoutNo
session_idYes
after_run_genNo
after_stop_countNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive), and the description adds genuinely useful behavioral context: the wait is bounded by a timeout and 'Timeout does not cancel execution', which is crucial for an agent to avoid assuming the target was aborted. It omits what a stop result contains, but an output schema exists.

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

Conciseness4/5

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

Three terse sentences, front-loaded with the core action and the important non-cancellation caveat. The final sentence about the baseline is efficient in size but opaque in meaning, so it earns only partial credit.

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?

An output schema exists, so return values need not be explained, and the non-cancellation caveat is a strong addition. But the timeout figure contradicts the schema default and the baseline/after_run_gen semantics are unexplained, leaving an agent uncertain about the parameters that distinguish this call.

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

Parameters2/5

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

Schema description coverage is 0% across 4 parameters, so the description must compensate and largely fails: it mentions a timeout but gives a value (60s) inconsistent with the schema default of 10, and the baseline sentence only vaguely gestures at after_run_gen/after_stop_count without explaining their meaning. session_id is entirely unaddressed.

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

Purpose4/5

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

Description states a specific verb and resource: 'Wait ... for a NEW stop/exit', making the debugger-blocking behavior clear and distinguishable from siblings like rad_continue or rad_get_state. However, the hard-coded '60 seconds' conflicts with the schema's timeout default of 10, slightly muddying the stated 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?

The phrase 'NEW stop/exit' and 'execution baseline' implies it is used after resuming execution (rad_continue) to await the next break or exit, but the description never states this explicitly nor names alternatives like polling rad_get_state. Usage is inferable from context 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 20 tool updatesv0.1.0
    • First observedrad_address_to_line
    • First observedrad_attach
    • First observedrad_close_session
    • First observedrad_continue
    • First observedrad_create_session
    • First observedrad_evaluate
    • First observedrad_get_stack
    • First observedrad_get_state
    • First observedrad_launch
    • First observedrad_list_breakpoints
    • First observedrad_list_processes
    • First observedrad_list_sessions
    • First observedrad_open_crash_dump
    • First observedrad_pause
    • First observedrad_remove_breakpoint
    • First observedrad_run_to_line
    • First observedrad_select_context
    • First observedrad_set_breakpoint
    • First observedrad_step
    • First observedrad_wait_for_stop

TDQS

A3.5/5.0

Scored across 20 tools

Disambiguation4/5

Most tools target clearly distinct actions: session lifecycle, process control, breakpoints, and inspection are well separated. Minor overlap exists between rad_create_session and rad_launch/rad_attach, and between rad_continue and rad_wait_for_stop, but descriptions clarify the relationship.

Naming Consistency5/5

All tools use the rad_ prefix with snake_case and follow a predictable verb_noun or single-verb pattern (create_session, set_breakpoint, step, continue). The convention is uniform and immediately readable.

Tool Count4/5

Twenty tools is above the typical 3-15 range, but for a full debugger domain each tool maps to a necessary operation. The set is comprehensive rather than padded, though it is on the heavy side.

Completeness4/5

The surface covers session management, launch/attach, execution control, breakpoints, stack/expression inspection, and crash dumps. Notable gaps remain around raw memory/register read-write and disassembly, which are common debugger needs but not strictly blocking for many workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables step-through debugging for C#, Node.js/TypeScript, Python, and Dart applications on Windows through a unified MCP interface. Acts as a bridge between MCP clients and various debug adapters, providing consistent debugging workflows with breakpoints, variable inspection, and process attachment capabilities.
    1 npm
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables coding agents to use a real debugger (Python via debugpy) for launching, attaching, setting breakpoints, stepping through code, inspecting stack frames, and evaluating expressions through MCP tools.
    27
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables coding agents to connect to Debug Adapter Protocol debuggers over MCP, allowing them to launch or attach to native targets, control execution, set breakpoints and watchpoints, inspect stacks, variables, memory, and exceptions, and capture agent-friendly debugger snapshots.
    18
    266 npm
    3
    Apache 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables launching and controlling a debugpy debug session through MCP, including setting breakpoints, stepping, evaluating expressions, and observing debugger state and events.
    MIT