Skip to main content
Glama

qwen-dap-mcp

Qwen Code에 진짜 네이티브 디버거를 제공하세요.

네이티브 런타임 디버깅, 크래시 분석, 제한된 자율 수정/검증 루프를 위한 디버거에 구애받지 않는 Debug Adapter Protocol (DAP) → Model Context Protocol (MCP) 브리지입니다.

CI Release npm npm downloads MCP Registry License Node

npm에 @slp-dev1/qwen-dap-mcp로, 공식 MCP Registry에는 io.github.SLP-DEV1/qwen-dap-mcp로 게시되어 있습니다.

왜 필요한가

코딩 에이전트는 소스 읽기와 편집에 능숙하지만, 네이티브 크래시는 디버거만이 제공할 수 있는 증거를 필요로 하는 경우가 많습니다: 스택 프레임, 레지스터, 지역 변수, 디스어셈블리, 예외 상태, 메모리, 모듈, 크래시 덤프.

qwen-dap-mcp는 해당 증거를 MCP를 통해 노출하여 Qwen Code 및 기타 MCP 클라인트가 에이전트 내부에 디버거 프로토콜을 내장하지 않고도 네이티브 실패를 추론할 수 있게 합니다.

무엇을 할 수 있나

  • 자율 크래시 디버깅 — 진단 → 소스 검사 → 수정 제안 → 수정 적용 → 빌드 → 재현 → 검증.

  • 실제 네이티브 디버거 증거 — 스택, 레지스터, 지역 변수, 예외 상태, 모듈, 디스어셈블리, 메모리 및 소스 연관 관계.

  • CodeLLDB 통합 — DAP를 통해 허가된 로컬 네이티브 대상을 시작하거나 연결할 수 있습니다.

  • 업스트림 LLVM lldb-dap 통합 — lldb-dap을 CodeLLDB 별칭으로 취급하지 않고 일급 라이브 디버깅 및 코어 파일 검사를 제공합니다.

  • Windows 미니덤프 / 사후 디버깅 — 기존 .dmp 파일을 열고 구조화된 증거를 복구합니다.

  • 런타임 근본 원인 역추적 — 의심스러운 값을 제한된 호출자 프레임을 따라 프로젝트가 제어하는 것으로 보이는 생산자 후보 쪽으로 추적합니다.

  • 검증 지문 — 수정됨, 동일 크래시, 실패 변경, 판정 불가 재현을 구분합니다.

  • 안전 경계 — 임의 셸, 소스 작성 프리미티브, 일반 메모리 쓰기 프리미티브, MCP 서버 내부의 숨은 자율 상태가 없습니다.

Related MCP server: DebugPilot

30초 예제

You: Debug why app.exe crashes with --repro

Qwen Code
  ↓
starts CodeLLDB or upstream lldb-dap through qwen-dap-mcp
  ↓
finds the native failure and first project-controlled frame
  ↓
correlates instruction operands ↔ registers ↔ locals
  ↓
backtracks runtime evidence toward a likely producer
  ↓
reads the relevant source
  ↓
applies a minimal evidence-backed fix
  ↓
builds and repeats the same reproduction
  ↓
verifies the original crash fingerprint no longer reproduces

Qwen Code에 설치

GitHub 릴리스에서 직접 설치:

qwen extensions install SLP-DEV1/qwen-dap-mcp

또는 게시된 scoped npm 확장을 설치합니다:

qwen extensions install @slp-dev1/qwen-dap-mcp

그런 다움 확장과 MCP 서버를 확입니다:

/mcp
/skills

qwen-dap-mcp MCP 서버와 번들된 native-runtime-debug Skill이 표시되어야 합니다.

GitHub 릴리스 아카이브는 자족적입니다: 런타임 npm 의존성이 dist/index.js에 번들되어 있습니다.

다른 stdio MCP 클라이언트에서 사용

로컬 stdio 명령을 수용하는 MCP 클라이언트의 경우, 게시된 npm 패키지를 다음과 같이 시작할 수 있습니다:

npx -y @slp-dev1/qwen-dap-mcp

일반적인 클라이언트 구성은 다음과 같습니다:

{
  "mcpServers": {
    "qwen-dap-mcp": {
      "command": "npx",
      "args": ["-y", "@slp-dev1/qwen-dap-mcp"]
    }
  }
}

Qwen Code가 기본 통합이며 프로젝트의 확장 패키징 및 릴리스 검증이 다루는 경로입니다. MCP 서버 자체는 로컬 stdio를 통해 통신합니다.

배포

채널

식별자 / 설치 경로

GitHub의 Qwen Code

qwen extensions install SLP-DEV1/qwen-dap-mcp

npm의 Qwen Code

qwen extensions install @slp-dev1/qwen-dap-mcp

npm

@slp-dev1/qwen-dap-mcp

공식 MCP Registry

io.github.SLP-DEV1/qwen-dap-mcp

GitHub Releases

자족적 확장 아카이브

디버거 어댑터

CodeLLDB와 업스트림 LLVM lldb-dap는 모두 일급 어댑터 경로입니다. 기존 CodeLLDB 워크플로는 계속 지원되며, LLVM 자체가 제공하는 디버거 어댑터를 원할 때는 debug_this_crash(mode="lldb-dap")를 사용하세요. lldb-dap 경로는 라이브 시작/연결과 dumpAdapter="lldb-dap"를 통한 읽기 전용 코어 파일 분석을 지원합니다.

발견은 명시적인 adapterPath, LLDB_DAP_PATH, 정식 또는 버전이 있는 PATH 바이너리, 일반 LLVM 체인 디렉터리 / LLVM_HOME, 그리고 macOS의 xcrun --find lldb-dap를 지원합니다. 예제, 사후 동작, 수동 전체 툴셋 도우미는 docs/lldb-dap.md를 참조하세요.

자율 크래시 디버깅

고수준 debug_this_crash 워크플로는 제한된 자율 디버깅 사이클을 구동할 수 있습니다:

Diagnose
  ↓
select project frame
  ↓
operand ↔ register ↔ variable evidence
  ↓
call-chain / runtime provenance backtrack
  ↓
inspect source
  ↓
propose minimal fix
  ↓
apply fix
  ↓
build
  ↓
reproduce
  ↓
verify fingerprint + evidence quality
  ├── fixed → stop
  ├── same crash → revise fix
  ├── changed crash → re-baseline active failure
  ├── inconclusive → finish reproduction, do not edit
  └── budget exhausted / weak evidence → stop and report

자율 사이클 시작:

debug_this_crash(
  mode="codelldb",
  program="C:\\build\\app.exe",
  args=["--repro"],
  cwd="C:\\repo\\app",
  analysis={
    projectRoots:["C:\\repo\\app"],
    projectModules:["app.exe"],
    callerDepth:3
  },
  workflow={
    stage:"autonomous",
    maxIterations:3
  }
)

첫 번재 호출은 명시적으로 직렬화 가능한 상태, 의존성을 고려한 nextActions, 루트 및 활성 크래시 지문, 제한된 기록, 런타임 역추적 증거, 검증 품질, 중지/계속 상태를 포함한 workflow.autonomousAgent를 반환합니다.

서버는 숨은 자율 루프 메모리를 유지하지 않습니다. Qwen Code는 요청된 소스 편집, 빌드, 테스트, 소스 제어 작업을 일반적인 승인된 도구를 통해 수행합니다.

자율 상태

상태

의미

needs-evidence

아직 패치하지 마세요; 더 강력한 프로젝트/호출자 증거를 수집하세요.

needs-fix

증거가 첫 번째 제한된 소스 수정을 하기에 충분히 강력함.

retry-fix

동일한 활성 크래시가 유지됨; 수정을 개선하세요.

needs-reproduction

검증이 너무 일찍 중지됨; 원래 재현을 끝내세요.

changed-failure

다른 크래시가 나타남; 루트 지문을 유지하고 기준을 다시 설정하세요.

fixed

전체 재현이 깨끗하게 종료됨.

budget-exhausted

최대 자동 수정 시도에 도달함.

blocked

다른 자율 편집을 위한 신뢰할 만한 증거를 얻을 수 없음.

지능적 진단

진단 계층은 원시 디버거 사실과 추론을 분리하여 보고합니다:

  • classification — 현재 크래시/중지 계열,

  • faultLocation — 말 그대로의 디버거 중지 프레임,

  • projectFrame — 가능성이 높은 첫 번째 애플리케이션 제어 프레임,

  • frameSelection — 점수화된 스택 프레임 증거 및 런타임/시스템 제외,

  • operandAnalysis — 명령어 피연산자, 참조 레지스터, 메모리 피연산자 및 레지스터↔지역 변수 바인딩,

  • callChain — 프로젝트 호출자, 런타임 경계, 반복 프레임 및 출처 단서,

  • hypotheses — 명시적 신뢰도와 함께 순위가 매겨진 설명,

  • fixWorkflow — 후보 소스 위치 및 증거에 기반한 좁은 수정 방향,

  • verificationBaseline — 간결한 실패 시그니처,

  • rootCauseBacktrack — 생산자 후보를 향한 제한된 런타임 출처 추적,

  • verificationQuality — 검증 후 디버거 증거 강도.

높은 프로젝트 프레임 점수는 "프로젝트 코드일 가능성이 높음"을 의미하지 "입증된 근본 원인"을 의미하지 않습니다. 인과 주장은 여전히 예외 상태, 피연산자/레지스터/지역 변수, 호출자 출처, 소스 확 및 재현과 연결되어야 합니다.

크래시 덤프 / 미니덤프

하나의 고수준 호출로 기존 덤프를 열고 진단합니다:

debug_this_crash(
  mode="dump",
  dumpPath="C:\\crashes\\app.dmp",
  program="C:\\build\\app.exe",
  sourceMap={"D:/agent/_work/project/src":"C:/work/project/src"},
  analysis={projectRoots:["C:\\repo\\app"]}
)

덤프 세션은 고정/읽기 전용입니다. 과거 덤프는 캡처된 실패에 대한 증거를 확립할 수 있지만, 소스 수정은 여전히 검증을 위해 재빌드된 라이브 재현 또는 새로 생성된 덤프가 필요합니다.

아키텍처

Qwen Code / MCP client
        │
        │ MCP over stdio
        ▼
   qwen-dap-mcp
        │
        ├── lifecycle/concurrency guard
        ├── bounded DAP snapshot layer
        ├── crash classification
        ├── project-frame scoring
        ├── operand/register/local correlation
        ├── call-chain provenance
        ├── runtime root-cause backtracking
        ├── verification fingerprints + quality scoring
        └── autonomous action state machine
        │
        │ DAP over stdio
        ▼
 CodeLLDB / lldb-dap / DAP adapter
        │
        ├── authorized live target
        └── crash dump / core file

MCP 서버에는 HTTP 리스너가 없습니다. 어댑터는 셸 없이 로컬에서 생성되며 stdio를 통해 통신합니다.

MCP 툴셋

기본 agent 툴셋은 코딩 에이전트가 모든 저수준 디버거 프리미티브에 컨텍스트를 소비하지 않도록 의도적으로 아래의 9가지 고수준 도구만 노출합니다. 전체 수동 DAP 표면이 의도적으로 필요할 때 QWEN_DAP_MCP_TOOLSET=full을 설정하세요. docs/toolsets.md를 참조하세요.

기본 agent 도구

도구

용도

debug_this_crash

고수준 라이브/CodeLLDB/ldb-dap/덤프 진단, 검증 및 자율 오케스트레이션

debug_diagnose_stop

현재 중지 상태의 지능적 진단

debug_source_disassembly

결함 상관 관게 및 프로젝트 프레임의 명령어/피연산자/레지스터/지역 변수 콘텐스트

debug_run_to_stop

시자/연결 및 경쟁 없이 안전하게 중지/종료/종결 대기

debug_open_dump

읽기 전용 사후 검사를 위해 네이티브 코어/미니덤프 열기

debug_snapshot

제한된 원시 런타임 스내프숏 캡처

debug_status

현재 세션 상태 읽기

debug_continue

승인된 라이브 대상을 다음 중지까지 재개

debug_disconnect

연결 해제 및 디버거 세션 정리

full 셋은 추가로 수동 브레이크포인트/와치포인트 관리, 스테핑, 평개, 스레드/스택/스코프/변수, 모듈, 디스어셈블리, 제한된 메모리 읽기, 예외 제어, 일반 DAP 시작/연결, 그리고 CodeLLDB / lldb-dap 수명 주기 프리미티브를 노출합니다.

검증 모델

검증은 의도적으로 디버거 증거를 빌드 성공, 프로젝트 테스트, 정확한 재현 입려과 같은 외부 보장과 분리합니다.

판정:

  • fixed — 전체 재현이 깨끗하게 성공적인 종료 결과에 도달함,

  • not-fixed — 동일한 크래시 계열/시그니처가 재현됨,

  • changed-failure — 실해이 여전히 크래시했지만 활성 실패 시그니처가 변경됨,

  • inconclusive — 성공 또는 실패를 주장하기에 증거가 불충분함.

브레이크포인트, 진입 중지, 일시 중지, 스텝 또는 구성된/최초 발생 예외 중지는 의도적으로 수정의 증거가 아닙니다.

실제 Windows 검증

저장소에는 Windows에서 실제 CodeLLDB 스모크 워크플로가 포함되어 있습니다. 미니덤프 스모크 경로:

  1. PDB 심볼로 MSVC C++ 크래시 대상을 컴파일하고,

  2. 의도적으로 액세스 위반을 트리거하고,

  3. MiniDumpWriteDump로 실제 .dmp를 작성하고,

  4. 실제 CodeLLDB를 시작하고,

  5. DAP를 통해 덤프를 열고,

  6. 스택/소스/레지스터/모듈/디스어셈블리 복구를 검증하고,

  7. 지능적 프로젝트 프레임 진단을 실행하고,

  8. 실제 덤프에서 자율 상태/지문/액션 생성을 검증합니다.

개발

요구 사항:

  • Node.js 20+

  • npm

전체 검사를 실행합니다:

npm ci --ignore-scripts
npm run check

npm run check는 TypeScript 빌드, 테스트, 확장 패키지 스테이징을 수행합니다. CI는 Node 20과 22에서 실행됩니다.

안전 모델

  • 로컬 stdio MCP 전송만 사용,

  • 내장 원격 HTTP 디버거 서비스 없음,

  • 임의 셸/소스 작성 MCP 프리미티브 없음,

  • 임의 메모리 쓰기 MCP 프리미티브 없음,

  • 외부 증거 없이 자동 소스 롤백 없음,

  • 라이브 연결은 승인된 로컬 대상에만 의도됨,

  • 사후 덤프는 실행 제어 작업에 대해 고정됨,

  • 결정적 중지 조건을 갖춘 제한된 자율 수정 예산,

  • 약하거나 불충분한 증거는 추가 소스 편집을 트리거하지 않음,

  • 최초 발생/구성된 예외 중지는 치명적 상황으로 취급되지 않음.

기여

이슈와 풀 리퀘스트를 환영합니다. 개발 지침은 CONTRIBUTING.md를 참조하세요.

프로젝트가 유용하시다면, 저장소에 스타를 남겨 주시면 다른 Qwen Code 및 MCP 사용자들이 이 프로젝트를 발견하는 데 도움이 됩니다.

라이선스

Apache License 2.0. LICENSE를 참조하세요.

Available Tools

18 tools
debug_adaptive_evidenceCollect Adaptive Runtime EvidenceA
Read-onlyIdempotent

Collect runtime evidence in progressively richer bounded phases instead of immediately requesting a maximal snapshot. Use it when token/DAP cost matters or the amount of evidence needed is unknown: it starts with stack and small locals, expands only when symbols, exception state, or variables are insufficient, and finishes with a full runtime report when needed. Do not use it to replace deliberate deep inspection when the required evidence is already known.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceFullNoForce the full evidence phase even if the cheap snapshot already looks sufficient.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
maxVariablesNoMaximum locals/registers per scope in the richest phase.

Output Schema

ParametersJSON Schema
NameRequiredDescription
reportNo
snapshotNo
selectedPhaseYes
evidenceBudgetYes
expansionReasonsYes

TDQS

A4.7/5.0
Behavior5/5

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

The description explains the phased behavior in detail: it starts with stack and small locals, expands only when symbols/exception state/variables are insufficient, and finishes with a full runtime report when needed. Since annotations already mark it read-only and idempotent, the description adds meaningful behavior context beyond static hints.

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 with no filler: behavior, usage condition, and exclusion are each covered in a focused, front-loaded manner. Every 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 full schema parameter coverage, an output schema, and strong annotations, the description provides the missing behavioral and usage context. An agent has everything needed to decide when to call it and understand how it behaves.

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

Parameters3/5

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

The input schema already covers 100% of parameter descriptions, including forceFull, sessionId, and maxVariables. The description does not add parameter-level detail, but because the schema is complete, the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly identifies a specific verb and resource: 'Collect runtime evidence' in progressively richer bounded phases. It also explicitly contrasts itself with requesting a maximal snapshot and with deliberate deep inspection, which distinguishes it from sibling tools like debug_snapshot and debug_runtime_report.

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

Usage Guidelines5/5

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

It gives explicit guidance on when to use the tool ('when token/DAP cost matters or the amount of evidence needed is unknown') and when not to use it ('Do not use it to replace deliberate deep inspection when the required evidence is already known'). This is direct and actionable.

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

debug_causal_traceTrace Runtime CausalityA
Destructive

Build a bounded consumer-to-writer evidence chain for one suspicious debugger-visible value. Use it after crash or differential evidence identifies a value whose runtime producers matter. It combines the current stopped snapshot with repeated watchpoint writer tracing. Do not use it for frozen dumps or unsafe-to-resume targets, and do not treat an observed writer as automatic proof of root cause.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDebugger-visible variable or expression whose producer chain should be traced.
maxDepthNoMaximum number of confirmed writer events promoted into the causal producer chain.
maxStopsNoMaximum watchpoint stops available to the underlying bounded temporal trace.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
timeoutMsNoAggregate deadline for the entire causal trace operation.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
traceYes
consumerYes
conclusionYes
limitationsYes
producerChainYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry destructiveHint=true, and the description adds meaningful behavior beyond that: the mechanism (combining a stopped snapshot with repeated watchpoint tracing, which implies resuming the target), the bounded stop budget, and the epistemic caveat that an observed writer is not automatic proof of root cause. No contradiction with the annotations; this context is genuinely additive.

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 with the core purpose front-loaded, followed by usage criteria, then exclusions and a result-interpretation caveat. Every sentence earns its place; there is no filler and no repetition of what the schema or annotations already declare.

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

Completeness4/5

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

For a tool with a full output schema, 100% parameter coverage, and annotations, the description covers purpose, mechanism, usage window, hard exclusions, and a caveat about interpreting results. The only minor gap is that side effects beyond 'unsafe-to-resume' are not elaborated, but destructiveHint already flags the safety profile.

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 five parameters (name, maxDepth, maxStops, sessionId, timeoutMs) are fully documented in the schema. The description adds no per-parameter semantics beyond the schema, which meets the stated baseline of 3 but earns no extra credit.

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

Purpose5/5

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

The description opens with a specific verb-resource pair ('Build a bounded consumer-to-writer evidence chain for one suspicious debugger-visible value') that is more precise than the title. It distinguishes the tool from siblings through its scope (bounded, single value, watchpoint-based writer tracing) and usage context (post-crash or differential evidence), so an agent can tell it apart from debug_find_writer or debug_this_crash without inspecting schemas.

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

Usage Guidelines4/5

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

The description gives an explicit when-to-use trigger ('after crash or differential evidence identifies a value whose runtime producers matter') and explicit exclusions ('Do not use it for frozen dumps or unsafe-to-resume targets'). It stops short of naming which sibling tools to use in those exclusion cases, so it is clear but not fully prescriptive about alternatives.

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

debug_compare_runsA
Read-onlyIdempotent

Compare bounded runtime evidence from two existing stopped DAP sessions. Use this for baseline or known-good versus candidate or failing differential debugging after both sessions have reached comparable stops. It compares stack identities, locals, registers, exception state, symbol health, and modules semantically; non-null raw address-only changes are marked unstable rather than causal evidence. Do not use it to launch, resume, or alter either target; prepare both runtime states with the normal lifecycle tools first.

ParametersJSON Schema
NameRequiredDescriptionDefault
snapshotNoBounded evidence capture settings applied independently to both sessions.
timeoutMsNoAggregate deadline for collecting both snapshots. Cancellation propagates to pending DAP requests/event waits in this operation context.
baselineSessionIdYesSession representing the known-good or baseline runtime state.
candidateSessionIdYesSession representing the failing or changed runtime state.

Output Schema

ParametersJSON Schema
NameRequiredDescription
diffYes
baselineYes
guidanceYes
candidateYes
evidenceBudgetYes
baselineSessionIdYes
candidateSessionIdYes

TDQS

A4.7/5.0
Behavior5/5

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

The description adds meaningful behavioral context beyond the readOnly/idempotent/non-destructive annotations: it discloses that comparison is semantic, that stack/locals/registers/exception/symbol/module evidence is compared, and that 'non-null raw address-only changes are marked unstable rather than causal evidence.' This tells the agent how results should be interpreted and reinforces that the tool observes rather than mutates sessions.

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

Conciseness5/5

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

The description is three focused sentences. The first states purpose, the second gives usage context and the comparative scope, and the third provides an exclusion and directs preparation. Every sentence earns its place with no repetition of schema or annotation content.

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

Completeness5/5

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

Given the rich input schema, output schema, and annotations, this description is complete for safe and correct invocation. It covers when to use, what is compared, how unstable address-only changes are treated, and what the tool must not be used for. No critical operational knowledge 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%, with both required session parameters and the nested snapshot object clearly documented. The prose description adds contextual framing but does not materially expand on the parameter meaning already present in the schema, so it stays at the baseline 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?

The description opens with a specific verb and resource: 'Compare bounded runtime evidence from two existing stopped DAP sessions.' It then distinguishes the tool from single-session diagnostics by framing it for 'baseline or known-good versus candidate or failing differential debugging,' which cleanly separates it from sibling tools like debug_snapshot and debug_diagnose_stop.

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

Usage Guidelines5/5

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

It explicitly states when to use the tool: for differential debugging 'after both sessions have reached comparable stops.' It also gives clear when-not guidance: 'Do not use it to launch, resume, or alter either target; prepare both runtime states with the normal lifecycle tools first.' This directs the agent to alternative lifecycle tooling without ambiguity.

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

debug_diagnose_stopDiagnose Current Debug StopA
Read-onlyIdempotent

Diagnose an already stopped live or postmortem debug session without changing execution state. Use this when a debugger has captured the failure and you want project-frame selection, crash classification, operand/register/variable bindings, call-chain provenance, ranked hypotheses, and a fix/rebuild/reproduce/verify plan; use debug_snapshot instead when only raw evidence is needed. The tool is read-only and returns both the bounded snapshot and the derived diagnosis, including collection limitations when optional debugger evidence is unavailable.

ParametersJSON Schema
NameRequiredDescriptionDefault
analysisNoHints used to distinguish project code from runtime, system, or third-party frames.
threadIdNoStopped DAP thread to inspect; omit to use the session-selected stopped thread.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
moduleCountNoMaximum loaded modules to include when module collection is enabled.
stackLevelsNoMaximum number of stack frames to inspect when collecting crash evidence.
includeModulesNoInclude a bounded list of loaded executable images and libraries.
disassembleAfterNoNumber of instructions after the selected instruction to request.
disassembleBeforeNoNumber of instructions before the selected instruction to request.
includeDisassemblyNoInclude best-effort disassembly around the selected instruction pointer when supported.
includeExceptionInfoNoRequest structured exception information for the stopped thread when supported.
maxVariablesPerScopeNoMaximum variables returned per inspected scope, bounding evidence size.

Output Schema

ParametersJSON Schema
NameRequiredDescription
snapshotYes
diagnosisYes

TDQS

A4.4/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 bar is lower. The description adds value beyond those by stating that it 'does not change execution state', that it returns both a bounded snapshot and a derived diagnosis, and that it discloses collection limitations when optional debugger evidence is unavailable. This gives useful behavioral context beyond the structured annotations.

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 dense but tightly structured: it front-loads the core purpose, lists the derived outputs, routes to the sibling alternative, and closes with read-only behavior and output scope. Every clause contributes, and there is no redundant repetition of the tool name or schema contents.

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

Completeness4/5

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

For a tool with 11 parameters, nested objects, no required parameters, and an output schema, the description covers the key operational context: the precondition ('already stopped'), the read-only guarantee, the distinction from debug_snapshot, and the bounded/limited nature of results. It does not enumerate parameter details, but the input schema fully covers those, so the description is sufficiently 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 every parameter in detail. The description does not add parameter-specific semantics, but it does contextualize the optional evidence gathering and bounded results, which relates to the parameters. Baseline 3 is appropriate because the schema carries the parameter documentation burden.

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 ('Diagnose'), a precise resource ('already stopped live or postmortem debug session'), and a concrete set of outputs (project-frame selection, crash classification, bindings, provenance, ranked hypotheses, fix plan). It also explicitly differentiates itself from debug_snapshot, so an agent can distinguish it from siblings 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?

The description gives a clear when-to-use condition ('when a debugger has captured the failure and you want...') and names the alternative (debug_snapshot) with the condition that selects it ('when only raw evidence is needed'). This is explicit routing guidance rather than leaving the choice to inference.

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

debug_disconnectDisconnect DebuggerA
Destructive

End the active DAP session and stop its local adapter process. Use this when debugging is finished or the session must be reset; do not call it when more runtime evidence is still needed. With terminateDebuggee=true it may also terminate a live target process, so this operation can destroy the current runtime state and cannot be treated as read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
terminateDebuggeeNoWhether the debugger should terminate the live debuggee while disconnecting; set false to request detach/preserve behavior when the adapter supports it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
disconnectedYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark the tool as destructive, but the description adds valuable context: it ends the session, stops the adapter process, may terminate a live target with terminateDebuggee=true, and explicitly warns that runtime state can be destroyed. This meaningfully exceeds the annotation signal.

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

Conciseness5/5

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

Three sentences, each earning its place: the first states the core operation, the second provides usage guidance, and the third warns about destructive behavior. No filler or redundant restatement.

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 two well-documented optional parameters, an output schema, and annotations already covering safety traits, the description covers purpose, appropriate usage, and destructive consequences. Nothing needed to invoke the tool correctly 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 both parameters are already documented. The description adds some interpretation around terminateDebuggee's destructive potential, but the schema already explains the detach/preserve behavior, so the description provides only marginal added value.

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

Purpose5/5

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

The description states a specific verb ('End') and resource ('active DAP session') plus the local adapter process, making the operation's scope unambiguous. It is clearly distinct from siblings like debug_continue or debug_snapshot even without naming them.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use and when-not-to-use guidance: use when debugging is finished or must be reset, and do not call when more runtime evidence is needed. It does not name an alternative tool, so it stops short of a full 5.

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

debug_find_writerFind Runtime WriterA
Destructive

Temporarily watch a variable or debugger expression, resume an authorized live target, and capture the first resulting stop to identify the immediate writer candidate. Use this after a stopped-state diagnosis suggests a value was corrupted and runtime provenance is needed; do not use it for crash dumps or when resuming is unsafe. Adapters with DAP data-breakpoint support use that protocol directly; GDB 14/15 uses a bounded watch/rwatch/awatch command through DAP REPL because those releases do not advertise native data breakpoints. The tool removes only the temporary watch it created and never automatically continues through an unrelated stop.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesVariable child name or debugger expression to watch. Without variablesReference, the expression is resolved in frameId/current frame when supported. GDB fallback expressions must not contain control characters or line breaks.
frameIdNoOptional stopped frame used to resolve an expression; omit to use the current snapshot frame. Ignored by native DAP child resolution when variablesReference is supplied.
snapshotNoBounds for the evidence snapshot captured after execution stops.
threadIdNoStopped thread to resume and inspect; omit to use the debugger-selected stopped thread.
conditionNoOptional adapter-supported condition for native DAP data breakpoints. Intentionally rejected by the bounded GDB fallback.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
timeoutMsNoMaximum time in milliseconds to wait for a stop, exit, or termination after resuming.
accessTypeNoRequested watchpoint access mode. write is the normal choice when finding who corrupts a value; GDB maps these to watch/rwatch/awatch.write
hitConditionNoOptional adapter-supported hit-count condition for native DAP data breakpoints. Intentionally rejected by the bounded GDB fallback.
variablesReferenceNoOptional DAP variable-container reference when the adapter advertises native data breakpoints. Omit for the GDB watch-command fallback and pass a debugger-visible expression in name instead.
replaceExistingDataBreakpointsNoFor native DAP data breakpoints, temporarily replace existing MCP-managed watches when true. The GDB fallback never deletes unrelated CLI watchpoints and only removes its own temporary watch.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
beforeYes
statusYes
outcomeYes
guidanceYes
snapshotNo
strategyYes
installedYes
resolutionYes
writerFrameNo
hitConfirmedYes
cleanupWarningNo
writerCorrelationNo
priorDataBreakpointCountYes
replaceExistingDataBreakpointsYes

TDQS

A4.5/5.0
Behavior5/5

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

The description goes well beyond the annotations by explaining that the tool temporarily creates a watch, removes only that watch, never automatically continues through unrelated stops, and uses different mechanisms for DAP vs GDB 14/15. This gives the agent a clear model of side effects and safety boundaries.

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

Conciseness5/5

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

The description is three sentences with no filler: the first front-loads the core action, the second gives usage boundaries, and the third explains protocol behavior and cleanup guarantees. Every sentence adds distinct, necessary 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?

The description is complete for a complex tool with 11 parameters: it covers purpose, safe usage, exclusions, protocol differences, cleanup behavior, and the nature of the resulting stop. The schema and output schema fill in remaining structured details, leaving no critical gap for an agent deciding whether and how to call it.

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 parameter meanings. The description adds protocol-level context such as DAP vs GDB behavior and the bounded watch fallback, but most individual parameter semantics are already fully captured in the input schema itself.

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

Purpose5/5

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

The description states a specific action chain: temporarily watch a variable/expression, resume the target, and capture the first stop to identify the immediate writer candidate. It clearly distinguishes this from sibling tools by framing it as the corruption-provenance diagnostic and explicitly separating it from crash-dump use.

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 explicit when-to-use guidance: after a stopped-state diagnosis suggests corruption and runtime provenance is needed. It also provides explicit when-not-to-use guidance: not for crash dumps or when resuming is unsafe, though it does not name a specific sibling alternative to use instead.

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

debug_open_dumpOpen Native Crash DumpA
Read-onlyIdempotent

Open a local native core/minidump with CodeLLDB, upstream LLVM lldb-dap, or GNU GDB DAP and capture bounded postmortem evidence. Use this when the failure is already recorded and no target process should execute; use debug_run_to_stop or debug_this_crash for a live reproduction instead. The tool starts only the selected local debugger adapter, never launches or resumes the crashed program, treats the dump as read-only, and returns the initial stack/locals/registers plus optional modules and disassembly.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory for the local debugger adapter process; this does not execute the crashed target.
adapterNoDebugger adapter used for postmortem inspection. lldb-dap and gdb use their native coreFile attach semantics.codelldb
programNoPath to the matching executable image. Optional for CodeLLDB/GDB, but required when adapter=lldb-dap because LLVM coreFile loading binds the dump to its program image.
dumpPathYesAbsolute or local path to the native core/minidump file to inspect.
threadIdNoSpecific dump thread to inspect; omit to use the debugger-selected stopped/crashed thread.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
sourceMapNoOptional mapping from source paths recorded in symbols to local source paths. Supported by CodeLLDB/lldb-dap; GDB currently rejects this field rather than guessing undocumented semantics.
adapterPathNoOptional explicit executable path for the selected debugger adapter; omit to use its normal discovery logic.
moduleCountNoMaximum number of modules to include when includeModules is true.
stackLevelsNoMaximum stack frames to include in the initial postmortem snapshot.
includeModulesNoInclude loaded executable images and libraries recorded in the dump.
requestTimeoutMsNoPer-request DAP timeout in milliseconds while opening and inspecting the dump.
includeDisassemblyNoInclude best-effort instructions around the selected crash frame.
maxVariablesPerScopeNoMaximum variables returned per scope in the initial snapshot.

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
attachYes
adapterYes
programNo
dumpPathYes
guidanceYes
snapshotYes
adapterKindYes
capabilitiesYes
readOnlyTargetYes

TDQS

A4.7/5.0
Behavior5/5

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

The description adds important behavioral context beyond the annotations: it starts only the debugger adapter, never launches or resumes the crashed program, treats the dump as read-only, and returns a bounded initial snapshot. This complements the readOnlyHint/idempotentHint annotations and gives the agent a clear safety profile.

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 compact and front-loaded: the action comes first, followed by usage context, safety behavior, and return scope. Every sentence earns its place with no filler or repetition.

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 14-parameter tool, the description covers the key decision points: when to use it, what it does not do, what it returns, and how it differs from live-debugging siblings. The output schema and rich input schema cover the remaining detail, so 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?

Schema description coverage is 100%, so the schema already documents every parameter in detail. The description adds some high-level context about adapters, modules, and disassembly, but it does not substantially go beyond what the input schema already 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 clearly states the specific action: opening a local core/minidump with a local debugger adapter and capturing bounded postmortem evidence. It also explicitly distinguishes this tool from live-debugging siblings like debug_run_to_stop and debug_this_crash, so an agent can select it confidently.

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

Usage Guidelines5/5

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

The description gives explicit when-to-use guidance: use it when the failure is already recorded and no target process should execute. It also names alternatives for live reproduction, leaving no ambiguity about when this tool is appropriate versus its siblings.

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

debug_progress_probeProbe Runtime ProgressA
Destructive

Sample a live target across short resume/pause intervals to distinguish no observed progress, same-frame execution movement, and probable busy loops. Use it when a process appears hung but a single thread snapshot cannot distinguish blocking from spinning. Do not use it when resuming the target is unsafe; sampling perturbs scheduling and is not proof of application-level progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
samplesNoNumber of stopped runtime samples to collect across resume/pause intervals.
threadIdNoPreferred thread to sample; omit to follow the debugger-selected stopped thread.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
intervalMsNoApproximate execution interval between debugger samples.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
samplesYes
capturesYes
evidenceYes
intervalMsYes
limitationsYes
classificationYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, and the description elaborates on the safety profile by warning that sampling perturbs scheduling and that results are not proof of application-level progress. This is valuable 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.

Conciseness5/5

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

Three sentences with no filler: the first states what the tool does, the second gives the trigger condition, and the third gives the exclusion and caveat. Every 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?

For a probe tool with a rich output schema and annotations, the description covers what it does, when to use it, when not to, and its limitations. Nothing essential is missing for an agent to select and 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%, so the schema already documents samples, threadId, sessionId, and intervalMs. The description reinforces the meaning of 'samples' and 'intervalMs' through 'resume/pause intervals', but it does not add substantial parameter-level 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?

The description starts with a specific verb and resource ('Sample a live target') and states the diagnostic goal: distinguishing no observed progress, same-frame execution movement, and probable busy loops. It clearly separates this probe tool from snapshot/hang-analysis siblings by framing it as a resume/pause sampling technique.

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

Usage Guidelines5/5

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

It gives an explicit use case ('when a process appears hung but a single thread snapshot cannot distinguish blocking from spinning') and an explicit contraindication ('Do not use it when resuming the target is unsafe'). It also sets expectations that sampling perturbs scheduling and is not proof of progress.

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

debug_runtime_reportBuild Runtime Debug ReportA
Read-onlyIdempotent

Create a shareable structured report from the current stopped target with normalized crash fingerprinting, Symbol Doctor status, sanitizer stderr correlation, poison-pattern memory hazard detection, ABI register-to-argument mapping, and recent debugger output. Use it only for evidence-driven triage and issue handoff. Do not treat heuristic poison patterns, ABI mappings, or sanitizer text correlation as standalone proof.

ParametersJSON Schema
NameRequiredDescriptionDefault
abiNoABI used to map argument registers; auto infers from debugger registers and host platform when possible.auto
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
redactPathsNoReplace path-like portions of the report fingerprint frame key with a generic marker.
includeOutputTailNoInclude the bounded recent adapter stderr tail used for sanitizer correlation.

Output Schema

ParametersJSON Schema
NameRequiredDescription
abiYes
frameKeyYes
snapshotYes
sanitizerYes
hypothesesYes
outputTailYes
apiAnalysisYes
fingerprintYes
limitationsYes
exceptionKeyYes
symbolDoctorYes
symbolStatusYes
memoryHazardsYes
breakpointPlanYes
fingerprintsV2Yes
stackIntegrityYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive safety. The description adds meaningful behavioral context: it requires a stopped target, includes normalized crash fingerprinting and Symbol Doctor status, correlates sanitizer stderr, and warns that heuristic outputs are not standalone proof.

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 verb, object, and scope, followed by a compact feature list a usage boundary, and a reliability caveat. Every sentence earns its place with no filler or redundancy.

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

Completeness5/5

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

Given a fully documented input schema, an output schema, and safety annotations, the description covers purpose, scope, usage constraints, and heuristic caveats. An agent has enough information to select and invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already fully documents all parameters and defaults. The description does not add parameter-specific semantics beyond referencing related report components, matching the baseline for schema-heavy definitions.

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

Purpose5/5

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

States a specific action ('Create a shareable structured report'), a specific resource ('current stopped target'), and enumerates the report components. The detailed list clearly differentiates it from diagnostic siblings like debug_this_crash or debug_causal_trace.

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

Usage Guidelines4/5

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

Provides clear context: 'Use it only for evidence-driven triage and issue handoff' and a strong boundary about not treating heuristic findings as proof. It does not explicitly name a sibling alternative, which keeps it just below a 5.

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

debug_run_to_stopRun Until Debug Stop or ExitA
Destructive

Run one live launch or attach through an already initialized DAP adapter until the first stopped, exited, or terminated event. Use this when you need deterministic runtime evidence from a reproduction; do not use it for a postmortem dump or when executing/attaching to the local target is not authorized. Launch mode executes application code and attach mode changes debugger control of an existing process, so normal target side effects may occur before the stop. Returns the request result, terminal/stopped outcome, session status, and a bounded snapshot only when a stopped event is captured.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestNoChoose launch to start a new target from configuration, or attach to connect to an existing authorized local target.launch
snapshotNoOptional bounds and evidence categories for the snapshot captured only when execution stops.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
timeoutMsNoMaximum milliseconds to wait for the first stopped, exited, or terminated event.
breakpointsNoOptional source breakpoint groups configured before the debugger completes launch/attach setup.
configurationYesAdapter-specific DAP launch or attach configuration.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusYes
outcomeYes
requestYes
snapshotNo
requestResultYes

TDQS

A4.7/5.0
Behavior5/5

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

It discloses target side effects beyond what annotations state: 'normal target side effects may occur before the stop,' and it explains the difference between launch and attach behavior. It also sets a boundary on the snapshot ('bounded snapshot only when a stopped event is captured') and states the 'already initialized DAP adapter' prerequisite. This aligns with and enriches the destructiveHint=true annotation.

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 sentences, each earning its place: core action, selection guidance, side-effect warning, and return summary. The most important information is front-loaded before the exclusion and return-value details.

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 tool with 6 parameters, nested schema, and an output schema, the description covers the action, prerequisites, side effects, return categories, and exclusions. Missing details such as individual parameter bounds are already covered by the schema, so no critical selection or invocation context 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?

With 100% schema description coverage, the schema already documents the parameters, so the baseline is 3. The description adds operational meaning for the request parameter (launch executes code, attach changes debugger control) and clarifies that snapshots are only produced on a stopped event, which is useful beyond the raw schema.

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

Purpose5/5

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

The description states a specific action ('Run one live launch or attach... until the first stopped, exited, or terminated event'), identifies the resource (already initialized DAP adapter), and scopes the use case to deterministic runtime evidence. It clearly contrasts with postmortem dumps, distinguishing it from sibling debug_open_dump.

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

Usage Guidelines4/5

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

The description explicitly says when to use ('when you need deterministic runtime evidence from a reproduction') and when not to use ('do not use it for a postmortem dump or when executing/attaching to the local target is not authorized'). It does not name a specific alternative tool, but the postmortem exclusion effectively routes the agent away from debug_open_dump.

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

debug_sessionsManage Debug SessionsA
Destructive

Use this tool to list, create, or close isolated DAP sessions before routing other debugger tools with sessionId. Omit sessionId on normal debug tools only when the backward-compatible default session is intended; do not use a global session selector for concurrent work.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionNoManagement action: list current sessions, create a new isolated session, or close one session.list
sessionIdNoRequested ID for create, or target ID for close. Omit on create to generate a bounded session-N identifier.
terminateDebuggeeNoFor close only: request debugger termination of the live target before resetting/removing the session.

Output Schema

ParametersJSON Schema
NameRequiredDescription
actionYes
removedNo
sessionsYes
sessionIdNo
maxSessionsYes
defaultSessionIdYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=false and destructiveHint=true, so the description does not need to restate mutation/destruction. It adds useful behavioral context about session isolation and default-session backward compatibility. It does not spell out that closing can terminate the debuggee, but the schema's terminateDebuggee parameter covers that detail.

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

Conciseness5/5

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

The description is two tight sentences with no filler. The first sentence names the actions and context; the second adds the critical sessionId routing caveat. Every clause 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?

Given 100% schema coverage, an output schema, and annotations covering the destructive profile, the description is sufficient for an agent to select and invoke the tool correctly. The only behaviors not described in prose are already captured in the structured fields.

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 meaningful descriptions for action, sessionId, and terminateDebuggee. The tool description adds routing context but no new parameter-level semantics, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb set ('list, create, or close'), a specific resource ('isolated DAP sessions'), and positions the tool as the session-lifecycle manager that must be used before routing other debugger tools. This clearly distinguishes it from sibling debugger tools like debug_continue or debug_source_disassembly.

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

Usage Guidelines5/5

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

It explicitly says when to use the tool (managing DAP sessions before other tools), and gives concrete exclusion guidance: omit sessionId only for the backward-compatible default session and avoid a global session selector for concurrent work. The description tells the agent how to route between this and the other debug tools.

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

debug_snapshotCapture Runtime Debug SnapshotA
Read-onlyIdempotent

Capture bounded evidence from the current stopped debug state without resuming execution. Use this when an agent needs raw stack, locals, registers, exception details, modules, or nearby instructions; prefer debug_diagnose_stop when you also want ranked crash hypotheses and project-frame selection. This is read-only with respect to the debuggee and returns best-effort evidence plus collection errors for optional data that an adapter cannot provide.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadIdNoStopped DAP thread to inspect; omit to use the session-selected stopped thread.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
moduleCountNoMaximum loaded modules to return when includeModules is true.
stackLevelsNoMaximum number of stack frames to include, from the selected thread top downward.
includeModulesNoInclude a bounded list of loaded executable images and libraries.
disassembleAfterNoNumber of instructions after the current instruction to request when disassembly is enabled.
disassembleBeforeNoNumber of instructions before the current instruction to request when disassembly is enabled.
includeDisassemblyNoInclude best-effort instructions around the selected frame instruction pointer when supported.
includeExceptionInfoNoInclude structured exception information for the stopped thread when the adapter supports it.
maxVariablesPerScopeNoMaximum variables returned per inspected scope, bounding output size.

Output Schema

ParametersJSON Schema
NameRequiredDescription
frameYes
stackYes
localsYes
scopesYes
threadYes
modulesNo
stoppedNo
exceptionNo
registersYes
postmortemNo
disassemblyNo
symbolHealthYes
collectionErrorsNo

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, but the description adds meaningful behavioral context: it is read-only with respect to the debuggee, returns best-effort evidence, and includes collection errors for optional data an adapter cannot provide. This clarifies failure behavior and optionality beyond what annotations express.

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 with no wasted words: the first states the core action and constraint, the second gives usage routing, and the third discloses read-only, best-effort, and error behavior. Information is front-loaded and every sentence earns its place.

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

Completeness5/5

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

For a tool with 10 optional parameters and an output schema, the description covers the essential decision factors: what it returns, when to use it versus the closest sibling, that it is read-only, and how optional failures are reported. Return-value details are rightfully left to the 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%, so the schema carries full parameter documentation. The description adds conceptual grouping by naming the kinds of evidence collected (stack, locals, registers, exception details, modules, nearby instructions), which maps to several parameters, but it does not add per-parameter semantics 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.

Purpose5/5

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

States a specific verb ('Capture'), a specific resource ('bounded evidence from the current stopped debug state'), and a key constraint ('without resuming execution'). It also distinguishes itself from debug_diagnose_stop by describing the division of labor, so an agent can tell them apart without inspecting 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?

Explicitly states when to use: when raw stack, locals, registers, exception details, modules, or nearby instructions are needed. It also names the alternative (debug_diagnose_stop) and gives the condition that should route to that sibling (ranked crash hypotheses and project-frame selection). No inference is required.

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

debug_source_disassemblyCorrelate Source and DisassemblyA
Read-onlyIdempotent

Correlate source locations, disassembly, registers, and pointer-like locals for the raw fault frame and the first likely project-controlled frame. Use this for low-level root-cause evidence when a crash is already stopped and instruction/operand provenance matters; prefer debug_diagnose_stop for a broader ranked diagnosis. This is read-only, does not resume the target, and returns frame-selection reasoning, both correlations, operand bindings, and any best-effort collection errors.

ParametersJSON Schema
NameRequiredDescriptionDefault
analysisNoHints used to distinguish project code from runtime, system, or third-party frames.
threadIdNoStopped DAP thread to inspect; omit to use the session-selected stopped thread.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
stackLevelsNoMaximum stack frames considered while selecting the project-controlled frame.
disassembleAfterNoInstructions after the selected instruction included in each disassembly window.
disassembleBeforeNoInstructions before the selected instruction included in each disassembly window.

Output Schema

ParametersJSON Schema
NameRequiredDescription
projectFrameYes
frameSelectionYes
operandAnalysisYes
collectionErrorsNo
faultCorrelationYes
projectCorrelationYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, but the description adds meaningful behavior beyond that: it explicitly states the tool does not resume the target and describes what it returns, including frame-selection reasoning, correlations, operand bindings, and best-effort collection errors. No contradiction with annotations.

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 pack the core action, usage conditions, explicit alternative, side-effect guarantee, and return-value summary with no filler. The most differentiating information is front-loaded, and every sentence earns its place.

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

Completeness5/5

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

The description is complete for an agent deciding whether and how to invoke this tool: it gives scope, use context, a sibling alternative, side-effect safety, and an outline of the return payload. Since an output schema exists, detailed return documentation is not required here.

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 input schema fully documents all six parameters. The description itself adds little parameter-level semantics, but that is acceptable because the schema carries the weight; the baseline of 3 applies.

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

Purpose5/5

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

The description names a specific verb ('Correlate'), a precise resource set (source locations, disassembly, registers, pointer-like locals), and the frames involved (raw fault frame and first likely project-controlled frame). It explicitly distinguishes itself from debug_diagnose_stop, making the tool's niche clear.

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

Usage Guidelines5/5

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

The second sentence states exactly when to use this tool ('when a crash is already stopped and instruction/operand provenance matters') and names the preferred alternative for broader ranked diagnosis ('prefer debug_diagnose_stop'). This is explicit routing guidance with both inclusion and exclusion criteria.

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

debug_statusDebug Session StatusA
Read-onlyIdempotent

Inspect debugger lifecycle state, the selected stop, recent DAP events, and bounded adapter stderr without changing target execution. Use this to determine whether a session is initialized, running, stopped, postmortem, exited, or failed before choosing another debug tool; it is diagnostic only and does not resume, launch, attach, or terminate the debuggee.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
adapterIdNo
adapterPidNo
configuredYes
initializedYes
capabilitiesNo
recentEventsYes
activeRequestNo
adapterRunningYes
recentAdapterStderrYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds valuable context: it specifies what is inspected (lifecycle state, stop, DAP events, bounded stderr) and explicitly confirms no target execution change. The word 'bounded' also hints at output limits. This goes well beyond the structured annotations without contradicting them.

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

Conciseness5/5

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

Two sentences cover the full scope and intended usage with no filler. The first sentence front-loads the inspection target and side-effect-free nature, and the second provides concrete use cases and exclusions. Every clause adds value.

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 parameters, rich annotations, an existing output schema, and a description that explains both the contents inspected and the intended decision-making context, nothing essential is missing. The agent can safely call this tool based on the description alone.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter semantics to clarify. The baseline of 4 applies because no parameter documentation is needed at all, and the description correctly omits any irrelevant parameter talk.

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

Purpose5/5

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

The description uses a specific verb ('Inspect') with an explicit resource list: debugger lifecycle state, selected stop, recent DAP events, and bounded adapter stderr. It also contrasts the tool with action-oriented siblings by stating it does not resume, launch, attach, or terminate, making its role within the sibling set clear.

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

Usage Guidelines4/5

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

The description gives explicit guidance on when to use the tool: to determine session state before choosing another debug tool. It also states what it is not for ('does not resume, launch, attach, or terminate'), but it does not name specific alternative tools, relying on 'another debug tool' as a generic reference. This is clear context with no named alternatives, so it fits a 4.

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

debug_this_crashDebug This CrashA
Destructive

Preferred high-level native crash workflow. Use mode=current for an already stopped session, dump for read-only postmortem analysis, codelldb to discover CodeLLDB, lldb-dap to discover upstream LLVM lldb-dap, gdb to discover GNU GDB built-in DAP interpreter, or live with an already initialized generic DAP adapter. Do not use codelldb/lldb-dap/gdb/live when executing or attaching to the target is not authorized: those modes can run application code and cause its normal side effects, while current/dump only inspect stopped evidence. workflow.stage selects initial diagnosis, verification against a prior baseline, or the bounded autonomous cycle. Returns runtime evidence, diagnosis, verification/autonomous metadata, and debugger status with deterministic fixed/blocked/budget-exhausted outcomes where applicable.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory for the selected debugger/target launch and a project-root hint for diagnosis.
envNoEnvironment variables supplied to the launched program in codelldb/lldb-dap/gdb modes.
argsNoCommand-line arguments passed to the launched program in codelldb/lldb-dap/gdb modes.
modeNocurrent inspects an existing stop; live uses an initialized generic DAP session; codelldb starts CodeLLDB; lldb-dap starts upstream LLVM lldb-dap; gdb starts GNU GDB with --interpreter=dap; dump opens a frozen core/minidump.current
programNoRequired for codelldb/lldb-dap/gdb launch modes; optional for CodeLLDB/GDB dumps but required when dumpAdapter=lldb-dap. Local path to the native executable.
requestNoFor mode=live, choose whether the initialized DAP adapter launches a target or attaches to an existing authorized target.launch
analysisNoHints used to distinguish project code from runtime, system, or third-party frames.
dumpPathNoRequired for mode=dump: local path to the native core/minidump file.
snapshotNoBounds and optional evidence categories for a runtime crash snapshot.
workflowNoControls one-shot diagnosis, explicit verification, or the bounded autonomous crash workflow.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
sourceMapNoFor mode=dump, map source paths stored in debug symbols to local source paths.
timeoutMsNoMaximum milliseconds to wait for the reproduction to stop, exit, or terminate.
adapterPathNoOptional explicit debugger executable/adapter path for codelldb/lldb-dap/gdb/dump modes; omit to auto-discover the selected adapter.
breakpointsNoOptional source breakpoints configured before a live/codelldb reproduction completes setup.
dumpAdapterNoFor mode=dump, choose CodeLLDB, upstream LLVM lldb-dap coreFile loading, or GNU GDB coreFile attach semantics.codelldb
stopOnEntryNoWhen true in codelldb/lldb-dap/gdb modes, request an initial debugger stop at program entry before normal execution.
configurationNoRequired for mode=live: adapter-specific DAP launch/attach configuration.
requestTimeoutMsNoPer-request DAP timeout in milliseconds for the selected debugger adapter.

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
statusYes
workflowNo
diagnosisNo

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the destructiveHint=true annotation, the description discloses mode-specific side effects: codelldb/lldb-dap/gdb/live 'can run application code and cause its normal side effects, while current/dump only inspect stopped evidence.' It also states the deterministic outcomes (fixed/blocked/budget-exhausted), which is valuable behavioral context an agent cannot infer from the schema alone.

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 about five dense sentences, each carrying a distinct job: purpose, mode routing, safety exclusion, workflow stage selection, and return content. It is front-loaded with the core purpose and avoids restating schema details, making it very efficient for a tool with 19 parameters and nested objects.

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 highly complex tool, the description covers the key decisions an agent must make: which mode to select, when execution is unsafe, which workflow stage to use, and what the tool returns. The remaining parameter details and return shape are handled by the rich input and output schemas, so 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?

Schema description coverage is 100% and the parameter descriptions in the schema are already rich, so the baseline is 3. The tool description adds high-level grouping around mode safety and workflow stages but does not add meaningful per-parameter semantics beyond what the schema already provides.

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

Purpose4/5

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

The description clearly identifies the tool as a 'preferred high-level native crash workflow' and enumerates the concrete modes (current, dump, codelldb, lldb-dap, gdb, live), so an agent knows what operation it performs. It does not explicitly differentiate itself from sibling tools like debug_open_dump or debug_diagnose_stop by name, 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 Guidelines5/5

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

The description gives explicit routing guidance for every mode, including an explicit exclusion: 'Do not use codelldb/lldb-dap/gdb/live when executing or attaching to the target is not authorized.' It also explains why those modes are risky and why current/dump are safer, and maps workflow.stage to diagnose, verify, and autonomous behaviors.

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

debug_this_hangDebug This HangA
Destructive

High-level native hang workflow for all-thread triage. Use it when a live process appears stuck, deadlocked, waiting forever, or spinning and you need bounded stacks from every thread, wait-state/deadlock heuristics, and cross-thread Pointer-Provenance v2. In current mode it inspects an existing configured session and pauses a running live target when necessary; codelldb, lldb-dap, gdb, and live modes can launch or attach to an authorized local target, observe it for a bounded interval, then pause it for evidence. Do not use executable/attach modes when target execution or debugger control is not authorized, and do not treat a deadlock-candidate as a proven lock cycle because generic DAP does not expose portable lock ownership.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory for adapter-owned launches and a project-root hint for hang triage.
envNoEnvironment variables supplied to adapter-owned launched programs.
pidNoRequired for codelldb/lldb-dap/gdb attach modes; ignored for launch and generic live configuration.
argsNoCommand-line arguments for codelldb/lldb-dap/gdb launch modes.
modeNocurrent triages the configured session; live uses an already initialized generic DAP adapter; codelldb/lldb-dap/gdb discover and start that adapter before launch/attach.current
programNoRequired for codelldb/lldb-dap/gdb launch; optional executable image hint for adapter-specific attach.
requestNoFor live or adapter-owned modes, launch starts a program and attach connects to an existing authorized process.launch
analysisNoOptional project roots/modules used to recognize project-controlled frames across all threads.
observeMsNoBounded interval after launch/attach during which a normal stop or process exit prevents automatic hang-timeout classification.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
maxThreadsNoMaximum threads to collect for bounded all-thread triage.
adapterPathNoOptional explicit CodeLLDB, lldb-dap, or GDB executable path; omit to use adapter discovery.
stackLevelsNoMaximum stack frames collected per thread.
configurationNoRequired only for mode=live: adapter-specific DAP launch/attach configuration.
pauseBudgetMsNoAggregate wall-clock budget across thread enumeration and all pause requests. This prevents per-thread pause timeouts from multiplying across large thread sets.
pauseTimeoutMsNoMaximum time to wait for any single pause request used to freeze a suspected live hang.
captureTimeoutMsNoGlobal deadline for all-thread stack/scope/variable evidence collection after the pause phase. When it expires, remaining threads are retained as partial/unclassified evidence instead of extending the workflow per thread.
requestTimeoutMsNoPer-request timeout for starting and configuring an adapter-owned DAP session.
framesWithVariablesNoMaximum frames per thread whose locals/arguments are collected, prioritizing the top frame and first project-controlled frame.
maxVariablesPerFrameNoMaximum local/argument variables collected per selected frame scope for Pointer-Provenance v2.

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeYes
statusYes
evidenceNo
diagnosisNo
observationYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry destructiveHint=true, so the destructive nature is known. The description adds meaningful behavioral context beyond that: it can pause a running live target, launches or attaches via several adapters, observes for a bounded interval, and explicitly warns that generic DAP cannot prove lock ownership. This is valuable operational disclosure that annotations 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.

Conciseness5/5

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

The description is dense but every sentence earns its place: the first sentence states purpose and trigger conditions, the second explains mode behavior, the third states a safety exclusion, and the fourth adds an important epistemic caveat about lock-cycle interpretation. Content is front-loaded and there is 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 tool this complex—20 parameters, nested objects, five modes, output schema present, and rich annotations—the description covers the essential workflow, mode distinctions, and safety boundaries. It could be more complete by explicitly contrasting with debug_this_crash, but an agent has enough to call it correctly given the exhaustive input schema and 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%, with each parameter already documented in detail. The description adds workflow-level context but no per-parameter meaning beyond the schema, so the baseline 3 is appropriate: the structured field descriptions do the heavy lifting.

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

Purpose5/5

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

The description states a specific verb and resource: a 'high-level native hang workflow for all-thread triage.' It immediately names the triggering conditions (stuck, deadlocked, waiting forever, spinning) and the deliverable (bounded stacks from every thread, wait-state/deadlock heuristics, Pointer-Provenance v2), which clearly distinguishes it from the sibling crash-focused tools like debug_this_crash.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use criteria ('Use it when a live process appears stuck...') and a clear exclusion: do not use executable/attach modes when target execution or debugger control is not authorized. It does not explicitly name which sibling to use instead for crash triage, so it falls just short of full alternative routing, but the context is otherwise strong.

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

debug_trace_lifetimeTrace Object LifetimeA
Destructive

Trace lifetime evidence for one debugger-visible pointer or object handle using the current snapshot, sanitizer/runtime output, bounded forward writer tracing, and optional reverse stepping when supported. Use this for suspected use-after-free, stale ownership, or unexpected pointer replacement. Do not use forward tracing on a frozen dump or when resuming the target is unsafe.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDebugger-visible pointer/object expression whose lifetime should be investigated.
maxStopsNoMaximum forward writer observations.
directionNoForward uses writer watchpoints, reverse uses stepBack, and hybrid collects both when supported.forward
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
timeoutMsNoAggregate bound for forward temporal tracing.
reverseStepsNoMaximum reverse stepBack operations when reverse or hybrid is selected.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
initialYes
guidanceYes
sanitizerYes
memoryHazardsYes
forwardTimelineNo
reverseTimelineNo
allocationDeallocationHintsYes

TDQS

A4.1/5.0
Behavior4/5

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

The description discloses meaningful behavioral details beyond the annotations: it uses the current snapshot, sanitizer/runtime output, bounded forward writer tracing, and optional reverse stepping. It also warns about the safety implications of forward tracing on frozen dumps or unsafe resume conditions. This complements the destructiveHint annotation rather than merely restating 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?

The description is three sentences with no wasted words. It front-loads the core action, then gives usage guidance, and ends with a critical safety exclusion. Every sentence adds distinct value.

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 moderately complex tool with six parameters and a present output schema, the description covers the essential context: what it traces, why an agent would choose it, and an important safety constraint. The presence of a full output schema and 100% parameter schema coverage means the remaining details are already available without burdening the description.

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 each parameter already well documented (e.g., direction explains forward vs. reverse, maxStops explains the bound). The tool description adds contextual phrases like 'bounded forward writer tracing' but does not materially add parameter-level meaning beyond what the schema already provides. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly identifies a specific verb and resource: 'Trace lifetime evidence for one debugger-visible pointer or object handle.' It also names concrete use cases such as use-after-free and stale ownership, making the purpose actionable. However, it does not explicitly differentiate itself from sibling tools like debug_find_writer or debug_trace_value by name.

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

Usage Guidelines4/5

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

The description provides explicit guidance on when to use the tool: 'suspected use-after-free, stale ownership, or unexpected pointer replacement.' It also gives a clear exclusion: 'Do not use forward tracing on a frozen dump or when resuming the target is unsafe.' It stops short of naming alternative sibling tools or explaining when those alternatives should be preferred.

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

debug_trace_valueTrace Runtime Value WritesA
Destructive

Build a bounded temporal write timeline for one debugger-visible variable or expression. Use this after differential or crash evidence identifies a suspicious value and repeated live-target resume is safe. The tool installs one temporary data breakpoint or watchpoint at a time, resumes to the next confirmed writer, captures bounded runtime evidence, removes only its own temporary watch, and repeats. Do not use it for crash dumps, unsafe-to-resume targets, or as proof that an observed writer is the root cause; it stops on unrelated debugger events rather than continuing through them.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDebugger-visible variable or expression to watch. Control characters and line breaks are rejected by the GDB fallback.
maxStopsNoMaximum confirmed or unrelated writer-stop observations before the trace ends.
snapshotNoOptional bounded evidence settings for each observed writer stop.
threadIdNoInitial stopped thread; omit to use the debugger-selected stopped thread. Writer snapshots follow the actual stopped event thread.
sessionIdNoOptional DAP session ID. Omit to use the backward-compatible default session.
timeoutMsNoAggregate operation deadline across the entire write timeline.
accessTypeNoWatch writes only by default; readWrite may be used when read access is also relevant.write
perStopTimeoutMsNoMaximum bounded wait allocated to each individual writer observation, also capped by the aggregate deadline.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
eventsYes
statusYes
guidanceYes
stopReasonYes
finalSnapshotYes
terminalErrorNo

TDQS

A4.5/5.0
Behavior5/5

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

The description discloses substantial behavioral detail beyond the annotations: it installs one temporary breakpoint/watchpoint at a time, resumes to the next confirmed writer, captures bounded evidence, removes only its own watch, and repeats. It also reveals a key limitation: the tool stops on unrelated debugger events rather than continuing through them. The destructiveHint and openWorldHint annotations are consistent with this live-target mutating behavior.

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

Conciseness5/5

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

The description is dense but efficient, front-loading the core purpose, then usage context, then operational behavior, then exclusions. Every sentence earns its place, and no content is repeated from the schema or annotations.

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

Completeness5/5

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

Given the tool's complexity, the description covers the essential operational model, safety preconditions, limitations, and unsupported uses. An output schema exists, so the description does not need to explain return values. The combination of schema, annotations, and description gives an agent enough context to decide when and how to invoke the tool 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 each parameter already has a meaningful description, including defaults, bounds, and semantics such as aggregation deadline and per-stop timeout. The tool description reinforces general concepts like 'bounded' and 'writer stops' but does not add significant parameter-level meaning beyond what the schema already 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 opens with a specific verb and resource: 'Build a bounded temporal write timeline for one debugger-visible variable or expression.' This directly states what the tool does and differentiates it from broader debugging or dump-analysis tools by focusing on a single variable/expression and a timeline of writes.

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

Usage Guidelines4/5

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

The description gives explicit when-to-use guidance: after differential or crash evidence identifies a suspicious value and live-target resume is safe. It also gives clear when-not-to-use conditions: crash dumps, unsafe-to-resume targets, and as root-cause proof. However, it does not name alternative sibling tools to use in those excluded cases, so it falls one step short of the strongest 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. 6 tool updatesv0.18.1
    • Addeddebug_adaptive_evidence
    • Addeddebug_causal_trace
    • Removeddebug_continue
    • Addeddebug_progress_probe
    • Addeddebug_runtime_report
    • Addeddebug_trace_lifetime
  2. 14 tool updatesv0.17.0
    • Addeddebug_compare_runs
    • Changeddebug_continue2 fields changed
      • addedInput schema / properties / sessionId
        Added value: +{
        +  "description": "Optional DAP session ID. Omit to use the backward-compatible default session.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "allThreadsContinued": {
        +      "type": "boolean"
        +    },
        +    "response": {},
        +    "stopped": {}
        +  },
        +  "type": "object"
        +}
    • Changeddebug_diagnose_stop2 fields changed
      • addedInput schema / properties / sessionId
        Added value: +{
        +  "description": "Optional DAP session ID. Omit to use the backward-compatible default session.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "diagnosis": {},
        +    "snapshot": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "collectionErrors": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "message": {
        +                "type": "string"
        +              },
        +              "operation": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "operation",
        +              "message"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "disassembly": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "exception": {},
        +        "frame": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "column": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "id": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "line": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "name": {
        +              "type": "string"
        +            },
        +            "source": {}
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "line",
        +            "column"
        +          ],
        +          "type": "object"
        +        },
        +        "locals": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "modules": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "postmortem": {
        +          "type": "boolean"
        +        },
        +        "registers": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "scopes": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "stack": {
        +          "items": {
        +            "additionalProperties": {},
        +            "properties": {
        +              "column": {
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "id": {
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "line": {
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "name": {
        +                "type": "string"
        +              },
        +              "source": {}
        +            },
        +            "required": [
        +              "id",
        +              "name",
        +              "line",
        +              "column"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "stopped": {},
        +        "symbolHealth": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "limitations": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "modules": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "collected": {
        +                  "type": "boolean"
        +                },
        +                "symbolsAvailable": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "symbolsMissing": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "symbolsUnknown": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "totalModules": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "withExplicitStatus": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "collected",
        +                "totalModules",
        +                "withExplicitStatus",
        +                "symbolsAvailable",
        +                "symbolsMissing",
        +                "symbolsUnknown"
        +              ],
        +              "type": "object"
        +            },
        +            "stack": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "namedFrames": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "sourceMappedFrames": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "topFrameNamed": {
        +                  "type": "boolean"
        +                },
        +                "topFrameSourceMapped": {
        +                  "type": "boolean"
        +                },
        +                "totalFrames": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "totalFrames",
        +                "namedFrames",
        +                "sourceMappedFrames",
        +                "topFrameNamed",
        +                "topFrameSourceMapped"
        +              ],
        +              "type": "object"
        +            },
        +            "status": {
        +              "enum": [
        +                "good",
        +                "partial",
        +                "poor",
        +                "unknown"
        +              ],
        +              "type": "string"
        +            },
        +            "summary": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "status",
        +            "summary",
        +            "stack",
        +            "modules",
        +            "limitations"
        +          ],
        +          "type": "object"
        +        },
        +        "thread": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "id": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "thread",
        +        "stack",
        +        "frame",
        +        "scopes",
        +        "locals",
        +        "registers",
        +        "symbolHealth"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "snapshot",
        +    "diagnosis"
        +  ],
        +  "type": "object"
        +}
    • Changeddebug_disconnect2 fields changed
      • addedInput schema / properties / sessionId
        Added value: +{
        +  "description": "Optional DAP session ID. Omit to use the backward-compatible default session.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "disconnected": {
        +      "const": true,
        +      "type": "boolean"
        +    }
        +  },
        +  "required": [
        +    "disconnected"
        +  ],
        +  "type": "object"
        +}
    • Addeddebug_find_writer
    • Changeddebug_open_dump6 fields changed
      • changedInput schema / properties / adapter / description
        Previous value: -"Debugger adapter used for postmortem inspection. codelldb preserves existing behavior; lldb-dap uses upstream LLVM coreFile attach semantics."New value: +"Debugger adapter used for postmortem inspection. lldb-dap and gdb use their native coreFile attach semantics."
      • changedInput schema / properties / adapter / enum
        Previous value: -[
        -  "codelldb",
        -  "lldb-dap"
        -]New value: +[
        +  "codelldb",
        +  "lldb-dap",
        +  "gdb"
        +]
      • changedInput schema / properties / program / description
        Previous value: -"Path to the matching executable image. Optional for CodeLLDB, but required when adapter=lldb-dap because LLVM coreFile loading binds the dump to its program image."New value: +"Path to the matching executable image. Optional for CodeLLDB/GDB, but required when adapter=lldb-dap because LLVM coreFile loading binds the dump to its program image."
      • addedInput schema / properties / sessionId
        Added value: +{
        +  "description": "Optional DAP session ID. Omit to use the backward-compatible default session.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / sourceMap / description
        Previous value: -"Optional mapping from source paths recorded in symbols to local source paths; converted to lldb-dap pair arrays when that adapter is selected."New value: +"Optional mapping from source paths recorded in symbols to local source paths. Supported by CodeLLDB/lldb-dap; GDB currently rejects this field rather than guessing undocumented semantics."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "adapter": {},
        +    "adapterKind": {
        +      "enum": [
        +        "codelldb",
        +        "lldb-dap",
        +        "gdb"
        +      ],
        +      "type": "string"
        +    },
        +    "attach": {},
        +    "capabilities": {},
        +    "dumpPath": {
        +      "type": "string"
        +    },
        +    "guidance": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "blockedOperations": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "canInspect": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "cannotResume": {
        +          "type": "boolean"
        +        },
        +        "note": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "canInspect",
        +        "blockedOperations",
        +        "cannotResume",
        +        "note"
        +      ],
        +      "type": "object"
        +    },
        +    "mode": {
        +      "const": "postmortem",
        +      "type": "string"
        +    },
        +    "program": {
        +      "type": "string"
        +    },
        +    "readOnlyTarget": {
        +      "const": true,
        +      "type": "boolean"
        +    },
        +    "snapshot": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "collectionErrors": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "message": {
        +                "type": "string"
        +              },
        +              "operation": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "operation",
        +              "message"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "disassembly": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "exception": {},
        +        "frame": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "column": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "id": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "line": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "name": {
        +              "type": "string"
        +            },
        +            "source": {}
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "line",
        +            "column"
        +          ],
        +          "type": "object"
        +        },
        +        "locals": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "modules": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "postmortem": {
        +          "type": "boolean"
        +        },
        +        "registers": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "scopes": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "stack": {
        +          "items": {
        +            "additionalProperties": {},
        +            "properties": {
        +              "column": {
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "id": {
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "line": {
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "name": {
        +                "type": "string"
        +              },
        +              "source": {}
        +            },
        +            "required": [
        +              "id",
        +              "name",
        +              "line",
        +              "column"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "stopped": {},
        +        "symbolHealth": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "limitations": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "modules": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "collected": {
        +                  "type": "boolean"
        +                },
        +                "symbolsAvailable": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "symbolsMissing": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "symbolsUnknown": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "totalModules": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "withExplicitStatus": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "collected",
        +                "totalModules",
        +                "withExplicitStatus",
        +                "symbolsAvailable",
        +                "symbolsMissing",
        +                "symbolsUnknown"
        +              ],
        +              "type": "object"
        +            },
        +            "stack": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "namedFrames": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "sourceMappedFrames": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "topFrameNamed": {
        +                  "type": "boolean"
        +                },
        +                "topFrameSourceMapped": {
        +                  "type": "boolean"
        +                },
        +                "totalFrames": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "totalFrames",
        +                "namedFrames",
        +                "sourceMappedFrames",
        +                "topFrameNamed",
        +                "topFrameSourceMapped"
        +              ],
        +              "type": "object"
        +            },
        +            "status": {
        +              "enum": [
        +                "good",
        +                "partial",
        +                "poor",
        +                "unknown"
        +              ],
        +              "type": "string"
        +            },
        +            "summary": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "status",
        +            "summary",
        +            "stack",
        +            "modules",
        +            "limitations"
        +          ],
        +          "type": "object"
        +        },
        +        "thread": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "id": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "thread",
        +        "stack",
        +        "frame",
        +        "scopes",
        +        "locals",
        +        "registers",
        +        "symbolHealth"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "mode",
        +    "readOnlyTarget",
        +    "adapterKind",
        +    "dumpPath",
        +    "adapter",
        +    "capabilities",
        +    "attach",
        +    "snapshot",
        +    "guidance"
        +  ],
        +  "type": "object"
        +}
    • Changeddebug_run_to_stop2 fields changed
      • addedInput schema / properties / sessionId
        Added value: +{
        +  "description": "Optional DAP session ID. Omit to use the backward-compatible default session.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "outcome": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "body": {},
        +        "event": {
        +          "enum": [
        +            "stopped",
        +            "exited",
        +            "terminated"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "event"
        +      ],
        +      "type": "object"
        +    },
        +    "request": {
        +      "enum": [
        +        "launch",
        +        "attach"
        +      ],
        +      "type": "string"
        +    },
        +    "requestResult": {},
        +    "snapshot": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "collectionErrors": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "message": {
        +                "type": "string"
        +              },
        +              "operation": {
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "operation",
        +              "message"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "disassembly": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "exception": {},
        +        "frame": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "column": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "id": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "line": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "name": {
        +              "type": "string"
        +            },
        +            "source": {}
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "line",
        +            "column"
        +          ],
        +          "type": "object"
        +        },
        +        "locals": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "modules": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "postmortem": {
        +          "type": "boolean"
        +        },
        +        "registers": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "scopes": {
        +          "items": {},
        +          "type": "array"
        +        },
        +        "stack": {
        +          "items": {
        +            "additionalProperties": {},
        +            "properties": {
        +              "column": {
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "id": {
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "line": {
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "name": {
        +                "type": "string"
        +              },
        +              "source": {}
        +            },
        +            "required": [
        +              "id",
        +              "name",
        +              "line",
        +              "column"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "stopped": {},
        +        "symbolHealth": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "limitations": {
        +              "items": {
        +                "type": "string"
        +              },
        +              "type": "array"
        +            },
        +            "modules": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "collected": {
        +                  "type": "boolean"
        +                },
        +                "symbolsAvailable": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "symbolsMissing": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "symbolsUnknown": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "totalModules": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "withExplicitStatus": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "collected",
        +                "totalModules",
        +                "withExplicitStatus",
        +                "symbolsAvailable",
        +                "symbolsMissing",
        +                "symbolsUnknown"
        +              ],
        +              "type": "object"
        +            },
        +            "stack": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "namedFrames": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "sourceMappedFrames": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "topFrameNamed": {
        +                  "type": "boolean"
        +                },
        +                "topFrameSourceMapped": {
        +                  "type": "boolean"
        +                },
        +                "totalFrames": {
        +                  "maximum": 9007199254740991,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "totalFrames",
        +                "namedFrames",
        +                "sourceMappedFrames",
        +                "topFrameNamed",
        +                "topFrameSourceMapped"
        +              ],
        +              "type": "object"
        +            },
        +            "status": {
        +              "enum": [
        +                "good",
        +                "partial",
        +                "poor",
        +                "unknown"
        +              ],
        +              "type": "string"
        +            },
        +            "summary": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "status",
        +            "summary",
        +            "stack",
        +            "modules",
        +            "limitations"
        +          ],
        +          "type": "object"
        +        },
        +        "thread": {
        +          "additionalProperties": {},
        +          "properties": {
        +            "id": {
        +              "maximum": 9007199254740991,
        +              "minimum": -9007199254740991,
        +              "type": "integer"
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "thread",
        +        "stack",
        +        "frame",
        +        "scopes",
        +        "locals",
        +        "registers",
        +        "symbolHealth"
        +      ],
        +      "type": "object"
        +    },
        +    "status": {}
        +  },
        +  "required": [
        +    "request",
        +    "requestResult",
        +    "outcome",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Addeddebug_sessions
    • Changeddebug_snapshot2 fields changed
      • addedInput schema / properties / sessionId
        Added value: +{
        +  "description": "Optional DAP session ID. Omit to use the backward-compatible default session.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "collectionErrors": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "message": {
        +            "type": "string"
        +          },
        +          "operation": {
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "operation",
        +          "message"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "disassembly": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "exception": {},
        +    "frame": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "column": {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        "id": {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        "line": {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "source": {}
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "line",
        +        "column"
        +      ],
        +      "type": "object"
        +    },
        +    "locals": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "modules": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "postmortem": {
        +      "type": "boolean"
        +    },
        +    "registers": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "scopes": {
        +      "items": {},
        +      "type": "array"
        +    },
        +    "stack": {
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "column": {
        +            "maximum": 9007199254740991,
        +            "minimum": -9007199254740991,
        +            "type": "integer"
        +          },
        +          "id": {
        +            "maximum": 9007199254740991,
        +            "minimum": -9007199254740991,
        +            "type": "integer"
        +          },
        +          "line": {
        +            "maximum": 9007199254740991,
        +            "minimum": -9007199254740991,
        +            "type": "integer"
        +          },
        +          "name": {
        +            "type": "string"
        +          },
        +          "source": {}
        +        },
        +        "required": [
        +          "id",
        +          "name",
        +          "line",
        +          "column"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "stopped": {},
        +    "symbolHealth": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "limitations": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "modules": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "collected": {
        +              "type": "boolean"
        +            },
        +            "symbolsAvailable": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "symbolsMissing": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "symbolsUnknown": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "totalModules": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "withExplicitStatus": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "collected",
        +            "totalModules",
        +            "withExplicitStatus",
        +            "symbolsAvailable",
        +            "symbolsMissing",
        +            "symbolsUnknown"
        +          ],
        +          "type": "object"
        +        },
        +        "stack": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "namedFrames": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "sourceMappedFrames": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "topFrameNamed": {
        +              "type": "boolean"
        +            },
        +            "topFrameSourceMapped": {
        +              "type": "boolean"
        +            },
        +            "totalFrames": {
        +              "maximum": 9007199254740991,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "totalFrames",
        +            "namedFrames",
        +            "sourceMappedFrames",
        +            "topFrameNamed",
        +            "topFrameSourceMapped"
        +          ],
        +          "type": "object"
        +        },
        +        "status": {
        +          "enum": [
        +            "good",
        +            "partial",
        +            "poor",
        +            "unknown"
        +          ],
        +          "type": "string"
        +        },
        +        "summary": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "status",
        +        "summary",
        +        "stack",
        +        "modules",
        +        "limitations"
        +      ],
        +      "type": "object"
        +    },
        +    "thread": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "id": {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        "name": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "name"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "thread",
        +    "stack",
        +    "frame",
        +    "scopes",
        +    "locals",
        +    "registers",
        +    "symbolHealth"
        +  ],
        +  "type": "object"
        +}
    • Changeddebug_source_disassembly2 fields changed
      • addedInput schema / properties / sessionId
        Added value: +{
        +  "description": "Optional DAP session ID. Omit to use the backward-compatible default session.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "collectionErrors": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "faultCorrelation": {},
        +    "frameSelection": {},
        +    "operandAnalysis": {},
        +    "projectCorrelation": {},
        +    "projectFrame": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "column": {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        "id": {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        "line": {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "source": {}
        +      },
        +      "required": [
        +        "id",
        +        "name",
        +        "line",
        +        "column"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "frameSelection",
        +    "faultCorrelation",
        +    "projectCorrelation",
        +    "projectFrame",
        +    "operandAnalysis"
        +  ],
        +  "type": "object"
        +}
    • Changeddebug_status1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "activeRequest": {
        +      "enum": [
        +        "launch",
        +        "attach"
        +      ],
        +      "type": "string"
        +    },
        +    "adapterId": {
        +      "type": "string"
        +    },
        +    "adapterPid": {
        +      "exclusiveMinimum": 0,
        +      "maximum": 9007199254740991,
        +      "type": "integer"
        +    },
        +    "adapterRunning": {
        +      "type": "boolean"
        +    },
        +    "capabilities": {
        +      "additionalProperties": {},
        +      "properties": {},
        +      "type": "object"
        +    },
        +    "configured": {
        +      "type": "boolean"
        +    },
        +    "initialized": {
        +      "type": "boolean"
        +    },
        +    "recentAdapterStderr": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "recentEvents": {
        +      "items": {},
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "adapterRunning",
        +    "initialized",
        +    "configured",
        +    "recentEvents",
        +    "recentAdapterStderr"
        +  ],
        +  "type": "object"
        +}
    • Changeddebug_this_crash12 fields changed
      • changedInput schema / properties / adapterPath / description
        Previous value: -"Optional explicit debugger-adapter executable path for codelldb/lldb-dap/dump modes; omit to auto-discover the selected adapter."New value: +"Optional explicit debugger executable/adapter path for codelldb/lldb-dap/gdb/dump modes; omit to auto-discover the selected adapter."
      • changedInput schema / properties / args / description
        Previous value: -"Command-line arguments passed to the launched program in mode=codelldb or mode=lldb-dap."New value: +"Command-line arguments passed to the launched program in codelldb/lldb-dap/gdb modes."
      • changedInput schema / properties / dumpAdapter / description
        Previous value: -"For mode=dump, choose CodeLLDB compatibility behavior or upstream LLVM lldb-dap coreFile loading."New value: +"For mode=dump, choose CodeLLDB, upstream LLVM lldb-dap coreFile loading, or GNU GDB coreFile attach semantics."
      • changedInput schema / properties / dumpAdapter / enum
        Previous value: -[
        -  "codelldb",
        -  "lldb-dap"
        -]New value: +[
        +  "codelldb",
        +  "lldb-dap",
        +  "gdb"
        +]
      • changedInput schema / properties / env / description
        Previous value: -"Environment variables supplied to the launched program in mode=codelldb or mode=lldb-dap."New value: +"Environment variables supplied to the launched program in codelldb/lldb-dap/gdb modes."
      • changedInput schema / properties / mode / description
        Previous value: -"current inspects an existing stop; live runs launch/attach through an initialized DAP session; codelldb starts CodeLLDB; lldb-dap starts upstream LLVM lldb-dap; dump opens a frozen core/minidump."New value: +"current inspects an existing stop; live uses an initialized generic DAP session; codelldb starts CodeLLDB; lldb-dap starts upstream LLVM lldb-dap; gdb starts GNU GDB with --interpreter=dap; dump opens a frozen core/minidump."
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "current",
        -  "live",
        -  "codelldb",
        -  "lldb-dap",
        -  "dump"
        -]New value: +[
        +  "current",
        +  "live",
        +  "codelldb",
        +  "lldb-dap",
        +  "gdb",
        +  "dump"
        +]
      • changedInput schema / properties / program / description
        Previous value: -"Required for mode=codelldb and mode=lldb-dap; optional for CodeLLDB dumps but required when dumpAdapter=lldb-dap. Local path to the native executable."New value: +"Required for codelldb/lldb-dap/gdb launch modes; optional for CodeLLDB/GDB dumps but required when dumpAdapter=lldb-dap. Local path to the native executable."
      • changedInput schema / properties / requestTimeoutMs / description
        Previous value: -"Per-request DAP timeout in milliseconds for CodeLLDB operations."New value: +"Per-request DAP timeout in milliseconds for the selected debugger adapter."
      • addedInput schema / properties / sessionId
        Added value: +{
        +  "description": "Optional DAP session ID. Omit to use the backward-compatible default session.",
        +  "maxLength": 64,
        +  "minLength": 1,
        +  "pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
        +  "type": "string"
        +}
      • changedInput schema / properties / stopOnEntry / description
        Previous value: -"When true in mode=codelldb or mode=lldb-dap, request an initial debugger stop at program entry before normal execution."New value: +"When true in codelldb/lldb-dap/gdb modes, request an initial debugger stop at program entry before normal execution."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": {},
        +  "properties": {
        +    "diagnosis": {},
        +    "mode": {
        +      "enum": [
        +        "current",
        +        "live",
        +        "codelldb",
        +        "lldb-dap",
        +        "gdb",
        +        "dump"
        +      ],
        +      "type": "string"
        +    },
        +    "status": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "activeRequest": {
        +          "enum": [
        +            "launch",
        +            "attach"
        +          ],
        +          "type": "string"
        +        },
        +        "adapterId": {
        +          "type": "string"
        +        },
        +        "adapterPid": {
        +          "exclusiveMinimum": 0,
        +          "maximum": 9007199254740991,
        +          "type": "integer"
        +        },
        +        "adapterRunning": {
        +          "type": "boolean"
        +        },
        +        "capabilities": {
        +          "additionalProperties": {},
        +          "properties": {},
        +          "type": "object"
        +        },
        +        "configured": {
        +          "type": "boolean"
        +        },
        +        "initialized": {
        +          "type": "boolean"
        +        },
        +        "recentAdapterStderr": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "recentEvents": {
        +          "items": {},
        +          "type": "array"
        +        }
        +      },
        +      "required": [
        +        "adapterRunning",
        +        "initialized",
        +        "configured",
        +        "recentEvents",
        +        "recentAdapterStderr"
        +      ],
        +      "type": "object"
        +    },
        +    "workflow": {}
        +  },
        +  "required": [
        +    "mode",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Addeddebug_this_hang
    • Addeddebug_trace_value
  3. 2 tool updatesv0.13.0
    • Changeddebug_open_dump5 fields changed
      • addedInput schema / properties / adapter
        Added value: +{
        +  "default": "codelldb",
        +  "description": "Debugger adapter used for postmortem inspection. codelldb preserves existing behavior; lldb-dap uses upstream LLVM coreFile attach semantics.",
        +  "enum": [
        +    "codelldb",
        +    "lldb-dap"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / adapterPath / description
        Previous value: -"Optional explicit CodeLLDB executable path; omit to use normal CodeLLDB discovery."New value: +"Optional explicit executable path for the selected debugger adapter; omit to use its normal discovery logic."
      • changedInput schema / properties / cwd / description
        Previous value: -"Working directory for the local CodeLLDB adapter process; this does not execute the crashed target."New value: +"Working directory for the local debugger adapter process; this does not execute the crashed target."
      • changedInput schema / properties / program / description
        Previous value: -"Optional path to the matching executable image, used by CodeLLDB to improve symbol/module resolution."New value: +"Path to the matching executable image. Optional for CodeLLDB, but required when adapter=lldb-dap because LLVM coreFile loading binds the dump to its program image."
      • changedInput schema / properties / sourceMap / description
        Previous value: -"Optional mapping from source paths recorded in symbols to local source paths."New value: +"Optional mapping from source paths recorded in symbols to local source paths; converted to lldb-dap pair arrays when that adapter is selected."
    • Changeddebug_this_crash9 fields changed
      • changedInput schema / properties / adapterPath / description
        Previous value: -"Optional explicit CodeLLDB executable path for codelldb/dump modes; omit to auto-discover it."New value: +"Optional explicit debugger-adapter executable path for codelldb/lldb-dap/dump modes; omit to auto-discover the selected adapter."
      • changedInput schema / properties / args / description
        Previous value: -"Command-line arguments passed to the launched program in mode=codelldb."New value: +"Command-line arguments passed to the launched program in mode=codelldb or mode=lldb-dap."
      • changedInput schema / properties / cwd / description
        Previous value: -"Working directory for CodeLLDB/target launch and a project-root hint for diagnosis."New value: +"Working directory for the selected debugger/target launch and a project-root hint for diagnosis."
      • addedInput schema / properties / dumpAdapter
        Added value: +{
        +  "default": "codelldb",
        +  "description": "For mode=dump, choose CodeLLDB compatibility behavior or upstream LLVM lldb-dap coreFile loading.",
        +  "enum": [
        +    "codelldb",
        +    "lldb-dap"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / env / description
        Previous value: -"Environment variables supplied to the launched program in mode=codelldb."New value: +"Environment variables supplied to the launched program in mode=codelldb or mode=lldb-dap."
      • changedInput schema / properties / mode / description
        Previous value: -"current inspects an existing stop; live runs launch/attach through an initialized DAP session; codelldb starts CodeLLDB and launches program; dump opens a frozen core/minidump."New value: +"current inspects an existing stop; live runs launch/attach through an initialized DAP session; codelldb starts CodeLLDB; lldb-dap starts upstream LLVM lldb-dap; dump opens a frozen core/minidump."
      • changedInput schema / properties / mode / enum
        Previous value: -[
        -  "current",
        -  "live",
        -  "codelldb",
        -  "dump"
        -]New value: +[
        +  "current",
        +  "live",
        +  "codelldb",
        +  "lldb-dap",
        +  "dump"
        +]
      • changedInput schema / properties / program / description
        Previous value: -"Required for mode=codelldb; optional for dump symbol resolution. Local path to the native executable."New value: +"Required for mode=codelldb and mode=lldb-dap; optional for CodeLLDB dumps but required when dumpAdapter=lldb-dap. Local path to the native executable."
      • changedInput schema / properties / stopOnEntry / description
        Previous value: -"When true in mode=codelldb, request an initial debugger stop at program entry before normal execution."New value: +"When true in mode=codelldb or mode=lldb-dap, request an initial debugger stop at program entry before normal execution."
  4. 8 tool updatesv0.12.1
    • Changeddebug_continue3 fields changed
      • addedInput schema / properties / threadId / description
        Added value: +"DAP thread identifier to resume; obtain it from debug_snapshot, debug_status, or a stopped event."
      • addedInput schema / properties / timeoutMs / description
        Added value: +"Maximum time in milliseconds to wait for the next stopped event when waitForStop is true."
      • addedInput schema / properties / waitForStop / description
        Added value: +"When true, wait for the next stopped event before returning; when false, return after the continue request is accepted."
    • Changeddebug_diagnose_stop13 fields changed
      • addedInput schema / properties / analysis / description
        Added value: +"Hints used to distinguish project code from runtime, system, or third-party frames."
      • addedInput schema / properties / analysis / properties / callerDepth / description
        Added value: +"How many project-controlled caller frames beyond the selected frame to inspect for provenance and root cause."
      • addedInput schema / properties / analysis / properties / projectModules / description
        Added value: +"Optional executable or library names treated as project-controlled modules during frame selection."
      • addedInput schema / properties / analysis / properties / projectRoots / description
        Added value: +"Optional local source-root paths used to recognize project-controlled stack frames."
      • addedInput schema / properties / disassembleAfter / description
        Added value: +"Number of instructions after the selected instruction to request."
      • addedInput schema / properties / disassembleBefore / description
        Added value: +"Number of instructions before the selected instruction to request."
      • addedInput schema / properties / includeDisassembly / description
        Added value: +"Include best-effort disassembly around the selected instruction pointer when supported."
      • addedInput schema / properties / includeExceptionInfo / description
        Added value: +"Request structured exception information for the stopped thread when supported."
      • addedInput schema / properties / includeModules / description
        Added value: +"Include a bounded list of loaded executable images and libraries."
      • addedInput schema / properties / maxVariablesPerScope / description
        Added value: +"Maximum variables returned per inspected scope, bounding evidence size."
      • addedInput schema / properties / moduleCount / description
        Added value: +"Maximum loaded modules to include when module collection is enabled."
      • addedInput schema / properties / stackLevels / description
        Added value: +"Maximum number of stack frames to inspect when collecting crash evidence."
      • addedInput schema / properties / threadId / description
        Added value: +"Stopped DAP thread to inspect; omit to use the session-selected stopped thread."
    • Changeddebug_disconnect1 field changed
      • addedInput schema / properties / terminateDebuggee / description
        Added value: +"Whether the debugger should terminate the live debuggee while disconnecting; set false to request detach/preserve behavior when the adapter supports it."
    • Changeddebug_open_dump12 fields changed
      • addedInput schema / properties / adapterPath / description
        Added value: +"Optional explicit CodeLLDB executable path; omit to use normal CodeLLDB discovery."
      • addedInput schema / properties / cwd / description
        Added value: +"Working directory for the local CodeLLDB adapter process; this does not execute the crashed target."
      • addedInput schema / properties / dumpPath / description
        Added value: +"Absolute or local path to the native core/minidump file to inspect."
      • addedInput schema / properties / includeDisassembly / description
        Added value: +"Include best-effort instructions around the selected crash frame."
      • addedInput schema / properties / includeModules / description
        Added value: +"Include loaded executable images and libraries recorded in the dump."
      • addedInput schema / properties / maxVariablesPerScope / description
        Added value: +"Maximum variables returned per scope in the initial snapshot."
      • addedInput schema / properties / moduleCount / description
        Added value: +"Maximum number of modules to include when includeModules is true."
      • addedInput schema / properties / program / description
        Added value: +"Optional path to the matching executable image, used by CodeLLDB to improve symbol/module resolution."
      • addedInput schema / properties / requestTimeoutMs / description
        Added value: +"Per-request DAP timeout in milliseconds while opening and inspecting the dump."
      • addedInput schema / properties / sourceMap / description
        Added value: +"Optional mapping from source paths recorded in symbols to local source paths."
      • addedInput schema / properties / stackLevels / description
        Added value: +"Maximum stack frames to include in the initial postmortem snapshot."
      • addedInput schema / properties / threadId / description
        Added value: +"Specific dump thread to inspect; omit to use the debugger-selected stopped/crashed thread."
    • Changeddebug_run_to_stop17 fields changed
      • addedInput schema / properties / breakpoints / description
        Added value: +"Optional source breakpoint groups configured before the debugger completes launch/attach setup."
      • addedInput schema / properties / breakpoints / items / description
        Added value: +"Source file and line breakpoints applied before configuration completes."
      • addedInput schema / properties / breakpoints / items / properties / lines / description
        Added value: +"One or more 1-based source line numbers to replace as breakpoints for this source file."
      • changedInput schema / properties / breakpoints / items / properties / source / description
        Previous value: -"Absolute or adapter-resolvable source file path"New value: +"Absolute or adapter-resolvable source file path."
      • addedInput schema / properties / configuration / description
        Added value: +"Adapter-specific DAP launch or attach configuration."
      • addedInput schema / properties / request / description
        Added value: +"Choose launch to start a new target from configuration, or attach to connect to an existing authorized local target."
      • addedInput schema / properties / snapshot / description
        Added value: +"Optional bounds and evidence categories for the snapshot captured only when execution stops."
      • addedInput schema / properties / snapshot / properties / disassembleAfter / description
        Added value: +"Instructions after the selected instruction to request."
      • addedInput schema / properties / snapshot / properties / disassembleBefore / description
        Added value: +"Instructions before the selected instruction to request."
      • addedInput schema / properties / snapshot / properties / includeDisassembly / description
        Added value: +"Whether to include best-effort disassembly near the selected frame."
      • addedInput schema / properties / snapshot / properties / includeExceptionInfo / description
        Added value: +"Whether to request structured exception information after a stop."
      • addedInput schema / properties / snapshot / properties / includeModules / description
        Added value: +"Whether to include a bounded loaded-module list."
      • addedInput schema / properties / snapshot / properties / maxVariablesPerScope / description
        Added value: +"Maximum variables to return per inspected scope."
      • addedInput schema / properties / snapshot / properties / moduleCount / description
        Added value: +"Maximum loaded modules to include."
      • addedInput schema / properties / snapshot / properties / stackLevels / description
        Added value: +"Maximum stack frames to collect after a stop."
      • addedInput schema / properties / snapshot / properties / threadId / description
        Added value: +"Stopped thread to snapshot; omit to use the thread from the stopped event."
      • addedInput schema / properties / timeoutMs / description
        Added value: +"Maximum milliseconds to wait for the first stopped, exited, or terminated event."
    • Changeddebug_snapshot9 fields changed
      • addedInput schema / properties / disassembleAfter / description
        Added value: +"Number of instructions after the current instruction to request when disassembly is enabled."
      • addedInput schema / properties / disassembleBefore / description
        Added value: +"Number of instructions before the current instruction to request when disassembly is enabled."
      • addedInput schema / properties / includeDisassembly / description
        Added value: +"Include best-effort instructions around the selected frame instruction pointer when supported."
      • addedInput schema / properties / includeExceptionInfo / description
        Added value: +"Include structured exception information for the stopped thread when the adapter supports it."
      • addedInput schema / properties / includeModules / description
        Added value: +"Include a bounded list of loaded executable images and libraries."
      • addedInput schema / properties / maxVariablesPerScope / description
        Added value: +"Maximum variables returned per inspected scope, bounding output size."
      • addedInput schema / properties / moduleCount / description
        Added value: +"Maximum loaded modules to return when includeModules is true."
      • addedInput schema / properties / stackLevels / description
        Added value: +"Maximum number of stack frames to include, from the selected thread top downward."
      • addedInput schema / properties / threadId / description
        Added value: +"Stopped DAP thread to inspect; omit to use the session-selected stopped thread."
    • Changeddebug_source_disassembly8 fields changed
      • addedInput schema / properties / analysis / description
        Added value: +"Hints used to distinguish project code from runtime, system, or third-party frames."
      • addedInput schema / properties / analysis / properties / callerDepth / description
        Added value: +"How many project-controlled caller frames beyond the selected frame to inspect for provenance and root cause."
      • addedInput schema / properties / analysis / properties / projectModules / description
        Added value: +"Optional executable or library names treated as project-controlled modules during frame selection."
      • addedInput schema / properties / analysis / properties / projectRoots / description
        Added value: +"Optional local source-root paths used to recognize project-controlled stack frames."
      • addedInput schema / properties / disassembleAfter / description
        Added value: +"Instructions after the selected instruction included in each disassembly window."
      • addedInput schema / properties / disassembleBefore / description
        Added value: +"Instructions before the selected instruction included in each disassembly window."
      • addedInput schema / properties / stackLevels / description
        Added value: +"Maximum stack frames considered while selecting the project-controlled frame."
      • addedInput schema / properties / threadId / description
        Added value: +"Stopped DAP thread to inspect; omit to use the session-selected stopped thread."
    • Changeddebug_this_crash36 fields changed
      • addedInput schema / properties / adapterPath / description
        Added value: +"Optional explicit CodeLLDB executable path for codelldb/dump modes; omit to auto-discover it."
      • addedInput schema / properties / analysis / description
        Added value: +"Hints used to distinguish project code from runtime, system, or third-party frames."
      • addedInput schema / properties / analysis / properties / callerDepth / description
        Added value: +"How many project-controlled caller frames beyond the selected frame to inspect for provenance and root cause."
      • addedInput schema / properties / analysis / properties / projectModules / description
        Added value: +"Optional executable or library names treated as project-controlled modules during frame selection."
      • addedInput schema / properties / analysis / properties / projectRoots / description
        Added value: +"Optional local source-root paths used to recognize project-controlled stack frames."
      • addedInput schema / properties / args / description
        Added value: +"Command-line arguments passed to the launched program in mode=codelldb."
      • addedInput schema / properties / breakpoints / description
        Added value: +"Optional source breakpoints configured before a live/codelldb reproduction completes setup."
      • addedInput schema / properties / breakpoints / items / description
        Added value: +"Source file and line breakpoints configured before a live reproduction runs."
      • addedInput schema / properties / breakpoints / items / properties / lines / description
        Added value: +"One or more 1-based source line numbers to replace as breakpoints for this source file."
      • changedInput schema / properties / breakpoints / items / properties / source / description
        Previous value: -"Absolute or adapter-resolvable source file path"New value: +"Absolute or adapter-resolvable source file path."
      • addedInput schema / properties / configuration / description
        Added value: +"Required for mode=live: adapter-specific DAP launch/attach configuration."
      • addedInput schema / properties / cwd / description
        Added value: +"Working directory for CodeLLDB/target launch and a project-root hint for diagnosis."
      • addedInput schema / properties / dumpPath / description
        Added value: +"Required for mode=dump: local path to the native core/minidump file."
      • addedInput schema / properties / env / description
        Added value: +"Environment variables supplied to the launched program in mode=codelldb."
      • addedInput schema / properties / mode / description
        Added value: +"current inspects an existing stop; live runs launch/attach through an initialized DAP session; codelldb starts CodeLLDB and launches program; dump opens a frozen core/minidump."
      • addedInput schema / properties / program / description
        Added value: +"Required for mode=codelldb; optional for dump symbol resolution. Local path to the native executable."
      • addedInput schema / properties / request / description
        Added value: +"For mode=live, choose whether the initialized DAP adapter launches a target or attaches to an existing authorized target."
      • addedInput schema / properties / requestTimeoutMs / description
        Added value: +"Per-request DAP timeout in milliseconds for CodeLLDB operations."
      • addedInput schema / properties / snapshot / description
        Added value: +"Bounds and optional evidence categories for a runtime crash snapshot."
      • addedInput schema / properties / snapshot / properties / disassembleAfter / description
        Added value: +"Number of instructions after the selected instruction to request."
      • addedInput schema / properties / snapshot / properties / disassembleBefore / description
        Added value: +"Number of instructions before the selected instruction to request."
      • addedInput schema / properties / snapshot / properties / includeDisassembly / description
        Added value: +"Include best-effort disassembly around the selected instruction pointer when supported."
      • addedInput schema / properties / snapshot / properties / includeExceptionInfo / description
        Added value: +"Request structured exception information for the stopped thread when supported."
      • addedInput schema / properties / snapshot / properties / includeModules / description
        Added value: +"Include a bounded list of loaded executable images and libraries."
      • addedInput schema / properties / snapshot / properties / maxVariablesPerScope / description
        Added value: +"Maximum variables returned per inspected scope, bounding evidence size."
      • addedInput schema / properties / snapshot / properties / moduleCount / description
        Added value: +"Maximum loaded modules to include when module collection is enabled."
      • addedInput schema / properties / snapshot / properties / stackLevels / description
        Added value: +"Maximum number of stack frames to inspect when collecting crash evidence."
      • addedInput schema / properties / snapshot / properties / threadId / description
        Added value: +"Stopped DAP thread to inspect; omit to use the session-selected stopped thread."
      • addedInput schema / properties / sourceMap / description
        Added value: +"For mode=dump, map source paths stored in debug symbols to local source paths."
      • addedInput schema / properties / stopOnEntry / description
        Added value: +"When true in mode=codelldb, request an initial debugger stop at program entry before normal execution."
      • addedInput schema / properties / timeoutMs / description
        Added value: +"Maximum milliseconds to wait for the reproduction to stop, exit, or terminate."
      • addedInput schema / properties / workflow / description
        Added value: +"Controls one-shot diagnosis, explicit verification, or the bounded autonomous crash workflow."
      • addedInput schema / properties / workflow / properties / agentState / description
        Added value: +"Opaque autonomous state returned by the previous autonomous call; pass it back unchanged to continue the bounded cycle."
      • addedInput schema / properties / workflow / properties / baseline / description
        Added value: +"Verification baseline returned by an earlier diagnosis; required when stage=verify."
      • addedInput schema / properties / workflow / properties / maxIterations / description
        Added value: +"Maximum autonomous fix/reproduce iterations allowed when starting stage=autonomous."
      • addedInput schema / properties / workflow / properties / stage / description
        Added value: +"diagnose creates initial evidence; verify compares against a prior verification baseline; autonomous advances the bounded agent state machine."
  5. 31 tool updatesv0.12.0
    • Removeddebug_attach
    • Removeddebug_attach_codelldb
    • Removeddebug_codelldb_info
    • Removeddebug_data_breakpoint_info
    • Addeddebug_diagnose_stop
    • Removeddebug_disassemble
    • Removeddebug_evaluate
    • Removeddebug_events
    • Removeddebug_exception_info
    • Removeddebug_launch
    • Removeddebug_launch_codelldb
    • Removeddebug_modules
    • Addeddebug_open_dump
    • Removeddebug_pause
    • Removeddebug_read_memory
    • Addeddebug_run_to_stop
    • Removeddebug_scopes
    • Removeddebug_set_breakpoints
    • Removeddebug_set_data_breakpoints
    • Removeddebug_set_exception_breakpoints
    • Removeddebug_set_function_breakpoints
    • Removeddebug_set_instruction_breakpoints
    • Removeddebug_set_source_breakpoints
    • Addeddebug_source_disassembly
    • Removeddebug_stack
    • Removeddebug_start
    • Removeddebug_start_codelldb
    • Removeddebug_step
    • Addeddebug_this_crash
    • Removeddebug_threads
    • Removeddebug_variables
  6. 30 tool updatesv0.6.0
    • First observeddebug_attach
    • First observeddebug_attach_codelldb
    • First observeddebug_codelldb_info
    • First observeddebug_continue
    • First observeddebug_data_breakpoint_info
    • First observeddebug_disassemble
    • First observeddebug_disconnect
    • First observeddebug_evaluate
    • First observeddebug_events
    • First observeddebug_exception_info
    • First observeddebug_launch
    • First observeddebug_launch_codelldb
    • First observeddebug_modules
    • First observeddebug_pause
    • First observeddebug_read_memory
    • First observeddebug_scopes
    • First observeddebug_set_breakpoints
    • First observeddebug_set_data_breakpoints
    • First observeddebug_set_exception_breakpoints
    • First observeddebug_set_function_breakpoints
    • First observeddebug_set_instruction_breakpoints
    • First observeddebug_set_source_breakpoints
    • First observeddebug_snapshot
    • First observeddebug_stack
    • First observeddebug_start
    • First observeddebug_start_codelldb
    • First observeddebug_status
    • First observeddebug_step
    • First observeddebug_threads
    • First observeddebug_variables

TDQS

A4.1/5.0

Scored across 18 tools

Disambiguation3/5

Several tools cluster around the same activity: stopped-state evidence (snapshot, diagnose_stop, runtime_report, adaptive_evidence, source_disassembly) and writer tracing (find_writer, trace_value, causal_trace, trace_lifetime). The descriptions include explicit use-case guardrails and 'do not use' guidance, which helps, but an agent would need to read carefully to avoid picking the wrong tool.

Naming Consistency4/5

All tools share the debug_ prefix and use snake_case, with most following a verb_noun pattern like debug_run_to_stop, debug_open_dump, and debug_disconnect. A few exceptions such as debug_this_crash, debug_this_hang, and simple noun forms like debug_status and debug_sessions break the strict pattern, but the overall convention remains predictable.

Tool Count4/5

Eighteen tools is above the ideal 3-15 range, but the server covers a broad debugging domain including session lifecycle, crash/hang workflows, postmortem dumps, snapshotting, tracing, comparison, and reporting. The count feels slightly heavy rather than bloated, and each tool appears to have a distinct role.

Completeness4/5

The tool surface covers the core debug lifecycle: session management, launch/attach/run-to-stop, crash and hang triage, dump analysis, evidence capture, diagnosis, tracing, comparison, and disconnect. Minor gaps exist around explicit breakpoint management, stepping controls, and standalone expression evaluation, but those are outside the server's evident evidence-focused purpose.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers