Skip to main content
Glama
netcoredbg-mcp

netcoredbg-mcp

by thebtf

English | Русский

netcoredbg-mcp

PyPI License: MIT Python MCP Platform

Debug .NET applications from an MCP-capable coding agent without leaving the agent workflow. netcoredbg-mcp combines netcoredbg, the Debug Adapter Protocol, and Windows UI Automation so an agent can observe a running app, stop it deliberately, and inspect the state that explains the behavior.

Python 3.10+ · Windows GUI automation · 135 tools · 8 prompts · 4 resources · v0.23.17

The prepared v0.23.17 PATCH fixes nullable launch environments (#362): string overrides survive beside null, and null removes inherited variables, including Windows case variants. An idle adapter uses guarded drain/restart; with pre_build=False, removal requests refuse an active debuggee without stopping it. The parent and pre-build environments stay unchanged. Python remains the default. Upgrade and restart the MCP server; this does not hot-reload shared receivers. See the release notes for scope and verification boundaries; preparation is not publication.

What it enables

Need

Use the MCP server to

Understand a failure

Launch or attach to a .NET process, set breakpoints, inspect threads, stacks, scopes, variables, modules, output, and exceptions.

Drive a desktop app

Find UI elements, read window trees, click, type, select, use the clipboard, and gather bounded WPF, WinForms, or Avalonia evidence.

Keep evidence honest

Capture a preview for navigation or opt in to a lossless screenshot artifact with integrity metadata.

Verify a repair

Run a bounded runtime-smoke plan with cleanup, output checkpoints, freshness checks, and recorded evidence.

Search a project

Find C# symbols and references, read source context, or run a bounded search_source query.

The Python package remains the default consumer entry point. Its wheel does not bundle the opt-in .NET preview executable. Corrected preview delivery is separate; B3 native step_over, the native step pair and Native Scene Probe work remain modern-host source-only and add no tools to the Python catalog.

The source-built stateful host also accepts initialize-era MCP clients through the SDK's version negotiation. Its catalog and explicit debugSessionId inputs remain native, not the Python tool contract; legacy-client cutover, resources, and full catalog parity are still open (Engram #552). The separate published read-only preview retains its modern-only protocol boundary.

The source-built stateful host has an experimental, explicitly selected --legacy-compat mode for a single process-local console session. It exposes only start_debug, get_debug_state, get_threads, get_call_stack, get_scopes, get_variables, evaluate_expression, set_variable, add_breakpoint, remove_breakpoint, configure_exceptions, get_exception_info, get_modules, get_progress, get_loaded_sources, get_step_in_targets, step_over, step_into, step_out, pause_execution, continue_execution, get_output, get_output_tail, stop_debug, find_code_symbol, find_code_references, and get_source_context. Debug operations use implicit session binding and selected Python-style response envelopes. Without the flag the native catalog and explicit session contract are unchanged. This mode does not use the Python backend and does not change the installed Python default or provide full #552 compatibility.

The three native code-search tools work before and during a session. Their Python-style envelopes report the current observed state at response time. Operator project pins remain authoritative; otherwise initialize-era client roots are resolved per request, with the existing startup-directory fallback. Search remains bounded by native policy and project boundaries; search_source is not implemented in this mode, even though Python-compatible action hints name it.

Mux mutation admission uses _meta.muxSessionId; reads remain available while execution waits, and the opt-in mode advertises experimental.x-mux with sharing: isolated. An untagged start owns its session until confirmed stop; tagged callers cannot claim it. All untagged calls are indistinguishable; this is not client authentication. Conversely, untagged mutations are refused while an identified mux owner exists, unlike Python. An identified owner may expire after NETCOREDBG_SESSION_TIMEOUT seconds (default 60), but never during an in-flight start or stop. Rejected starts do not acquire ownership. stop_debug waits for an in-flight start, including pre-build, and cannot interrupt it; the start request's cancellation route remains available. The legacy route exposes debug://output (text/plain) and debug://threads (application/json) with connection-scoped subscriptions. Subscriptions survive stop/start on the same connection. Updates are coalesced URI invalidations, not session snapshots; pending invalidations can carry across stop/start, and reads resolve the current session. If a notification send is blocked, the server waits at most two seconds for the subscribe/unsubscribe notification gate and returns an error if it cannot synchronize. A blocked transport can delay any response, but debugger start, stop and shutdown do not wait for notification delivery internally. Output reads return the current retained buffer, including an empty idle buffer; thread reads issue a native threads request and report errors when unavailable. debug://state, debug://breakpoints, and complete resource parity remain open. A second start is refused until the bound session is stopped. An observed DAP exit or termination and its observed exit code remain visible until explicit stop, including while cleanup is in progress; failed cleanup or a retirement without a terminal event reports unknown. Pending execution also reports unknown when native evidence does not establish a state. State fields, stack source context, application-type detection, notifications, terminal and timeout results, and Python's full action hints are not equivalent. get_call_stack selects the top frame and stopped inspection context for later scope, variable and evaluation calls. The selection belongs to that mux client; if another client selects a stack, select your own stack again. Untagged callers cannot be distinguished from each other. Execution also invalidates the selection; select a fresh stack before inspecting again. Numeric frame and variable IDs are not tracked as previously issued: after reselection a reused numeric ID cannot be distinguished from an old one. Conditional and hit-count breakpoints and non-null variable filters are rejected; variable paging is nonnegative. Unlike Python, evaluation is subject to mux mutation ownership because expressions can change the debuggee. Uncertain evaluation and breakpoint writes are not retried. If the stopped context changes before a stack, scope, variable or evaluation response is published, the legacy route returns an error instead of mixing epochs. A dispatched evaluation may already have executed; an unknown outcome must not be retried automatically.

set_variable requires mux ownership and the calling client's selected stopped context. After an admitted attempt, select a fresh stack before inspecting or mutating variables again. An uncertain sent mutation may have executed and must not be retried automatically. configure_exceptions is owner-guarded; omitted or null filters mean an empty list; malformed arguments are rejected without changing filters. It reports configuration only after native acknowledgement, not proof of a later exception stop. get_exception_info is a read fenced to the current stopped context. Unlike Python's null result on a negative response or missing thread, native capability absence, refusal and a missing stopped context are reported as errors. Native inspection and filter size bounds still apply.

get_modules and get_progress read bounded, reader-observed event inventories; incomplete or oversized inventories return errors. get_loaded_sources asks the adapter and refreshes the native live-source view when supported. This does not expose that source view through a legacy state resource or its notifications. The legacy progress response retains Python's snake-case and camel-case ID/time aliases; the expanded response is also size-limited.

get_step_in_targets requires mux ownership and the calling client's selected stopped frame and context. Omitted, null or zero frame_id uses that frame. Unlike Python, which returns an empty list on a negative DAP response without a capability check, native capability absence or refusal returns an error. Targeted step_into(target_id=...) uses the selected context and invalidates the selection; select a fresh stack afterwards. Target IDs are not tracked as previously issued: after reselection a reused numeric ID cannot be distinguished from an old one. Both step operations use the observed stopped thread when omitted. An uncertain sent step may have executed and must not be retried automatically. A successful pause acknowledges the request, not a stopped event. State may remain unknown until the debugger confirms a transition, for example with a continue acknowledgement or DAP event. Output is empty before start and after stop; output observed before natural termination remains available until stop while the implicit session is retained. Filtered get_output(clear=true) does not clear; clearing the entire buffer requires mux ownership, unlike Python. Native retention defaults to 100,000 Unicode code points per event and 10,000,000 in total, truncating oversized entries and evicting oldest entries. Tail line counts are limited to signed 64-bit integers. These limits and native event delivery can differ from Python.

Stack pages are limited to 256 frames. stealth_mode=true and unrecognized arguments are rejected. Python's pre_build=true default is retained, but native pre-build requires an explicit build_project; use pre_build=false for an existing binary. Native launch profile, environment and process cleanup limitations still apply. This source mode requires separate consumer verification before any cutover.

The source-built stateful host accepts args, cwd, and stopAtEntry in start_debug. String arguments are sent to DAP in order, including empty strings; an explicit empty array is retained. Omitted or null options are not sent, and an empty cwd is treated as omitted. When omitted, the adapter chooses its own working-directory default; this is not a claim of Python's launch defaults. The adapter's successful launch acknowledgement does not prove the program is still running. A negative launch response returns DAP_LAUNCH_REFUSED only after failed-start cleanup succeeds; no session token is returned. An explicit nonempty cwd must name an existing directory before the adapter starts, or the host returns START_DEBUG_CWD_UNAVAILABLE without a token. Relative paths are checked from the host working directory. This is a point-in-time check, not a pinned directory identity or proof that the debuggee later used it.

The optional justMyCode boolean controls the adapter's user-code filtering; omitting it leaves the adapter default. Python launches with justMyCode: false.

The optional env object passes string values, including empty strings, to the debugger for the debuggee; a null value removes that name from the owned adapter and its debuggee. It does not change the host environment or another session. Names cannot be empty or contain = or NUL; values cannot contain NUL. Names are case-insensitive on Windows and case-sensitive on Unix. The internal NETCOREDBG_MCP_NATIVE_SCENE_PROBE_PIPE and NETCOREDBG_MCP_NATIVE_SCENE_PROBE_NONCE names are reserved and cannot be set or removed. When removing PATH for a DLL, the host resolves dotnet from its own PATH first; if unavailable, it returns START_DEBUG_DOTNET_UNAVAILABLE before starting the adapter.

The local netcoredbg 3.1.3-1 on Windows code page 1251 corrupted non-ASCII environment names and values in both the native and installed Python paths (Engram #551). Do not assume Unicode environment parity from this option.

start_debug loads the optional .netcoredbg-mcp.launch.json (maximum 16 MiB) from the selected project. An explicit projectRoot takes precedence; otherwise the host uses NETCOREDBG_PROJECT_ROOT, MCP_PROJECT_ROOT, --project, a valid local MCP client root, then its startup directory. --project-from-cwd searches for solution, project, or Git markers before using the startup directory. A configured but unavailable operator scope fails closed rather than selecting a client root. Modern clients may receive input_required for client roots before the adapter starts. For initialize-era clients, a failed or timed-out roots/list falls back to the startup directory or --project-from-cwd selection; an operator pin still wins. MCP roots are deprecated in protocol version 2026-07-28 but remain supported here for existing clients.

launchProfile selects a named profile; otherwise defaultProfile or default is used. Required inherited variables are applied first, then profile values, then direct env overrides. A missing requested profile or invalid file returns START_DEBUG_LAUNCH_PROFILE_INVALID; an unavailable root returns START_DEBUG_PROJECT_UNAVAILABLE. The optional launchEnvironment result contains names and counts, never values.

Set preBuild: true and buildProject to restore and build before launching; buildConfiguration is Debug or Release (default Debug). The equivalent snake-case fields and stop_at_entry/launch_profile are accepted; supplying both spellings of one field is invalid. Pre-build defaults to false in this native host, unlike Python's tool default. Relative build-project and program paths resolve from the host working directory. Network/device paths and build project paths containing links or reparse points are refused. These are point-in-time path checks, not a pin against later project changes.

The build uses the selected project root as its working directory, does not use debuggee env overrides, and disables persistent build servers. It refuses to start while another native session or start is active; it never stops another session. Completed build failures include bounded stdout/stderr tails and truncation flags. On Windows, command cleanup requires zero active processes in the owned Job. On Unix, cleanup covers the owned process group, not descendants that escape it. Unconfirmed cleanup blocks later starts until the host restarts.

The same project selection supports the source-built native find_code_symbol, find_code_references, and get_source_context tools. Their results do not report an implicit debug-session state. Python's full search and launch contract, including pre-build and launch defaults, remains incomplete in the native host. Python remains the installed default.

In the source-built stateful host, start_debug also accepts an optional breakpoints array of up to 256 {file, line} entries. Each source file must exist; relative paths resolve from the host's working directory, and lines are one-based. The optional initialBreakpoints result records the debugger's initial verification only: verified: false can become bound after launch. Use the returned debugSessionId and, when available, the observed state.currentThreadId to inspect or step a stopped thread. This input is not part of the published read-only preview or the Python tool contract.

After launch, add_breakpoint(debugSessionId, file, line) adds an unconditional source breakpoint while the session is running or stopped. Each update sends the full requested set for that source, preserving earlier initial and runtime entries. A session holds at most 256 requested entries. Paths are normalized lexically; use the same path for a source rather than relying on symlink or hard-link aliases to identify it. The returned verified and optional actualLine are the adapter's current response, not proof of a hit. A refused update leaves the host's last confirmed requested set intact, but the adapter's applied set is not guaranteed; a later successful update resends the full set. A cancelled update with a possibly sent but unconfirmed request closes the session; cancellation after a fully written and confirmed response does not itself close it. remove_breakpoint(debugSessionId, file, line) removes all requested entries for that exact normalized source and requested line, including initial duplicates. It sends the remaining full source set to DAP, or an empty set for the last entry. A missing entry returns removed: false without a DAP write; the source file does not have to still exist. The same refusal, cancellation, and uncertain-write rules apply. Conditions, hit counts, and runtime listing are not yet supported by this native path.

The source-built stateful host offers get_stop_context(debugSessionId) for the current observed stopped thread: up to five frames, the first available scope's first 20 variables, and the last 10 retained output entries. includeVariables and includeOutputTail control those additions; output is capped at 100 entries. An exception stop also requires adapter exceptionInfo support. The result is refused if the stopped epoch changes, or its serialized content exceeds 256 KiB. The host checks the cumulative escaped JSON size while assembling the result; once it cannot fit, it returns the size error without further DAP requests. get_exception_context requires an exception stop and returns its adapter body, up to 20 frames, and first-scope locals for up to five requested frames. maxFrames defaults to 10 and includeVariablesForFrames to 1. Optional maxInnerExceptions defaults to 0 and is capped at 5. When enabled, evaluation may execute debuggee code and mutate state; failed or uncertain evaluations are never retried. Each option also accepts its Python snake_case spelling, but not both spellings in one call. These native results do not include Python hit counts or all scopes; Python remains the installed default.

In the source-built native host, get_call_stack, continue_execution, step_over, step_into, step_out, and get_exception_info accept omitted or null threadId to select the currently observed stopped thread. thread_id is an alternative spelling; supplying both is invalid. An explicit integer, including zero, still selects that exact thread. If no current stopped thread is available, the operation is refused without a DAP request. The explicit debugSessionId is still required; this is not Python session or result-envelope compatibility.

To inspect a stopped frame, call get_call_stack with includeInspectionContext: true, then pass its inspectionContextId with the frame ID to get_scopes and with each returned reference to get_variables. Keep each numeric ID paired with the context from the same observation; a zero variable reference is a leaf. After a step, continuation, or other invalidation, fetch a new stack and context: the debugger may reuse numeric references. The source-built host accepts optional start and count and forwards them to the adapter. Omitted or null options are omitted from DAP; count: 0 requests all remaining children. Results remain limited to 256 entries and 256 KiB. If an adapter returns more than a positive count, the host returns a protocol error and closes the session rather than returning a misleading page. The adapter still determines which entries it returns. Variable filtering is not supported: a real netcoredbg 3.1.3-1 run returned an empty indexed result for an integer array and classified its elements as named (Engram issue #547).

The source-built stateful host also exposes evaluate_expression(debugSessionId, inspectionContextId, frameId, expression). All four arguments are required. It sends the exact expression and explicit Int32 frame ID once with DAP context: "watch"; it never infers a frame. Expressions may execute application code or mutate the debuggee. watch is not a read-only guarantee. A current successful reply returns kind: "evaluate_success", the same inspectionContextId, result, nullable type, and a nonnegative variablesReference. Expand a positive reference with get_variables using that same current context. The complete serialized success structuredContent is limited to 256 KiB, including JSON escaping and all fields.

An unknown or stale context detected before the write returns DAP_EVALUATE_REFUSED without DAP I/O. A negative DAP reply returns DAP_EVALUATE_FAILED; expression side effects may already have occurred. A stale post-write reply or a malformed, oversized, timed-out or failed exchange returns the redacted DAP_EVALUATE_OUTCOME_UNKNOWN and drains the session. Cancellation before writer handoff keeps the session usable and sends nothing; cancellation during or after a possible write invalidates inspection and drains through the existing session owner before server cleanup finishes. Never retry automatically after a failed or unknown outcome. This additive native path does not change Python's installed default or its optional-frame evaluation contract; quick_evaluate, real-debugger proof and installed delivery remain separate.

The source-built stateful host also exposes get_exception_info(debugSessionId, threadId?). The opaque session token is required; the thread can be explicit or the current stopped thread. It sends one DAP exceptionInfo request only when supportsExceptionInfoRequest is true in the correlated initialize response or a later capabilities event. An absent or false capability returns DAP_EXCEPTION_INFO_UNSUPPORTED without a write. Revocation fences new requests; it does not invalidate an already admitted reply while that request's stopped-thread epoch remains current.

A current reply returns kind: "exception_info_success" and an exception object preserving the adapter body, including nested details.innerException and extension fields such as formattedDescription and source. The body must contain a string exceptionId and DAP breakMode; optional description must be a string and details an object. The complete serialized success content, including its envelope and escaping, is limited to 256 KiB without truncation. A stale target, negative reply or lifecycle invalidation before reader correlation returns DAP_EXCEPTION_INFO_REFUSED. Malformed, oversized, timed-out or failed exchanges return redacted DAP_EXCEPTION_INFO_PROTOCOL_ERROR and drain through the existing session owner after releasing the operation lease. Cancellation before writer handoff preserves the session; a potentially partial frame drains it. Stopping the wait after a fully committed read-only request does not by itself close the session or claim a debuggee mutation. No automatic retry is performed. This native path does not update Python's exception cache. Python remains the installed default; real-debugger exception-stop and installed-delivery proof remain separate.

The source-built stateful host also accepts configure_exceptions(debugSessionId, filters?) while a session is running or stopped. Omitted or null filters replaces the adapter's filters with an empty list; supplied strings retain their order and duplicates. The host sends one DAP setExceptionBreakpoints request only when the adapter advertises exception filters. An acknowledgement is not an exception stop: breakpoints is null when the adapter omits verification, or contains only its per-filter verified values when supplied.

Unsupported adapters return DAP_EXCEPTION_FILTERS_UNSUPPORTED before a write. A negative response returns DAP_EXCEPTION_FILTERS_REFUSED and does not prove the adapter left its previous filters unchanged. Malformed or failed exchanges return DAP_EXCEPTION_FILTERS_PROTOCOL_ERROR and drain the session. Cancellation before writer handoff sends nothing; a potentially written but unconfirmed update drains without retry. Python remains the installed default; a real-debugger exception-stop journey and installed delivery are not yet proven for this path.

The source-built stateful host exposes get_modules(debugSessionId) and get_progress(debugSessionId). Each accepts only a required, nonblank opaque session token and reads a snapshot retained by the existing DAP reader without sending a DAP request. Startup events are included. These tools are available only while the native session registry entry is live; unlike retained output, they do not remain available after automatic session retirement.

get_modules returns kind: "modules_success", modules and count. Numeric and string module IDs remain distinct. A new event adds only an unknown ID, changed replaces only a known entry, and removed removes it. Entries preserve insertion order and expose id, name, nullable path, nullable version, isOptimized (false when omitted), and nullable symbolStatus. Removing and later reintroducing an ID places it at the end.

Initialization advertises supportsProgressReporting: true. get_progress returns kind: "progress_success", progress and count for active operations. Starts create or replace entries; updates change only supplied non-null message and percentage fields for known IDs; ends remove entries. Entries preserve insertion order and expose progressId, title, nullable message, nullable percentage, cancellable (false when omitted), and monotonic startedAt seconds. Replacing a start resets its optional fields and timestamp.

Each inventory independently retains at most 16 MiB of its normalized UTF-8 JSON array, including escaping. A malformed relevant event or retention overflow latches a fixed, redacted runtime_inventory_incomplete error for that tool; later events cannot restore a provably complete inventory. A complete serialized success content over 256 KiB returns runtime_inventory_too_large without truncation. Both errors leave the debug session, neighboring inventory and output usable. These are snapshots of received events, not an OS module scan, an atomic debuggee snapshot or proof that the adapter reported every operation. No retry, cached-resource notification or Python snake_case alias is added. Python remains the installed default and rollback; the preview channel, real-debugger event completeness and installed-delivery proof are unchanged.

The source-built stateful host exposes get_loaded_sources(debugSessionId). It sends one DAP loadedSources request only when the adapter advertises supportsLoadedSourcesRequest; a capability change controls later requests. Success returns a deduplicated snapshot with name, path, sourceReference, origin, presentationHint, and adapterData. Duplicate normalized identities replace the earlier value without changing its order. Windows identities use fixed Unicode 15.1 default lowercase, including contextual and expanding mappings. This matches the Unicode profile of the observed Python 3.13 installation; behavior for installations using other Python Unicode versions is not yet established. get_debug_state exposes the session's reader-ordered loadedSources map and loadedSourcesComplete flag. Events update the map; successful snapshots replace it before later events are applied. A malformed event or a view exceeding 256 entries or 252 KiB of serialized map entries yields loadedSources: null and a false flag; a later valid, bounded snapshot can restore completeness. This view reflects only what the adapter reported. MCP resource notifications remain unimplemented, so this is not a complete Python cutover replacement. If the complete serialized state exceeds 256 KiB, get_debug_state returns DEBUG_STATE_TOO_LARGE without closing the session or returning partial state.

Unsupported and refused requests return distinct fixed errors; malformed, timed-out or over-256-KiB application results return a redacted protocol error and drain the session. Cancellation before a DAP write retains the session; a partially written request is drained. The locally exercised netcoredbg did not advertise the capability. Python remains the installed default and rollback.

The source-built stateful host exposes get_output(debugSessionId, clear?, category?) for retained DAP output. It concatenates events in reader order; categories console, stdout, stderr, and telemetry are retained, and an omitted event category means console. Filtering is case-sensitive. A clear returns the current snapshot and empties the buffer only when category is omitted, null, or empty; a nonempty filter never clears it. After automatic terminal or reader-failure cleanup, all three output tools remain available with the same token, while debugger control and UI operations are unavailable. Call stop_debug after reading to release the retained buffer; subsequent calls return DEBUG_SESSION_NOT_FOUND. Retained output is process-local and is lost when the host exits. Output not delivered by the adapter cannot be recovered.

By default, each event retains at most 100,000 Unicode code points before the ... [truncated] suffix, and the session retains at most 10,000,000 code points, evicting whole oldest events. NETCOREDBG_MAX_OUTPUT_ENTRY and NETCOREDBG_MAX_OUTPUT_BYTES override those limits at host startup; despite the latter name, the unit is code points, not encoded bytes. An invalid limit stops the host before it serves requests and names the variable on stderr without its value. Python remains the installed default.

get_output_tail(debugSessionId, lines?, category?) reads the same buffer without clearing it. It filters by category before splitting lines, returns totalLines, returnedLines, and LF-joined output, and defaults to the last 50 lines. For compatibility with the existing Python slicing behavior, lines: 0 returns all lines and a negative lines: -N skips the first N lines.

search_output(debugSessionId, pattern, contextLines?, category?) searches a non-consuming, category-filtered output snapshot. It uses case-insensitive, culture-invariant .NET regular expressions; their syntax and Unicode case behavior are not Python re parity. It counts every matching line and returns the first 50 matches with one-based line numbers and context (two lines by default). A pattern over 262,142 UTF-16 code units is rejected before parsing with OUTPUT_SEARCH_TOO_LARGE; other invalid patterns return OUTPUT_SEARCH_INVALID_PATTERN. A regex match exceeding 100 ms or search work exceeding two seconds returns OUTPUT_SEARCH_TIMEOUT. Regex construction and obtaining the retained snapshot cannot be interrupted by that work budget. Serialized application content over 256 KiB returns OUTPUT_SEARCH_TOO_LARGE, with no partial results or buffer clearing. The surrounding MCP response can be larger because it carries both text and structured content.

The source-built stateful host exposes step_over, step_into, and step_out with the required opaque debugSessionId and an optional stopped-thread ID. Invalid or extra arguments cause no DAP I/O. Each admitted call sends one DAP next, stepIn or stepOut, respectively. A targeted step_into also sends the supplied targetId.

get_step_in_targets(debugSessionId, inspectionContextId, frameId) requires the current stopped inspection context and adapter supportsStepInTargetsRequest. It returns at most 256 validated targets and 256 KiB of serialized content. Pass targetId (or target_id, not both) and the same current context to step_into. The host validates the epoch and capability at admission but does not track whether a numeric target was previously issued. A later stop invalidates the context; uncertain writes are never retried. Unsupported capability and refused/stale requests are distinct. Unlike this native path, Python sends the query without a capability check and returns an empty list on a negative DAP response. No real targeted-step proof or full Python parity is claimed.

A correlated positive acknowledgement is not a completed step. Success requires a later stopped(reason: "step") event for that exact thread. Pre-acknowledgement, missing/different-thread and non-step stops do not satisfy the waiter. The debugger may step over rather than enter a call; inspect the actual new stack with get_call_stack to establish whether the callee was entered or the caller was reached. Admission invalidates earlier stopped and inspection authority.

One 30-second deadline starts after the complete write and covers both acknowledgement and observation. An exited or terminated event can settle the call before or after acknowledgement. The new tools return their own step_into_* or step_out_* success, terminal and timed-out results, or typed, redacted refusal/protocol errors. Terminal, timeout and protocol failure retire debugger control through the existing close-and-drain owner; retained output follows the rules above. Unlike an acknowledged continue timeout, a step timeout does not retain debugger control. Negative acknowledgement retains the usable session. Cancellation completed before writer handoff retains it without restoring old inspection authority; a possible or uncertain write is drained without retry.

Only one step or continue is admitted per session. An active step excludes all other steps, continue and pause; an active pause excludes new steps and continue. Pause may still overlap an already committed continue. Competing execution is refused without DAP I/O. Root observed passing source-candidate checks and a real source-host/netcoredbg journey entering Middle and returning to Outer, with public stop and retained Job drain. This does not prove absence of transient focus. Integration, installed delivery and full Python compatibility remain unproven. Python remains the default and rollback; these source-built tools do not change the published read-only preview.

For a stopped session, continue_execution(debugSessionId, threadId) sends a DAP continue request without singleThread, so it resumes all threads. It waits up to 30 seconds after the write for the next observed stop or terminal event. An acknowledged timeout does not itself close the session; check state again before further inspection. An unacknowledged possible write closes the session rather than retrying an uncertain execution request. If stop_debug retires the session while a continue is waiting, an internal drain deadline still forces owned process-tree cleanup. The stop reports success only after cleanup completes; the owner-aborted continue returns DEBUG_SESSION_NOT_FOUND, not a DAP protocol error. Explicit caller/host cancellation and genuine cleanup/protocol failures remain failures.

The source-built stateful host also exposes pause_execution(debugSessionId, threadId?). A nonzero explicit Int32 selects that exact thread. Omitted, null or zero input uses the currently observed thread, including a current ID of zero. If no current thread exists, one bounded DAP threads request selects the first returned ID without sorting; a newly observed current thread takes precedence before the pause write. Empty discovery returns DAP_PAUSE_NO_THREADS when no current thread has appeared. One absolute 30-second deadline covers discovery and pause acknowledgement.

The result pause_acknowledged confirms only the adapter's acknowledgement, not stopped state or inspection authority. Only real DAP events update those observations. One pause may run alongside an already committed continue, even while its acknowledgement is held. Another pause, a new continue or step, and pause during an active step are refused without DAP I/O. Refusal, timeout and protocol errors have fixed, redacted outcomes; a terminal result contains only observed terminal fields. Uncertain writes are drained without retry. Cancelling before writer handoff or while a fully committed discovery reply is pending preserves the session; a fully committed pause with a valid acknowledgement is not undone by later caller cancellation. This additive source slice does not change the Python default, installed routing or claim full Python wire parity.

The source-built Windows stateful host exposes ui_get_window_tree(debugSessionId, maxDepth = 3, maxChildren = 50) when FLAUI_BRIDGE_PATH points to its built FlaUI bridge. This read-only observation covers only the bound debuggee's current main window. It does not activate or focus a window, send input, expand controls, or resume execution. Inputs are closed: depth is an integer from 0 through 32, and children per parent from 1 through 256. Traversal is preorder, with at most 4,096 nodes, an 8,192-byte request, a 262,144-byte helper response, and a 1,048,576-byte final MCP result including its matching JSON text mirror. Depth, child and field limits are explicit; unreadable properties are null with unavailableFields, and oversized fields are null with truncatedFields. An AutomationId is returned intact only when it fits 256 Unicode code points, never shortened into an actionable selector. Display names are limited to 1,024 code points, control types to 256, and opaque runtime IDs to 1–64 Int32 values. A required unreadable root identity is an error, not an empty-success tree. childrenComplete: false and truncated: true mean absence and uniqueness cannot be inferred. atomicity: "unproven" applies even to a complete traversal.

ui_invoke(debugSessionId, automationId, expectedTarget?) accepts the existing two nonblank string arguments unchanged. Its exact, case-sensitive AutomationId is limited to 256 Unicode code points (no trimming or alternate selectors). Optional expectedTarget is a closed object requiring processIdentity, the opaque lossless hwnd string, rootRuntimeId, and elementRuntimeId from one discovery response; each runtime ID is an array of 1–64 Int32 values. These are comparison constraints, not authority to choose a process or window. Observable drift returns UI_INVOKE_TARGET_CHANGED with outcome: "not_invoked". When expectedTarget is supplied, the action requires a complete bounded exact-AutomationId uniqueness check: unreadable or overlong IDs and incomplete traversal refuse selection. Two readable matches prove ambiguity even when another ID is unknown. Existing two-argument calls retain their previous selection behavior, including unrelated unsupported or overlong IDs.

ui_invoke_observed(debugSessionId, target, expectedAutomationId) explicitly selects an element observed through discovery instead. All three arguments are required; extra fields are rejected. target is the same closed four-field identity object described above, and expectedAutomationId must be exact, nonblank, and at most 256 Unicode code points. The serialized arguments and helper request each fit 8,192 bytes. The action traverses the complete bounded raw tree (at most 4,096 nodes), checks every visited process/runtime identity, and requires exactly one matching element runtime ID. It then checks that element's exact AutomationId and InvokePattern, plus the bound process, HWND and root identity. Unknown or duplicate AutomationIds on other elements do not select the target and are not treated as absent. Incomplete traversal, unreadable runtime identities, or multiple matches for the requested runtime ID refuse the action. Neither tool falls back to the other or uses mouse/keyboard input.

Both action modes repeat their selection and identity checks at commit before at most one InvokePattern call. Observed success reports kind: "ui_invoke_observed_success", selection: "runtime_id", invoked: true, method: "InvokePattern", and atomicity: "unproven". Runtime IDs can be reused; these comparisons are not an element lease or proof of unchanged business meaning. UIA provides no atomic compare-and-invoke transaction: a replacement preserving all checked values may be indistinguishable.

Discovery and invoke share one session-owned helper admission/lifecycle. Each operation uses a separate one-shot helper with a single 10-second deadline and at most two further seconds for cleanup. Unconfirmed cleanup is reported and keeps admission closed until the retained helper's exit is confirmed. The EXE or dotnet-hosted DLL helper is created atomically inside a host-owned Windows kill-on-close Job using PROC_THREAD_ATTRIBUTE_JOB_LIST; there is no unassigned suspended-child interval. This action requires that attribute's documented Windows 10 / Server 2016-or-later support. Windows Server 2012/R2 support is not claimed for ui_invoke; unsupported atomic ownership refuses the action before dispatch, without a weaker fallback. The established debugger launcher retains its previous assignment path and compatibility. Host exit closes the helper Job. Debugger state, continue, and stop remain independently callable even if a UIA provider blocks at a breakpoint or modal handler. Session retirement or an observed DAP terminal event revokes action authority and cancels its in-flight helper; Native Scene observation identity remains available. If dispatch may have occurred but its result is lost, the result is UI_INVOKE_OUTCOME_UNKNOWN with outcome: "unknown", not a claim that no action ran. Never automatically retry it: inspect debugger/application state first. Success confirms only that InvokePattern returned, not arbitrary business completion. Discovery IPC has no invoke commit. This native slice is explicitly main-window-only: it does not provide Python's all-top-level-window coverage, ui_find_element, selected-window state, sibling/modal-window actions, or XPath. It is not full Python parity, does not change the Python default/catalog, and does not add UI actions to the published read-only preview.

The source-built native scene tools accept native-scene-probe/1 with probe schema /1 or /2. A successful /1 request keeps its original contract. If a live session has no positively identified candidate, get_ui_probe_capabilities returns a typed UNSUPPORTED_CAPABILITY under /2. The frozen /1 schema cannot represent that error, so the same condition returns an MCP-level error without structured application content. No capture is started and no identity is inferred. Artifacts keep their original bytes and provenance when read through either revision. These source-built tools do not change the installed Python default or the published read-only preview.

On Windows, the source-built host identifies the local process from its DAP process event through one non-inheritable handle with PROCESS_QUERY_LIMITED_INFORMATION | SYNCHRONIZE. It reads the executable image and creation time without enumerating modules, then rechecks that same process object is alive before pinning the identity. Denied queries, incomplete image paths, exited processes, and unreadable executables leave identity unavailable; the host neither substitutes the launch path nor retries a failed query.

The separate native read-only preview exposes find_code_symbol, find_code_references and get_source_context. Each schema-2 manifest binds its exact proof generation; historical schema-1 A1 assets retain their one-tool meaning. The legacy-diagnostic preview, published as stateless-preview-v0.23.17-preview.3, uses preview-only MCP 2.3.0: missing/malformed required metadata returns correlated -32602, and unsupported versions return exact -32022; an ordinary corrected request continues in the same process. clientInfo remains optional. The retained candidate and freshly downloaded public package each passed all 18 generation-bound scenarios, including unchanged installed-Python rollback. Use the generation-bound instructions for the selected asset. Python remains the default. The accepted modern-only Program A/A3 boundary is below; deferred conformance and runtime servicing are not closed.

Preview control-plane policy

Program A/A3 establishes this opt-in, local, read-only front door on published preview.3. It does not establish full MCP conformance or complete the stateful .NET migration. The existing public 18-scenario consumer proves the supported journeys; source evidence and untested limits are distinguished below.

Boundary

Supported policy

Evidence and limits

Version and client

Only 2026-07-28. Discovery is optional, not a handshake. Modern and dual-era clients use modern requests. Legacy-only initialize is refused with actionable -32601; no fallback or legacy session.

valid-discovery-list-call, optional-client-info-request-local, legacy-initialize-supported-version-diagnostic.

Request errors

Within the valid JSON-RPC request boundary in specs018, required metadata errors retain the original ID and -32602; unsupported string versions return exact -32022 requested/supported data. Corrected calls recover in the same process.

required-metadata-version-recovery; arbitrary malformed input is not covered by this guarantee.

Capabilities and tools

Tools-only with listChanged:false, no logging or other advertised services; exactly find_code_symbol, find_code_references, get_source_context. Empty clientCapabilities is valid.

Discovery/catalog/value scenarios and the fixed advertised schemas; full nested client-capability conformance is not claimed.

Filesystem authority

Only launch-pinned --project selects the root. CWD, environment, clientInfo, client capabilities/roots and excluded methods cannot expand that authority.

Runtime hostile-CWD/environment, containment and path-refusal scenarios; immutable search-engine-root source trace for client metadata, not a separate hostile-client-roots replay.

Output, lifecycle and rollback

Declared tool/request responses retain the complete 256 KiB JSON-byte limit excluding LF, bounded reads, existing cancellation/EOF ownership and unchanged installed-Python rollback.

Frame-refusal, transport and rollback scenarios plus source error-frame regressions; not atomicity under arbitrary transport I/O failure.

Deferred protocol limits

Full malformed-envelope/ID/params policy, parse-error recovery and full capability-schema conformance remain unverified outside this accepted result.

SDK whole-line intake and parse-error responses that may bypass application outgoing filters are real open limits, not certified safe by exclusion.

Earlier assets retain their own proof generations, including preview.2's 17 scenarios. Self-contained runtime 8.0.32 still contains the reviewed affected Brotli/socket components; no supported trigger was found on the inspected stdio route. runtime8-security-servicing remains open; replacing the system runtime does not repair this executable. Reassess these limits before expanding transport, trust, plugins or stateful behavior. Program B/C, default selection and Python retirement still require their own acceptance and authority.

Related MCP server: cdp-tools-mcp

Quick start

Install the package, let the setup wizard provision or discover the debugger, then register the public CLI with your MCP client. The command below is for Claude Code:

pipx install netcoredbg-mcp
netcoredbg-mcp --setup
claude mcp add --scope user netcoredbg -- netcoredbg-mcp --project-from-cwd

Restart the MCP client after changing its configuration. From a .NET workspace, ask the agent:

Set a breakpoint in Program.cs, run the application, and show the local values when it stops.

--project-from-cwd searches upward from the server's startup directory for a solution or .NET project. Use --project instead when the server must be pinned to one explicit project root.

Requirements

  • Python 3.10 or later.

  • pipx (recommended) or pip to install the package.

  • A .NET SDK/runtime suitable for the application being debugged.

  • netcoredbg. The setup wizard can download or discover it and scans compatible dbgshim.dll files.

  • An MCP client, such as Claude Code, Cursor, Cline, Roo Code, Windsurf, Continue, or Claude Desktop.

  • Windows for the GUI automation paths. Debugger functionality remains subject to the target runtime and netcoredbg capabilities.

Install and configure

pipx keeps the command-line server isolated from project environments:

pipx install netcoredbg-mcp
netcoredbg-mcp --setup
netcoredbg-mcp --version

The setup flow checks for a .NET SDK, provisions or finds netcoredbg, scans dbgshim candidates, builds the FlaUI bridge on Windows when required, and prints a client configuration snippet.

Package-managed installation

Use pip when your environment owns Python packages directly:

pip install --upgrade netcoredbg-mcp
$env:NETCOREDBG_PATH = "C:\Tools\netcoredbg\netcoredbg.exe"
netcoredbg-mcp --project C:\Work\MyDotNetApp

Run netcoredbg-mcp --setup after an upgrade if the target runtime changed or you need a new managed debugger or FlaUI bridge.

Client configuration

Use --project-from-cwd only when the client launches the server from the .NET workspace or supplies local MCP roots. When no explicit --project or operator environment pin is configured, local MCP roots take precedence. If there is neither an operator pin nor a usable local root, the server searches its startup directory for a solution, project, or Git marker and falls back to that startup directory when no marker exists.

{
  "mcpServers": {
    "netcoredbg": {
      "command": "netcoredbg-mcp",
      "args": ["--project-from-cwd"]
    }
  }
}

For a client that starts servers from a stable global location, pin the target project explicitly instead of relying on that server startup directory:

{
  "mcpServers": {
    "netcoredbg": {
      "command": "netcoredbg-mcp",
      "args": ["--project", "C:\\Work\\MyDotNetApp"]
    }
  }
}

If the debugger is managed outside the setup flow, set its path in the client process environment rather than committing it to a repository. Use the same project-selection mode that fits the client; this globally launched example pins its target explicitly:

{
  "mcpServers": {
    "netcoredbg": {
      "command": "netcoredbg-mcp",
      "args": ["--project", "C:\\Work\\MyDotNetApp"],
      "env": {
        "NETCOREDBG_PATH": "C:\\Tools\\netcoredbg\\netcoredbg.exe"
      }
    }
  }
}

Keep .mcp.json, .netcoredbg-mcp.launch.json, credentials, and local project paths out of source control.

Run from a source checkout

The installed CLI is the consumer route. Use a source checkout only while developing the server itself:

uv sync --locked --project C:\Work\netcoredbg-mcp
cd C:\Work\MyDotNetApp
uv run --no-sync --project C:\Work\netcoredbg-mcp netcoredbg-mcp --project-from-cwd

--no-sync prevents a supervised server restart from changing the shared virtual environment. Synchronize explicitly after changing dependencies or the lockfile.

First debugging session

start_debug launches the debug session and normally returns with it running. continue_execution, step_over, step_into, and step_out are long-poll operations: they return when the debuggee stops, exits, terminates, or reaches their timeout.

For console programs, use this sequence:

  1. Add a breakpoint in the code path of interest.

  2. Call start_debug with the program and, when appropriate, pre_build=true.

  3. Wait for state=stopped.

  4. Read get_call_stack, get_scopes, and get_variables.

  5. Evaluate or step only while stopped.

  6. Continue or terminate the session.

For WPF, Avalonia, and WinForms targets, use the Desktop UI sequence below instead. It starts the application without breakpoints, waits for the window to load, and only then adds a breakpoint; a pre-launch breakpoint can make the window appear hung.

A representative launch request is:

{
  "program": "bin/Debug/net8.0/MyApp.dll",
  "build_project": "MyApp.csproj",
  "pre_build": true,
  "stop_at_entry": false
}

For .NET 6+ targets, a built .exe is accepted when its matching .dll and .runtimeconfig.json are present. Use inspect_debug_launch_compatibility(program) before launch when you need to inspect the selected runtime and shim without starting the process.

Desktop UI and visual evidence

While a GUI debuggee is RUNNING, use UI tools to observe and operate it. Once the UI thread is stopped at a breakpoint or pause, stack and variable inspection become available but the window will not respond normally until you continue.

start_debug(...)
ui_get_window_tree() # Wait for the application window to load.
add_breakpoint(file="MainWindow.xaml.cs", line=42)
ui_find_element(automation_id="saveButton")
ui_click(automation_id="saveButton")
# Trigger the breakpoint, then inspect state after it reports STOPPED.

Selected windows and query ownership

All UI and UI-evidence tools registered by one server share the same lazy backend and selected-window state. A successful ui_switch_window therefore scopes subsequent ui_find_element and ui_query calls to the same live window.

On the Windows FlaUI backend, unrooted element searches stay inside the selected window while it remains live. If that window closes, searches can use the sole remaining live top-level window of the connected process without reconnecting or changing the selected-window pointer. With no live windows, or with multiple live windows and a closed selection, unrooted searches fail explicitly; the bridge does not guess the first or largest window. Use ui_switch_window to select a live window, or pass a unique root_id (rootAutomationId on the bridge wire). Explicit roots do not change the selection and still reject ambiguous matches or windows outside the connected process. Window discovery is bound to the process instance opened at connect, not just its numeric PID. After that instance exits, a fresh connection is required; PID reuse cannot revive the old connection.

For ui_query(fields=["window"]), each result's window identifies the actual owning live top-level window of that resolved element, including explicit container roots and queries without an element selector. If ownership cannot be proven, title and automation_id are empty strings rather than the retained selected window's metadata.

Physical numeric keypad input

On the default Python server's Windows FlaUI path, ui_send_keys(keys="{NUMPAD1}", automation_id="myInput") sends the physical keypad 1 key, not the text "1" or the top-row digit key. ui_send_keys_focused(keys="{NUMPADENTER}") sends keypad Enter, distinct from {ENTER}. ui_send_keys_batch(keys=["{NUMPAD1}", "{NUMPADADD}", "{NUMPADENTER}"], automation_id="myInput") sends them in order; ui_key_sequence(keys=["NUMPAD1", "NUMPADENTER"], modifiers=[], automation_id="myInput") accepts names without braces.

Supported physical keys: {NUMPAD0}–{NUMPAD9}, {NUMPADADD}, {NUMPADSUBTRACT}, {NUMPADMULTIPLY}, {NUMPADDIVIDE}, {NUMPADDECIMAL}, {NUMPADENTER}, and {NUMLOCK} (17 keys). {NUMLOCK} presses and releases the lock key; it does not set a chosen lock state. Physical-key delivery is scoped to the Windows FlaUI backend, not the alternative UI backend or the opt-in .NET preview.

Screenshot modes

ui_take_screenshot() returns a WebP navigation preview with evidence_grade=preview_only. It is useful for locating the next UI action, not for asserting lossless visual evidence.

For an artifact that preserves the original raster and integrity metadata, opt in explicitly:

ui_take_screenshot(evidence=true)

Normally this mode returns evidence_grade=lossless_raster, persists a session-scoped PrintWindow PNG, and includes SHA-256 and geometry provenance. When a bridge PrintWindow frame is probably black, capture may attempt one verified BitBlt fallback even without a strict target. It may temporarily activate the target window and then attempt to restore the previous foreground. That response is explicitly method=BitBlt, fallback=flash-focus, fallback_reason=probable_black_printwindow, and evidence_grade=typed_bitblt_fallback; it records the GetWindowDC authority, ROP, target PID, stable geometry/DPI, and foreground activation/restoration proof. Any malformed, black, unstable, mismatched, or incompletely proven fallback persists nothing. Any raw-derived crop requires evidence=true; preview-only captures do not provide it.

Without an expected target, persisted evidence reports target_comparability.status=UNASSERTED: it is valid lossless evidence, but does not prove a resize target. Supply all three physical target fields to compare the raw raster, not a derivative:

ui_take_screenshot(evidence=true, expected_hwnd=..., expected_physical_width=..., expected_physical_height=...)

Strict capture targets the supplied expected_hwnd, rather than rediscovering a window for the same process. The bridge refuses a different resolved HWND before raster capture or activation. If a bridge still returns another HWND, the public tool returns PHYSICAL_CAPTURE_MISMATCH without an image, pixel payload, or persisted screenshot. A size-only mismatch for the expected HWND still returns a navigation preview with MISMATCH and no persisted evidence; only MATCHED persists raw evidence. Matching HWND and dimensions checks capture provenance, not whether the compositor supplied the intended window's pixels. max_width affects only the preview and HD derivative, never this comparison. ui_resize_window() reports request-versus-readback target_comparability.status as MATCHED, MISMATCH, or UNAVAILABLE; resized=true confirms request completion, not target equality.

Use ui_take_annotated_screenshot() to receive Set-of-Mark labels, then pass its generation to ui_click_annotated(element_id=..., generation=...). For overlapping screenshots in one server, each response's generation and saved HD path belong to its own labels. A supplied generation that differs from the latest screenshot is rejected before clicking. A refresh while the click is being prepared is also rejected. Omitting generation retains the legacy behavior and cannot detect that the caller is using an older screenshot. Even a matching generation does not prove that the window or element remains at the same screen position. Use ui_bring_to_front() only when the debuggee should intentionally leave stealth mode.

ui_bring_to_front() reports the target HWND and expected/observed PID, the foreground HWND and PID observed at the end of the call, and foreground_matches_target (true, false, or null when unknown). activation_attempted and activation_api_result separately describe the ordinary Windows request. activated=true requires a still-current session and a matching final HWND/PID observation; it does not promise that foreground ownership persists after return. Numeric PID and HWND checks cannot establish the original process or window incarnation after identifier reuse. Windows may deny activation. stealth_mode can be null when bridge reconnect is uncertain.

Tool map

The published MCP catalog has 135 tools.

Category

Count

Examples

Debug control

14

start_debug, attach_debug, continue_execution, pause_execution, terminate_debug

Breakpoints and exceptions

7

file/function breakpoints and exception configuration

Inspection and DAP coverage

15

stacks, scopes, variables, modules, disassembly, source locations

Tracepoints

6

add, read, clear, and cursor trace evidence

Snapshots and object analysis

5

create, compare, list, and summarize captured state

Memory and output

6

memory, debugger output, and build diagnostics

Runtime smoke

21

hygiene, validation, execution, lifecycle, and cleanup evidence

UI automation

55

windows, elements, focus, input, screenshots, grids, and monitors

Code search

4

symbols, references, context, and regex search

Edit-and-Continue

1

apply_code_change

Process management

1

cleanup_processes

The server also exposes four resources: debug://state, debug://breakpoints, debug://output, and debug://threads.

Eight prompts provide guided workflows: debug, debug-gui, debug-exception, debug-visual, debug-mistakes, investigate, debug-scenario, and dap-escape-hatch.

Process cleanup boundary

cleanup_processes(force=True) invokes the retained cleanup owners for debugger adapters and the FlaUI bridge created by this server. It does not turn a numeric PID, a DAP process event, or a saved record into permission to terminate a process. Old PID files are left untouched and inert; startup no longer sweeps their PIDs.

Stopping or cleaning up an attached debug session detaches from the target rather than terminating it. An explicit terminate_debug request remains a separate action. Cleaning up the FlaUI bridge does not grant ownership of the UI app. Cleanup failures remain incomplete results, not successful removal of records.

On Windows, cleanup uses retained process and Job handles. On POSIX, a private guardian controls its own live process group, including ordinary descendants that remain in that group. This is not a guarantee for daemonized or group-escaped descendants. In the force-cleanup response, terminated counts only confirmed forced terminations of owned roots caused by cleanup. It excludes natural or graceful exits and is not a count of callbacks, all stopped processes, or the whole-tree population. On POSIX, terminated remains 0 because the cleanup result does not establish the cause of the root's exit. This excludes unconfirmed causality; it does not mean that no processes were stopped. The whole-tree count remains unknown. tree_terminated is null because no whole-tree count is supplied. complete, remaining_owners, and errors report completion and unfinished cleanup; a failure returns an error with the same cleanup data. An empty observation registry alone does not prove that an operating-system tree drained.

Code search boundary

find_code_symbol, find_code_references, and get_source_context execute in the MCP server process. For search_source, source-file enumeration and the synchronous wait remain in that process; per-file source reading/scanning and regex matching run in a bounded dedicated Python subprocess, with a default five-second timeout and a maximum of 1,000 results. It honors only the project root .gitignore; nested ignore files are not consulted.

Runtime-smoke verification

Use runtime-smoke tools when you need a bounded, replayable verification rather than an ad hoc debugging conversation. Start with debug_hygiene_preflight, create an output checkpoint, run a validated plan, and close the run with its cleanup contract. verify_debug_freshness can prove that the live process still matches the expected workspace and artifacts.

For long-lived orchestration, use the lifecycle family: runtime_smoke_start, runtime_smoke_tail_events, runtime_smoke_get_result, and runtime_smoke_stop. See the production testing playbook for the consumer-mode release gate and the examples in docs/examples/ for WPF workflow, WPF DataGrid drag/drop, and diagnostic-plan shapes.

Input provenance

Runtime-smoke plans can distinguish the runner's own input from operator or foreign input. For an operator-free product verdict, set both input_policy.no_global_input=true and run_confidence.no_operator=true. The first setting prevents runner-controlled global input; the second requires input-monitor confidence evidence for the action window.

The resulting run_confidence classification is CLEAN_PROVEN when the monitor proves no operator input, DIRTY_UNPROVEN when it observes physical or foreign input or receives malformed/unattributable input evidence, or UNPROVEN when monitor evidence is unavailable or incomplete. Only CLEAN_PROVEN permits a product verdict.

When a plan permits runner-controlled global input, such as ui.drag, set input_policy.no_global_input=false and retain run_confidence.no_operator=true when a product verdict needs confidence evidence. Every covered input event must carry runner_injected provenance. A foreign_injected or physical event yields DIRTY_UNPROVEN; the caller must not treat that run as a product verdict.

Command-line reference

Command or option

Purpose

netcoredbg-mcp --version

Print the installed package version.

netcoredbg-mcp --setup

Provision or discover debugger prerequisites, then print a client configuration snippet.

netcoredbg-mcp setup --enc

Install the default prebuilt Edit-and-Continue debugger with ncdbhook.dll on Windows x64; a source build is opt-in.

netcoredbg-mcp --project C:\Work\MyApp

Set the default project root for path resolution and source search.

netcoredbg-mcp --project-from-cwd

Resolve the project from the startup directory and compatible local MCP roots.

--project and --project-from-cwd are mutually exclusive. --enc must be used with setup or --setup.

Configuration reference

Variable

Purpose

NETCOREDBG_PATH

Explicit path to netcoredbg.

NETCOREDBG_PROJECT_ROOT / MCP_PROJECT_ROOT

Authoritative project-root fallback.

FLAUI_BRIDGE_PATH

Explicit FlaUI bridge executable path.

NETCOREDBG_SCREENSHOT_MAX_WIDTH / NETCOREDBG_SCREENSHOT_QUALITY

Inline preview dimensions and WebP quality.

NETCOREDBG_SESSION_TIMEOUT

Multi-agent ownership inactivity timeout.

LOG_LEVEL / LOG_FILE

Server diagnostic logging controls.

An explicit --project or project-root environment variable takes precedence over MCP client roots. Network/UNC client roots are rejected.

Explicit paths to existing DLL/EXE targets, source files, and build projects, plus output paths, need no separate debug permission, even outside the default project or worktree. Project-root selection provides context, not a directory allowlist. This removes MCP-wrapper policy, not a native Samsung netcoredbg operating-system sandbox. File and .NET target validity checks remain, as do the independent evidence, restore, and source-search guards.

Architecture

graph TB
    Client[MCP client] --> Server[netcoredbg-mcp stdio server]
    Server --> Tools[Debug, inspection, UI, smoke, and search tools]
    Tools --> Session[Session manager and process registry]
    Session --> DAP[DAP client]
    DAP --> Debugger[netcoredbg]
    Debugger --> App[.NET debuggee]
    Tools --> UI[Windows UI automation bridge]

The public console script starts a FastMCP stdio server. Its tool modules share one session manager, which owns debugger state, default project context, process cleanup, output, snapshots, and trace evidence. The DAP client talks to netcoredbg; Windows UI operations use the FlaUI bridge when available, with a pywinauto fallback for supported operations.

Troubleshooting

netcoredbg is not found

Symptom: startup or start_debug reports that the debugger cannot be found.

Cause: setup did not install a managed debugger and NETCOREDBG_PATH is not set.

Fix: run netcoredbg-mcp --setup, or set NETCOREDBG_PATH to the full netcoredbg.exe path in the MCP client environment.

Verify: run netcoredbg-mcp --setup again and confirm its output reports a found or provisioned debugger. Then confirm that the MCP client can list the server tools.

A breakpoint remains unverified

Symptom: the process does not stop at the requested source line.

Cause: common causes include stale build output, a wrong target DLL, optimized Release binaries, or a line without executable IL.

Fix: use pre_build=true, debug a Debug build, verify that source and assembly match, and inspect list_breakpoints() for DAP-adjusted locations.

Verify: the response reports verified=true or gives the adjusted line.

A GUI appears frozen

Symptom: a WPF, WinForms, or Avalonia window stops repainting after a debug command.

Cause: its UI thread is stopped at a breakpoint or pause.

Fix: inspect state while stopped, then call continue_execution() before expecting the window to accept UI input.

Verify: get_debug_state() reports running and fresh screenshots update.

Limitations

  • GUI automation is Windows-focused.

  • netcoredbg and DAP behavior depends on the target runtime and debugger support.

  • Memory tools require valid adapter-supported memory references.

  • Native debugging, browser automation, and non-.NET runtimes are out of scope.

Contributing

See CONTRIBUTING.md for development setup, test expectations, sensitive-data rules, and pull-request requirements.

License

MIT. See LICENSE.

Available Tools

135 tools
add_breakpointA
Idempotent

Add a breakpoint at a specific line.

IMPORTANT TIMING:

  • Breakpoints set BEFORE start_debug only work for debugging app startup.

  • For UI apps (WPF/WinForms): remove breakpoints before launch, then add them AFTER the UI is fully loaded. Otherwise the app may hang during initialization.

  • When debugging UI issues: wait for app to be fully interactive before setting breakpoints in event handlers.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

Args: file: Absolute path to source file line: Line number (1-based) condition: Optional condition expression hit_condition: Optional hit count condition

NameRequiredDescriptionDefault
fileYes
lineYes
conditionNo
hit_conditionNo

TDQS

A4.9/5.0
Behavior5/5

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

Adds behavioral context beyond annotations: warns about potential app hangs during UI initialization, and explains idempotent nature implicitly.

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

Conciseness4/5

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

Front-loaded with purpose, then detailed timing info. Slightly verbose but every sentence adds value; could be more concise.

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

Completeness5/5

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

Covers purpose, usage, timing, parameters, and alternatives; sufficient for a simple breakpoint tool without output schema.

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

Parameters5/5

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

Describes each parameter with meaning (absolute path, 1-based line, optional conditions), compensating for 0% schema coverage.

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

Purpose5/5

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

Clearly states 'Add a breakpoint at a specific line.' Distinguishes from siblings like add_function_breakpoint and add_tracepoint.

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

Usage Guidelines5/5

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

Provides explicit timing instructions (before/after start_debug, UI app details) and escape hatch reference, guiding when to use or not.

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

add_function_breakpointA
Idempotent

Set a breakpoint on a function by name.

Breaks when the named function is entered. This is useful when you know the method name but not the exact line number.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

Persists across restart cycles. Remove via remove_function_breakpoint or clear via clear_breakpoints (no file arg).

Args: function_name: Full or partial function name to break on condition: Optional condition expression hit_condition: Optional hit count condition

NameRequiredDescriptionDefault
conditionNo
function_nameYes
hit_conditionNo

TDQS

A5/5.0
Behavior5/5

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

Beyond annotations (idempotentHint=true, openWorldHint=false), the description reveals that breakpoints persist across restart cycles, how to remove them, and when the break triggers (on function entry), adding valuable behavioral context.

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

Conciseness5/5

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

The description is efficiently structured: main purpose first, then situational guidance, escape hatch, persistence info, and parameter details. Every sentence adds value with no redundancy.

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

Completeness5/5

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

For a straightforward function breakpoint tool, the description covers purpose, usage, behavior, parameters, and lifecycle, making it fully self-contained despite lacking an output schema.

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

Parameters5/5

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

Despite 0% schema description coverage, the description's Args section explains each parameter (function_name: 'Full or partial function name to break on', condition: 'Optional condition expression', hit_condition: 'Optional hit count condition'), adding meaning beyond the schema's titles.

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 'Set a breakpoint on a function by name,' which clearly states the verb and resource. It distinguishes from siblings like add_breakpoint (line-based) and remove_function_breakpoint by explaining when to use (when method name is known but not line number).

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 you know the method name but not the exact line number'), provides escape hatch reference, and explains persistence and removal options, guiding the agent to appropriate alternatives.

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

add_tracepointA

Set a non-stopping tracepoint that logs expression values.

State: Works in any state. The tracepoint fires automatically on each hit.

The tracepoint evaluates the expression each time the line is hit, without visibly pausing the program. Results are stored in a trace buffer accessible via get_trace_log.

Async state machines: when the target line is inside an async method, the C# compiler moves the first executable instruction to the line after the await. netcoredbg reports the adjusted line via DAP, and netcoredbg-mcp tracks both the user-requested and adjusted lines — tracepoint matching works for both. No user action required; get_trace_log will contain entries and the program will NOT pause.

Args: file: Source file path line: Line number (1-based) expression: Expression to evaluate on each hit

NameRequiredDescriptionDefault
fileYes
lineYes
expressionYes

TDQS

A4.3/5.0
Behavior5/5

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

With minimal annotations (only openWorldHint: false), the description fully discloses behavioral traits: the tracepoint does not pause the program, logs values to a trace buffer accessible via get_trace_log, and handles async method adjustments automatically. 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.

Conciseness4/5

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

The description is well-structured with paragraphs explaining behavior, state, and async handling, followed by an args list. It is efficient and front-loaded but could be slightly more concise by merging some sentences.

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

Completeness4/5

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

Given the lack of output schema and 3 required parameters, the description covers key aspects: purpose, state applicability, async behavior, and result storage. It could mention the return type or success indication, but overall it is sufficient for an agent to understand the tool's behavior.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It provides brief explanations for each parameter (file: source file path, line: line number 1-based, expression: expression to evaluate) but lacks details like file path format or expression syntax rules, so it adds only minimal meaning 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 clearly states 'Set a non-stopping tracepoint that logs expression values.' It uses specific verb+resource and distinguishes from sibling tools like add_breakpoint and add_function_breakpoint by highlighting the non-stopping behavior and logging purpose.

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 mentions 'State: Works in any state' and addresses async state machines, providing context for when to use the tool. However, it does not explicitly state when not to use it or compare directly with alternatives like breakpoints, so it lacks explicit exclusion guidance.

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

analyze_collectionA
Read-onlyIdempotent

Analyze a collection variable in one call.

State: STOPPED required. Get variables_reference from get_variables() response.

Returns count, element type, null count, first/last N items, and numeric stats (min/max/sum/average) for numeric collections.

Args: variables_reference: Variable reference from get_variables response sample_size: Number of first/last items to include (default 5)

NameRequiredDescriptionDefault
sample_sizeNo
variables_referenceYes

TDQS

A4.2/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint), the description adds context about the required state (STOPPED) and the return values, which is helpful. No contradictions.

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 concise, using a clear header, prerequisites, return list, and argument definitions. No extraneous information.

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

Completeness4/5

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

The description covers inputs, outputs, and prerequisites adequately for a tool with two parameters. Minor omissions like error handling for empty collections don't significantly impact completeness.

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 0% schema description coverage, the description effectively explains both parameters: variables_reference (from get_variables response) and sample_size (default 5, number of first/last items). This adds necessary meaning beyond type.

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

Purpose5/5

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

The description clearly states the tool analyzes a collection variable, specifies what it returns (count, element type, null count, first/last N items, numeric stats), and distinguishes it from sibling debugging and UI tools.

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

Usage Guidelines3/5

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

The description provides a necessary precondition (STOPPED state and get variables_reference from get_variables) but does not offer guidance on when to use this tool versus alternatives like summarize_object or other analysis tools.

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

apply_code_changeB
Destructive

Apply source edits to a stopped debug session using Edit-and-Continue.

NameRequiredDescriptionDefault
fileYes
editsYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate destructiveHint: true, and the description confirms the tool edits source code, aligning with that hint. However, the description lacks additional behavioral context such as whether changes are permanent, affect the original file, or require specific permissions. Given annotations cover the destructive nature, a 3 is appropriate for adding minimal extra context (stopped session).

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

Conciseness4/5

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

The description is a single sentence with no wasted words. It is appropriately brief given the context, though it could benefit from a bit more detail without becoming verbose.

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

Completeness2/5

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

Despite having an output schema (not shown), the description fails to fully describe the tool's behavior given its complexity and the many sibling tools. It does not explain the expected format of edits, what happens after applying (e.g., does the session continue?), or any limitations. The tool requires deeper guidance for proper use.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no information about the parameters 'file' or 'edits'. For 'edits', which is an array of objects with additionalProperties: true, there is no guidance on required structure (e.g., line numbers, new text). This is a critical gap that renders the tool difficult to use correctly.

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

Purpose5/5

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

The description clearly states the tool applies source edits to a stopped debug session using Edit-and-Continue. It specifies both the action (apply source edits) and the context (stopped debug session), and distinguishes it from sibling tools like set_variable or evaluate_expression which operate on runtime values rather than source code.

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 mentions the tool is for a stopped debug session, providing clear context for when to use it. It does not explicitly state when not to use alternatives, but the specificity of 'Edit-and-Continue' implies it's for modifying source code during debugging, which is distinct from other tools.

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

attach_debugA

AVOID - Use start_debug instead. Attach to already-running process (LIMITED).

LIMITATION: netcoredbg does NOT support justMyCode in attach mode (only in launch). This is an UPSTREAM limitation that CANNOT be fixed by this MCP server. Result: stack traces will be incomplete/empty, debugging will be unreliable.

ONLY use this if you MUST debug an already-running process that you cannot restart (e.g., production service, container you cannot control).

For normal debugging, ALWAYS use start_debug which has full functionality. If start_debug fails with build errors, fix the build - don't switch to attach.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

Args: process_id: PID of an already-running .NET process (NOT for normal debugging)

NameRequiredDescriptionDefault
process_idYes

TDQS

A4.7/5.0
Behavior4/5

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

Discloses significant limitation: netcoredbg does not support justMyCode in attach mode, leading to unreliable debugging and incomplete stack traces. Notes this is an upstream limitation. Annotations only include openWorldHint:false, so description adds valuable behavioral context beyond 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?

Efficiently structured with strong front-loaded warning, then limitation, then usage conditions, then parameter. Every sentence adds value; no wasted words.

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

Completeness4/5

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

Covers the tool's purpose, limitations, and parameter completely for a single-param tool with no output schema. Could mention that after attaching, other debug tools become usable, but the context of sibling tools makes this implicit.

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

Parameters5/5

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

For the only parameter process_id, description explains it is a PID of an already-running .NET process and emphasizes NOT for normal debugging. This adds meaning beyond the schema (which only defines it as integer).

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?

Description clearly states the tool attaches to an already-running .NET process for debugging, distinguishing it from start_debug. Verb 'attach' and resource 'debug process' are specific.

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 advises against using this tool ('AVOID - Use start_debug instead'), details when it might be necessary (must debug an already-running process that cannot be restarted), and warns against using it when start_debug fails. Also references escape hatch for further options.

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

cleanup_processesA
Destructive

View process observations or join live trusted-producer cleanup.

Without force, return observation status. With force=True, stop owned adapters and bridges through their captured finalizers. PID observations and old PID files never authorize termination; attached targets detach. terminated counts native-confirmed forced roots, not every exit or tree size.

Args: force: Join owner cleanup instead of only showing status.

NameRequiredDescriptionDefault
forceNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already mark this as destructive, and the description adds important behavioral context: PID observations and old PID files do not authorize termination, attached targets detach, and the `terminated` count has a narrow meaning. It still leaves some ambiguity about what 'owned adapters and bridges' includes, but the key destructive boundaries are disclosed.

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

Conciseness4/5

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

The description is reasonably front-loaded and not bloated, but it repeats the force behavior in both the prose and the Args section. A little tightening would improve it, though nothing is seriously off-topic.

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 one-parameter, no-output-schema tool, the description covers what the tool does in both modes and adds caveats about termination authorization and counting. Return details for 'observation status' are not fully specified, but the critical operational context is present.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the parameter meaning. It does so: force=False shows status while force=True joins owner cleanup. This fully explains the practical effect of the single boolean parameter.

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

Purpose4/5

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

The description states both modes clearly: viewing process observations and joining trusted-producer cleanup. It uses somewhat specialized terms ('observations', 'trusted-producer cleanup'), but the verb/resource distinction is still understandable and no sibling tool appears to overlap directly.

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 explicitly explains the two operating modes: without force it only reports status, and with force=True it performs owner cleanup. It does not name alternatives such as terminate_debug or runtime_smoke_stop, but the conditional usage is clear.

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

clear_breakpointsA
Destructive

Clear breakpoints. With file: that file's line bps. Without file: all line AND function bps. For one function bp use remove_function_breakpoint.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
fileNo

TDQS

A4.4/5.0
Behavior4/5

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

Description goes beyond destructiveHint annotation by specifying scope: line breakpoints per file vs all line and function breakpoints. 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, front-loaded with the main action, no filler. Escape hatch note is concise and useful.

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

Completeness4/5

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

The description is sufficient for a straightforward tool with one parameter and existing annotations. It could be more explicit about the debugging domain, but the sibling list makes it clear.

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

Parameters4/5

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

Schema has 0% description coverage and one optional parameter. Description adds meaning: with file clears line bps for that file, without clears all line and function bps. This compensates well for the lack of schema descriptions.

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?

Clearly states the action: clear breakpoints, with distinction based on file parameter. Explicitly distinguishes from sibling for removing a single function breakpoint.

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

Usage Guidelines4/5

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

Explains when to use with vs without file, and points to an alternative for single function breakpoints. Lacks explicit exclusion for other cases but provides sufficient guidance.

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

clear_trace_logB

Clear the tracepoint evaluation log.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

Minimal annotations (only openWorldHint=false). The description says 'Clear' implying destruction but doesn't disclose irreversibility or scope. Does not specify if it affects only the log or also traces.

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

Conciseness4/5

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

One concise sentence with no wasted words. Could add a bit more context, but for a no-param tool it's efficient.

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

Completeness3/5

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

Sufficient for a simple tool with no parameters, but lacks details on whether the action is reversible or what exactly gets cleared. Given the many sibling debug tools, a brief behavioral note would improve completeness.

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

Parameters4/5

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

No parameters exist, so the description doesn't need to cover them. The tool is straightforward with zero arguments.

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

Purpose5/5

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

The description clearly states the action ('Clear') and the resource ('tracepoint evaluation log'). It distinguishes itself from siblings like clear_breakpoints or remove_tracepoint.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. Does not mention prerequisites, side effects, or cases where it would be inappropriate.

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

configure_exceptionsA
Idempotent

Configure which exceptions should pause the debugger.

Controls exception breakpoints — when the debugger should stop on exceptions. By default, no exception filters are set (exceptions don't pause unless uncaught).

Common filters supported by netcoredbg:

  • "all": Break on all exceptions (caught and uncaught)

  • "user-unhandled": Break on exceptions not handled in user code

Pass an empty list to disable all exception breakpoints.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

Args: filters: List of exception filter names. Pass [] to disable.

NameRequiredDescriptionDefault
filtersNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already provide idempotent and open world hints. Description adds context about default behavior and effect of empty list. Does not contradict annotations and provides useful additional behavioral info.

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?

Starts with a one-line summary, followed by detailed explanation, examples, and escape hatch note. Every sentence adds value, no fluff.

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

Completeness5/5

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

For a simple single-parameter tool with good annotations, the description covers purpose, usage, parameter, and defaults. No gaps.

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

Parameters5/5

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

The only parameter 'filters' is thoroughly described with examples ('all', 'user-unhandled') and instruction to pass [] to disable. Schema coverage is 0%, so description fully compensates.

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?

Clearly states the tool configures exception breakpoints for the debugger. The verb 'configure' and resource 'exceptions' are distinct from sibling breakpoint tools that add specific breakpoints. Differentiates well.

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

Usage Guidelines4/5

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

Explains default behavior (no filters set) and how to disable (empty list). Lists common filters. Could be more explicit about when to use this vs add_breakpoint, but the purpose is clear.

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

continue_executionA

Continue program execution. Blocks until the program stops again or timeout.

State: STOPPED required. Blocks until next stop or timeout.

This tool uses the long-poll pattern: it waits for the debugger to report a stopped event (breakpoint hit, exception, step complete) before returning.

The response includes the new state, stop reason, and next_actions so you know exactly what happened and what to do next.

IMPORTANT: While waiting, the program is RUNNING — do not call get_variables or get_call_stack until this tool returns with state=stopped.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
thread_idNo

TDQS

A4.1/5.0
Behavior5/5

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

The description thoroughly explains the long-poll pattern, blocking behavior, and the state changes. It adds significant context beyond the minimal annotation (openWorldHint=false), covering the response contents and the danger of calling state-reading tools during execution.

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

Conciseness4/5

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

The description is well-organized and front-loaded with key information. It is efficient but slightly verbose in the middle section.

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

Completeness4/5

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

The description covers preconditions, behavior, response, and important caveats. It does not mention timeout or error handling, but given the complexity, it is fairly complete.

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

Parameters2/5

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

The schema has 0% coverage for the only parameter (thread_id). The description does not explain what thread_id means or how to use it, leaving the agent with no guidance on this optional parameter.

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

Purpose5/5

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

The description clearly states the tool continues program execution and blocks until the program stops again. It distinguishes itself from stepping tools (step_into, step_over) which perform single steps, and from other execution control tools like restart_debug or stop_debug.

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 specifies the precondition 'State: STOPPED required' and warns against calling get_variables or get_call_stack while waiting. It provides guidance on when to use (when resuming execution) and what not to do, but does not explicitly compare with alternatives or mention when to avoid.

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

create_snapshotA

Capture all local variables at the current frame as a named snapshot.

State: STOPPED required.

Must be called when the program is stopped at a breakpoint. Max 20 snapshots per session (oldest evicted when full).

Args: name: Unique name for this snapshot

NameRequiredDescriptionDefault
nameYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only have openWorldHint: false. Description adds behavioral details: captures local variables at current frame, requires STOPPED state, and eviction policy. No contradiction.

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?

Five sentences, each adds essential information without redundancy. Front-loaded with purpose and key prerequisites.

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 simple tool with one parameter and no output schema, description covers purpose, prerequisites, capacity limit, and parameter semantics completely.

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?

Single parameter 'name' with no schema description. Description adds 'Unique name for this snapshot', specifying uniqueness constraint beyond basic type info.

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?

Description states the action (capture), resource (local variables at current frame), and result (named snapshot). Clearly distinguishes from siblings like list_snapshots and diff_snapshots.

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

Usage Guidelines4/5

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

Explicitly requires STOPPED state and breakpoint context, and mentions max snapshot capacity. Does not explicitly state when not to use or provide alternatives, but conditions are clear.

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

debuggee_activityC
Read-onlyIdempotent

Observe adapter-owned debuggee activity during one bounded window.

NameRequiredDescriptionDefault
window_msNo

TDQS

C2.7/5.0
Behavior3/5

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

The annotations already indicate readOnlyHint and idempotentHint. The description adds the bounded window aspect, but does not disclose return format, blocking behavior, or whether activity accumulation is reset. 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.

Conciseness4/5

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

The description is a single sentence of 8 words, conveying the core purpose with no unnecessary text. It is front-loaded and efficient.

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

Completeness2/5

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

Given the simplicity of the tool (one parameter, no output schema), the description should clarify what 'activity' means and what is returned. Without an output schema, the return value is opaque. The description is too brief to be fully complete.

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

Parameters1/5

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

The description does not explain the window_ms parameter or its effect. The schema has no description for the parameter, so the agent must infer meaning from the parameter name alone. A description of how to choose the window size would be beneficial.

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 uses the verb 'Observe' and resource 'adapter-owned debuggee activity', clearly indicating it monitors debuggee activity. The phrase 'during one bounded window' distinguishes it from continuous monitoring tools like get_output or get_trace_delta, but the exact nature of 'activity' is vague.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus the numerous sibling tools (e.g., get_output, get_trace_delta, run_runtime_smoke_*). It does not mention prerequisites or alternatives.

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

debug_hygiene_preflightA
Destructive

Clear stale debugger state and report a compact hygiene result.

NameRequiredDescriptionDefault
fileNo
clear_trace_logNo
clear_breakpointsNo
clear_exception_filtersNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already provide destructiveHint=true, so the destructive nature is known. The description adds that it clears 'stale debugger state' and reports a 'hygiene result', but does not detail what state is affected or what the hygiene result contains, offering only marginal added context.

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

Conciseness5/5

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

The description is a single sentence that conveys the core action and result without extraneous words, achieving maximum conciseness.

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

Completeness2/5

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

Given the tool has 4 parameters, no output schema, and is destructive, the description is insufficient. It fails to explain what constitutes 'stale debugger state', what the hygiene result looks like, or how it differs from related tools like clear_breakpoints, making it incomplete for reliable agent selection.

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

Parameters2/5

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

With 0% schema description coverage, the description should explain parameter roles, but it only mentions the overall action. It does not describe how the boolean parameters (clear_breakpoints, clear_trace_log, clear_exception_filters) or the optional file parameter influence behavior, leaving the agent to infer from names alone.

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 ('Clear') and resource ('stale debugger state') and mentions the output ('compact hygiene result'), which clearly distinguishes it from sibling tools like clear_breakpoints or clear_trace_log.

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

Usage Guidelines3/5

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

The description implies usage for cleaning up debugger state before debugging, but does not explicitly mention when to use this preflight tool versus individual clear tools like clear_breakpoints or clear_trace_log, nor does it specify prerequisites or alternatives.

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

diff_snapshotsA
Read-onlyIdempotent

Compare two snapshots and show variable differences.

Args: name1: First snapshot name (before state) name2: Second snapshot name (after state)

NameRequiredDescriptionDefault
name1Yes
name2Yes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description does not contradict these. However, the description adds minimal behavioral context beyond the annotations, such as not mentioning error conditions or return behavior.

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

Conciseness5/5

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

The description is extremely concise: one main sentence and two parameter lines. It is front-loaded with the primary action and contains no filler or redundant information.

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

Completeness4/5

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

Given the tool's simplicity (2 string parameters, no output schema), the description adequately covers purpose and parameters. It lacks details on error handling or exact output format, but for a straightforward diff tool, it is nearly complete.

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

Parameters5/5

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

Schema coverage is 0%, so the description must fully explain parameters. It does: name1 is 'First snapshot name (before state)' and name2 is 'Second snapshot name (after state),' providing clear roles beyond the schema's simple type and title.

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 'Compare two snapshots and show variable differences,' which specifies the verb (compare) and resource (snapshots). The sibling tools include list_snapshots and create_snapshot, so this tool's function is distinct and not overlapping.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives like list_snapshots or create_snapshot. It is implied in the context of debugging, but no explicit guidelines or prerequisites are given.

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

disassembleB
Read-onlyIdempotent

Disassemble machine instructions around a memoryReference.

Capability-gated on supportsDisassembleRequest. Use a stack frame's instructionPointerReference or an executable memoryReference from a variable.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
offsetNo
resolve_symbolsNo
memory_referenceYes
instruction_countNo
instruction_offsetNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description's mention of capability gates adds some context. But it omits details about output format, error behavior, or side effects, which would enhance transparency.

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

Conciseness4/5

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

The description is brief and front-loaded with the primary action. The escape hatch note is useful but not essential. However, the lack of parameter details reduces efficiency, as the agent may need to infer from context.

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

Completeness2/5

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

With 5 parameters, no output schema, and 0% schema coverage, the description is incomplete. It does not explain the meaning of parameters or the return value, which is critical for correct invocation in a debug context.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate. It only mentions 'memoryReference' but does not explain offset, instruction_offset, instruction_count, or resolve_symbols, leaving the agent without crucial parameter semantics.

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

Purpose5/5

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

The description clearly states the verb ('Disassemble') and resource ('machine instructions around a memoryReference'). It uniquely identifies the tool's purpose among debug siblings, as no other tool performs disassembly.

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

Usage Guidelines4/5

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

Explicitly advises to use a stack frame's instructionPointerReference or executable memoryReference, and mentions the capability gate. The escape hatch hint provides a fallback. However, it does not explicitly state when not to use the tool.

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

evaluate_expressionC

Evaluate an expression in the current debug context.

State: STOPPED required.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
frame_idNo
expressionYes

TDQS

C2.9/5.0
Behavior2/5

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

The description does not disclose behavioral traits like side effects, permissions, or rate limits. With only openWorldHint: false annotation, the description carries the burden but fails to mention if evaluating is read-only or has side effects, leading to inadequate transparency.

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

Conciseness5/5

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

The description is extremely concise with two sentences, each serving a clear purpose: stating the tool's function and a necessary precondition. No redundant information exists.

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

Completeness2/5

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

Given the lack of output schema and low schema coverage, the description should provide more context about return values, errors, or usage details. It only mentions the required state and an escape hatch, missing critical information for effective use.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain the parameters (expression, frame_id) beyond stating the tool's purpose. No details on format, semantics, or constraints are provided, leaving parameter understanding entirely to the schema.

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

Purpose4/5

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

The description clearly states the tool evaluates an expression in the debug context, with a specific verb (evaluate) and resource (expression). However, it does not distinguish from similar siblings like 'quick_evaluate', so it's not a 5.

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

Usage Guidelines3/5

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

The description explicitly requires State: STOPPED, providing a clear precondition. But it offers no guidance on when to use this vs. other evaluation tools or alternatives, missing the 'when-not' or 'alternatives' criteria.

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

find_code_referencesB
Read-onlyIdempotent

Find literal symbol references across project files.

NameRequiredDescriptionDefault
nameYes
max_resultsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds no behavioral context beyond what annotations provide, offering minimal added value.

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

Conciseness4/5

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

The description is a single efficient sentence with no waste, but it is under-specified for a tool with 2 parameters and no parameter explanations.

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

Completeness2/5

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

Despite annotations and output schema, the description lacks details on search scope, symbol type, and result interpretation, making it incomplete for reliable invocation.

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

Parameters1/5

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

With 0% schema description coverage, the description must compensate but fails to explain 'name' (exact match? partial?) or 'max_results' behavior, leaving agents underinformed.

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 'Find literal symbol references across project files' uses a specific verb (Find) and resource (literal symbol references) with clear scope, distinguishing it from siblings like find_code_symbol.

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

Usage Guidelines3/5

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

No explicit guidance on when or when not to use this tool vs alternatives. The purpose is implied but not differentiated from siblings like search_source.

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

find_code_symbolA
Read-onlyIdempotent

Find a C# symbol definition by name and optional kind.

NameRequiredDescriptionDefault
kindNo
nameYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate read-only and idempotent behavior. The description adds that it finds a definition specifically, but does not disclose additional behavioral traits such as case sensitivity, search scope, or behavior on not found.

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

Conciseness4/5

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

The description is a single, clear sentence that front-loads the purpose. It is concise with no unnecessary words, though it could be slightly more structured for readability.

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

Completeness3/5

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

Given the tool's simplicity and presence of an output schema, the description is moderately complete. However, it omits context like search scope (e.g., entire workspace) and what happens if no symbol is found.

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

Parameters2/5

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

Schema description coverage is 0%, yet the description only states 'by name and optional kind', adding no details about valid values for 'kind' or format constraints. It fails to compensate for the lack of schema documentation.

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

Purpose5/5

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

The description uses a specific verb ('Find') and resource ('C# symbol definition'), clearly distinguishing it from the sibling 'find_code_references' which locates references, not definitions.

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

Usage Guidelines3/5

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

No explicit guidance on when to use this tool versus alternatives like 'find_code_references'. The implied context is searching for a definition, but no when-not or exclusion criteria are provided.

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

get_build_diagnosticsA
Read-onlyIdempotent

Get full build diagnostics including all warnings.

Build warnings are hidden by default in start_debug/restart_debug responses to reduce context noise. Call this tool when:

  • Build succeeds but the app crashes or behaves unexpectedly

  • Investigating assembly loading or compatibility issues

  • Checking nullable reference, deprecation, or platform warnings

  • Debugging "it compiles but doesn't work" situations

After a restore or build process completes with a failure, the result includes its stage (command), actual argv (commandLine), workingDirectory, exit code, and captured stdout/stderr even when no MSBuild diagnostics were parsed. Partial process output from timeout or cancellation is not retained. include_warnings filters structured diagnostics only; captured failure output is preserved unchanged. Command metadata is omitted when no process command was executed.

Args: include_warnings: Include warning details (default True, the point of this tool)

NameRequiredDescriptionDefault
include_warningsNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, openWorldHint=false), yet the description adds substantial beyond-annotation context: partial process output from timeout/cancellation is NOT retained, include_warnings filters structured diagnostics only while captured failure output is preserved, and command metadata is omitted with no executed process. These are real behavioral caveats. Minor ding because the return-field narrative strays beyond what an agent choosing the tool needs.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence, followed by the usage bullets and then args, in a logical order. It is somewhat long and the failure-output paragraph is dense, but nearly every sentence carries distinct information rather than restating the schema.

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

Completeness5/5

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

With no output schema and zero parameter descriptions, the description carries the full load and delivers: it enumerates the failure-result fields (stage/command, commandLine, workingDirectory, exit code, stdout/stderr) and explicitly notes what is omitted (metadata when no process ran, partial output on timeout/cancellation). An agent knows both when to call it and what to expect back.

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

Parameters4/5

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

Schema coverage is 0% (the single 'include_warnings' property has no description), so the description must compensate and largely does: it states the default (True), frames it as 'the point of this tool', and clarifies that the flag filters structured diagnostics only while never touching captured failure output. That is meaningful semantics beyond the bare boolean in the schema.

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

Purpose5/5

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

States a specific verb and resource ('Get full build diagnostics including all warnings') and immediately distinguishes itself from siblings by noting that warnings are hidden by default in start_debug/restart_debug responses. An agent can tell what it retrieves and why it exists as a separate tool without opening the schema.

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

Usage Guidelines5/5

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

Explicit 'Call this tool when:' list gives four concrete triggering scenarios (app crashes despite successful build, assembly loading issues, nullable/deprecation/platform warnings, 'compiles but doesn't work'). It also names the conditions under which the sibling tools suppress this data, so the routing decision is unambiguous.

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

get_call_stackA
Read-onlyIdempotent

Get the call stack for a thread.

State: STOPPED required. Returns frame_id values needed for get_scopes().

Diagnostic: Set NETCOREDBG_STACKTRACE_DELAY_MS env var to add delay before stackTrace request. This helps diagnose timing issues with ICorDebugThread3. Example: NETCOREDBG_STACKTRACE_DELAY_MS=300

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
levelsNo
thread_idNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate readOnly and idempotent. Description adds that the thread must be in STOPPED state, describes a diagnostic env var, and an escape hatch. Does not contradict annotations. Adds valuable behavioral context beyond what annotations provide.

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

Conciseness5/5

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

Description is extremely concise: one sentence for purpose, three bullet points for state, diagnostic, and escape hatch. Every sentence adds value, and it's well-structured with headings.

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

Completeness2/5

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

No output schema, so description should explain return values, but only mentions 'Returns frame_id values needed for get_scopes()'. Missing parameter explanations and comprehensive return format. Despite annotations, the description is insufficient for a tool with undocumented parameters.

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

Parameters1/5

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

Input schema has 2 parameters (thread_id, levels) with 0% description coverage. Description does not explain what these parameters mean or how they affect the call stack retrieval. Without any explanation, the agent cannot infer correct usage beyond their names.

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?

Description clearly states 'Get the call stack for a thread' with a specific verb and resource. It distinguishes itself by noting that it returns frame_id values needed for get_scopes, and references diagnostic env var and escape hatch, making the purpose 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?

Explicitly states 'State: STOPPED required', which is a critical usage prerequisite. Also mentions the dependency on get_scopes for further use of returned frame IDs. Provides an escape hatch reference. Lacks explicit 'when not to use' or alternatives, but the context is clear.

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

get_debug_stateA
Read-onlyIdempotent

Get the current debug session state.

Returns state, execState, threads, transition timestamps, debuggee liveness, current position, and exception info. The user cannot see this directly - summarize important info for them.

IMPORTANT: Always check state before asking user to interact with the app GUI! If the app is paused at a breakpoint, the user cannot interact with UI. Call continue_execution first if state shows stopped/paused.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds valuable context: the user cannot see this directly and should summarize for them, and it explains the importance of checking state before UI interaction.

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?

Extremely concise, front-loaded with core purpose, then details, then important usage notes. Every sentence adds value with no redundancy.

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

Completeness4/5

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

Given zero parameters and no output schema, the description covers the key return fields and critical usage context. It could be slightly more detailed about the exact format of returned data, but it is sufficient for a read-only tool.

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

Parameters4/5

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

No parameters exist, so the schema fully describes them. The description does not need to add parameter meaning; baseline 4 is appropriate.

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

Purpose4/5

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

The description clearly states it gets the current debug session state and lists returned fields. However, it does not explicitly differentiate from sibling tools like get_call_stack or get_scopes, which also return state-related data.

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

Usage Guidelines5/5

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

Provides explicit guidance: check state before UI interaction, call continue_execution if paused, and mentions an escape hatch for unwrapped DAP requests. This covers when to use and when not to use.

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

get_exception_contextA
Read-onlyIdempotent

Get full exception context in one call (exception autopsy).

State: STOPPED required (stopped on exception).

Returns exception type/message, inner exception chain, stack frames with source locations, and local variables for the top N frames — all in a single response. Use this FIRST when the debugger stops on an exception.

This replaces the manual sequence of: get_exception_info → get_call_stack → get_scopes → get_variables

Args: max_frames: Maximum stack frames to return (default 10) include_variables_for_frames: Include locals for top N frames (default 1) max_inner_exceptions: Max inner exception chain depth (default 5)

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
max_framesNo
max_inner_exceptionsNo
include_variables_for_framesNo

TDQS

A5/5.0
Behavior5/5

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

The description discloses required state: 'State: STOPPED required (stopped on exception).' It details the return content: exception type/message, inner exception chain, stack frames with source locations, and local variables. This goes well beyond the annotations (readOnlyHint, idempotentHint) and provides full behavioral context. No contradictions 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?

The description is concise with three focused paragraphs: purpose and state requirement, return content and usage guidance, followed by a clear parameter list. Every sentence adds value, and it is well-structured for quick comprehension.

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 complexity of exception context retrieval and the absence of an output schema, the description covers all essential aspects: what is returned, required state, parameter effects, and usage precedence. It is complete for an agent to understand and invoke correctly.

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

Parameters5/5

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

Since schema description coverage is 0% (no parameter descriptions in the input schema), the description fully compensates by listing all three parameters with defaults and explaining their roles (max_frames, include_variables_for_frames, max_inner_exceptions). This adds meaning that the schema alone lacks.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get full exception context in one call (exception autopsy).' It specifies the verb 'get' and resource 'exception context', and distinguishes it from the manual sequence of multiple calls. The purpose is unambiguous and specific.

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 says 'Use this FIRST when the debugger stops on an exception.' It also describes that this tool replaces the manual sequence (get_exception_info → get_call_stack → get_scopes → get_variables), and mentions an escape hatch for DAP requests. This provides clear when-to-use and alternative guidance.

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

get_exception_infoB
Read-onlyIdempotent

Get information about the current exception.

State: STOPPED required (stopped on exception).

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
thread_idNo

TDQS

B3.4/5.0
Behavior4/5

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

Description adds the state requirement beyond annotations (readOnlyHint, idempotentHint). Provides an escape hatch hint, adding behavioral context without contradiction.

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?

Extremely concise, three sentences each serving a purpose: purpose, state requirement, escape hatch hint. Front-loaded and efficient.

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

Completeness2/5

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

Lacks description of return value or how thread_id affects results. With no output schema, the agent cannot anticipate what information is returned, reducing completeness for a simple tool.

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

Parameters2/5

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

With 0% schema coverage, the description must clarify the thread_id parameter, but it does not. No additional meaning is provided beyond the schema's type and default.

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

Purpose4/5

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

Description states 'Get information about the current exception' with a specific verb and resource. It is clear what the tool does, but does not explicitly differentiate from siblings like get_exception_context.

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

Usage Guidelines3/5

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

Specifies required state 'STOPPED required (stopped on exception)', providing clear context for when to use. However, no mention of when not to use or comparison with alternative tools.

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

get_loaded_sourcesA
Read-onlyIdempotent

List sources currently loaded by the debug adapter.

Capability-gated on supportsLoadedSourcesRequest. Also refreshes the session's live loadedSource event view on success.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint), it discloses capability-gating and a refresh side effect, adding meaningful behavioral context.

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

Conciseness5/5

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

Extremely concise with two sentences and a brief note, front-loaded with core purpose, no wasted words.

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

Completeness5/5

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

For a simple zero-parameter tool with no output schema, the description covers capability gate, side effect, and escape hatch, making it fully complete.

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

Parameters4/5

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

No parameters exist, so the description adds no param info; schema coverage is 100%, baseline score applies.

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

Purpose5/5

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

The description clearly states 'List sources currently loaded by the debug adapter' with a specific verb and resource, and differentiates from sibling tools by focusing on loaded sources.

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 mentions capability-gating on supportsLoadedSourcesRequest and a side effect of refreshing the session view, providing context for when to use but no explicit exclusions or alternatives.

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

get_locationsA
Read-onlyIdempotent

Resolve a DAP locationReference into source coordinates.

Capability-gated on supportsLocationsRequest. A locationReference can be returned by variables or stack frames in adapters that implement DAP 1.68+.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
location_referenceYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and idempotentHint=true. The description adds behavioral context: it resolves into source coordinates, is capability-gated, and works only with adapters supporting DAP 1.68+. 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?

The description is three sentences long, each serving a distinct purpose: core function, context, and escape hatch reference. No unnecessary words or redundancy.

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

Completeness4/5

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

Given the tool's simplicity (single parameter, no output schema, rich annotations), the description adequately covers what the tool does, when it can be used, and where inputs come from. It lacks explicit output behavior but references an escape hatch for advanced needs.

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

Parameters3/5

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

The input schema has one required integer parameter (location_reference) with 0% schema description coverage. The description explains it is a DAP location reference and hints at its origin, but does not fully specify its expected format or constraints, leaving some ambiguity.

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

Purpose5/5

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

The description clearly states the tool resolves a DAP locationReference into source coordinates, specifying the verb 'resolve' and the resource 'locationReference'. This distinguishes it from sibling tools, which include other debug operations but none that specifically convert location references.

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 mentions it is capability-gated on supportsLocationsRequest and notes that location references come from variables or stack frames in DAP 1.68+ adapters. It also provides an escape hatch reference for unwrapped DAP requests. However, it does not explicitly contrast with alternatives or state when not to use it, though no direct alternative exists among siblings.

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

get_modulesA
Read-onlyIdempotent

List loaded assemblies/modules in the debug session.

Returns module name, path, version, optimization status, and symbol loading state. Useful for diagnosing assembly loading failures and version conflicts.

Note: Data comes from module load/unload events tracked during the session.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description adds behavioral context beyond annotations: 'Data comes from module load/unload events tracked during the session.' Annotations indicate read-only and idempotent, which align with the description. No contradictions.

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 concise, with three sentences covering purpose, return values, data source, and an escape hatch note. It is front-loaded with the most important 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?

Despite no output schema, the description lists return fields (module name, path, version, optimization status, symbol loading state), making the tool's output clear. With no parameters, the description is complete.

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

Parameters4/5

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

The input schema has no parameters, so schema coverage is 100%. With 0 parameters, baseline is 4. The description does not need to add parameter information, and it doesn't.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'List loaded assemblies/modules in the debug session.' It uses a specific verb ('List') and resource ('assemblies/modules'), and distinguishes itself from sibling tools that focus on other debugging aspects like call stacks or variables.

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 context for when to use the tool: 'Useful for diagnosing assembly loading failures and version conflicts.' It does not explicitly state when not to use it or compare to alternatives, but the purpose is clear enough among siblings.

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

get_outputA

Get stdout/stderr output from the debugged program.

IMPORTANT: The user cannot see this output directly. YOU must read it and summarize relevant information for the user. Never tell the user to "check the console" or "look at output".

Call periodically during debugging to catch log messages and errors.

Args: clear: Clear the output buffer after reading (default False) category: Filter by category: "stdout", "stderr", or "console" (default: all)

NameRequiredDescriptionDefault
clearNo
categoryNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations are minimal (destructiveHint=false), description adds behavioral context: output retrieval, no user visibility, and filter options. Does not mention side effects of clearing buffer, but overall transparent.

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

Conciseness4/5

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

Description is concise with clear sections: purpose, important note, usage advice, and parameter docs. Could be slightly trimmed, but well-structured and front-loaded.

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?

Covers usage, parameters, and important behavioral notes. No output schema, but hints at summarizing output. Sibling list shows many debug tools, but this one is unique. Adequate for its role.

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

Parameters5/5

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

Schema coverage is 0%, description fully documents both parameters: 'clear' (boolean, default false) and 'category' (stdout, stderr, console, default all). Adds meaning beyond 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 clearly states the tool retrieves stdout/stderr output from the debugged program, distinguishing it from siblings like get_output_tail and search_output. It also emphasizes that the user cannot see the output directly.

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

Usage Guidelines4/5

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

Explicitly advises when to use (periodically during debugging) and how (read and summarize for user). Provides important instruction not to tell user to check console. Lacks explicit alternatives, but implied by siblings.

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

get_output_tailA
Read-onlyIdempotent

Get the last N lines of program output.

Useful for checking recent output without loading everything. The user cannot see this - summarize relevant info for them.

Args: lines: Number of lines to return (default 50) category: Filter by category: "stdout", "stderr", or "console" (default: all)

NameRequiredDescriptionDefault
linesNo
categoryNo

TDQS

A4.6/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint), the description adds critical behavioral guidance: the raw output is not visible to the user and must be summarized. This is valuable context for the agent.

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 concise (4 lines), front-loaded with purpose, then usage note, then parameter descriptions. Every sentence adds value without 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 the simple parameters, no output schema, and rich annotations, the description covers all necessary aspects: purpose, usage, parameter semantics, and output handling. Nothing essential is missing.

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

Parameters5/5

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

With 0% schema description coverage, the description fully explains both parameters: 'lines' (number, default 50) and 'category' (filter by stdout/stderr/console, default all). This compensates completely.

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?

Clearly states the tool retrieves the last N lines of program output, which differentiates it from sibling tools like get_output (likely full output) and search_output (search).

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

Usage Guidelines4/5

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

Provides explicit usage context: useful for checking recent output without loading everything, and instructs the agent to summarize relevant info for the user since the user cannot see it directly. No explicit when-not or alternatives, but sufficient.

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

get_progressA
Read-onlyIdempotent

List active debugger progress operations.

Poll this during long adapter operations to see current progressId, title, message, percentage, cancellability, and start timestamp.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior3/5

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

Annotations (readOnlyHint, idempotentHint) already declare safety and idempotency; description adds polling context but doesn't contradict or significantly extend behavioral disclosure.

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

Conciseness5/5

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

Three concise sentences: purpose, usage with details, and escape hatch reference. No wasted words.

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 zero parameters, no output schema, and annotations covering safety, the description fully informs the agent about purpose, usage, and return fields.

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

Parameters4/5

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

No parameters exist, and schema coverage is 100%; baseline 4 applies, and description adds no parameter detail (none needed).

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

Purpose5/5

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

The description clearly states 'List active debugger progress operations', providing a specific verb and resource that distinguishes it from sibling tools like breakpoint or stepping tools.

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

Usage Guidelines5/5

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

It explicitly advises polling during long adapter operations and mentions an 'escape hatch' for unwrapped DAP requests, offering clear when-to-use and alternative guidance.

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

get_scopesA
Read-onlyIdempotent

Get variable scopes for a stack frame.

State: STOPPED required. Call get_call_stack() first to get frame_id. Returns variables_reference for get_variables().

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
frame_idNo

TDQS

A4.1/5.0
Behavior4/5

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

The description adds significant behavioral context beyond the annotations (readOnlyHint, idempotentHint). It reveals required debug state (STOPPED), needed prior call (get_call_stack), and the return value's role (variables_reference for get_variables). This helps the AI understand the workflow and preconditions.

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 concise, with only 4 sentences. It front-loads the primary purpose, then provides prerequisites, return behavior, and an escape hatch mention. Every sentence adds value, and the structure is logical.

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

Completeness3/5

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

Given the lack of an output schema, the description should fully explain the return value. It states 'Returns variables_reference for get_variables()' but does not describe the structure of the scopes themselves (e.g., an array of scope objects with names). This omission makes the description less complete for a tool with no output schema.

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

Parameters3/5

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

With 0% schema description coverage, the description partially compensates by explaining the parameter's origin: frame_id comes from get_call_stack(). However, it does not describe the parameter's nature (e.g., null allowed, integer format) or its non-required status beyond the schema, leaving some ambiguity.

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 purpose: 'Get variable scopes for a stack frame.' It uses a specific verb ('Get') and resource ('variable scopes'), and distinguishes from sibling tools like get_variables (which uses the returned reference) and get_call_stack (which provides the frame_id).

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 prerequisites: 'State: STOPPED required. Call get_call_stack() first to get frame_id.' It also indicates the next step: the returned variables_reference is for get_variables(). This gives clear usage context, though it does not explicitly mention when not to use this tool or provide alternatives.

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

get_source_contextB
Read-onlyIdempotent

Read source lines around a project-scoped location.

NameRequiredDescriptionDefault
fileYes
lineYes
radiusNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds the 'project-scoped' detail but does not disclose additional behavioral traits like symmetry of radius or permission needs. Adequate but not exceptional.

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

Conciseness4/5

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

A single sentence, efficient and front-loaded, but risks under-specification for a tool with three parameters and an output schema.

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

Completeness2/5

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

Missing details about return format, edge cases, and behavior of radius. Despite output schema existing, the description should provide more context for a tool with moderate complexity.

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

Parameters2/5

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

Schema description coverage is 0%, and the tool description does not explain parameters (file, line, radius) beyond their names. The agent must infer meaning, e.g., radius as line count, without further clarification.

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 specific verb 'Read' and resource 'source lines around a project-scoped location', clearly distinguishing from siblings like 'search_source' or 'get_locations'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as 'search_source' or 'get_stop_context'. The description does not provide context for appropriate usage.

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

get_step_in_targetsA
Read-onlyIdempotent

Get available step-in targets for the current stack frame.

State: STOPPED required. Call before step_into(target_id=N) to choose target.

When multiple function calls exist on one line, this returns each one so you can choose which to enter via step_into(target_id=...).

Args: frame_id: Stack frame ID (uses current frame if omitted)

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
frame_idNo

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint and idempotentHint. The description adds behavioral context: it requires STOPPED state and is used to choose a target. Does not contradict 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 concise with a clear structure: purpose, state requirement, usage, args, and escape hatch. Every sentence 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?

Given no output schema, the description adequately explains what the tool returns (list of targets) and when it is useful. Also includes state dependency and alternative access via escape hatch.

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

Parameters4/5

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

Schema coverage is 0%, but the description explains the parameter 'frame_id' with default behavior: 'Stack frame ID (uses current frame if omitted)'. This adds meaning 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 clearly states the tool's function: 'Get available step-in targets for the current stack frame.' This is a specific verb+resource tuple and distinguishes it from sibling tools like step_into, step_out, step_over.

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 advises when to use the tool ('Call before step_into(target_id=N)') and prerequisites ('State: STOPPED required'). Also mentions an escape hatch for advanced use.

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

get_stop_contextA
Read-onlyIdempotent

Get rich context when stopped at any breakpoint — one call replaces many.

Returns stop reason, stack trace with source, locals in the top frame, hit count for the current breakpoint, and recent output lines.

Call this FIRST when execution stops. It gives you everything you need to understand the stop without multiple sequential tool calls.

Args: include_variables: Include local variables for top frame (default True) include_output_tail: Include last N output lines (default 10, 0 to skip)

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
include_variablesNo
include_output_tailNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, indicating safety. The description adds detailed behavioral context: returns stop reason, stack trace with source, locals in the top frame, hit count, and recent output lines. It also explains parameter defaults and effects, fully disclosing behavior beyond annotations.

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

Conciseness4/5

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

The description is well-structured with a short summary, a bullet-like list of returned items, usage guidance, and parameter descriptions. It is concise but could be slightly more compressed; however, every sentence serves a purpose and the structure aids readability.

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

Completeness4/5

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

Given the lack of output schema, the description adequately explains what the tool returns (stop reason, stack trace, locals, hit count, output lines). It covers the two optional parameters fully. While it doesn't detail nested structures, the tool name and context imply standard debug information. Overall, it is sufficiently complete for an aggregator tool.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must provide parameter meaning. It does so explicitly: 'include_variables: Include local variables for top frame (default True)' and 'include_output_tail: Include last N output lines (default 10, 0 to skip)'. This adds significant semantic value beyond the schema's bare defaults and titles.

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

Purpose5/5

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

The description clearly states the verb 'get' and resource 'rich context when stopped at any breakpoint'. It distinguishes itself from siblings by claiming it replaces many other calls, and explicitly advises 'Call this FIRST when execution stops', making its purpose unambiguous.

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

Usage Guidelines4/5

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

The description provides clear guidance to call this tool first when execution stops, positioning it as a primary aggregator. While it doesn't explicitly list alternatives, the instruction to use it FIRST effectively conveys when to use it. The mention of an escape hatch for unwrapped DAP requests adds context.

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

get_threadsA
Read-onlyIdempotent

Get all threads in the debugged process.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description doesn't need to repeat that. However, it adds no further behavioral context (e.g., whether threads are returned sorted, or if it reflects current snapshot). Adequate but not enhanced.

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

Conciseness4/5

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

Two sentences are very concise. The first sentence hits the core purpose; the second provides an escape hatch reference. Could be slightly more focused if the escape hatch were integrated into guidance, but no waste.

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

Completeness3/5

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

For a parameterless tool with annotations covering safety, the description is mostly adequate. However, it omits what the return value contains (e.g., thread IDs, names). Without an output schema, this missing context could require the agent to infer.

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

Parameters4/5

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

No parameters exist, and schema coverage is 100% (vacuous). The description correctly implies it's an unrestricted list operation. No additional parameter details needed.

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

Purpose5/5

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

The description clearly states 'Get all threads in the debugged process.' It uses a specific verb and resource, and the scope is well-defined. No sibling tool directly competes, so differentiation is inherent.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. The escape hatch mention hints at an alternative for raw DAP requests but doesn't clarify usage context or prerequisites.

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

get_trace_deltaA
Read-onlyIdempotent

Get tracepoint log entries appended after a cursor.

State: Works in any state.

Args: cursor: Cursor returned by mark_trace_cursor or a raw monotonic timestamp limit: Maximum number of entries to return tracepoint_id: Optional tracepoint filter overriding the cursor filter

NameRequiredDescriptionDefault
limitNo
cursorYes
tracepoint_idNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint and idempotentHint, ensuring safe and repeatable calls. The description adds context beyond annotations: working in any state and explaining cursor alternatives (mark_trace_cursor or raw timestamp). No contradictions.

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

Conciseness5/5

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

The description is extremely concise: one line for purpose, one line for state, and three lines for parameters. Every sentence adds value with no fluff or redundancy.

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

Completeness3/5

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

Missing output schema, so description should explain what gets returned (e.g., format of log entries). It does not describe the return value or error conditions. With only 3 parameters and simple behavior, the absence of output details makes it marginally complete.

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

Parameters5/5

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

Schema coverage is 0%, but the description compensates fully: cursor is explained as 'Cursor returned by mark_trace_cursor or a raw monotonic timestamp', limit as 'Maximum number of entries to return', and tracepoint_id as 'Optional tracepoint filter overriding the cursor filter'. This adds critical meaning beyond the schema's type definitions.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'tracepoint log entries' with the mechanism 'after a cursor'. It distinguishes from sibling tools like get_trace_log (which returns full log) and mark_trace_cursor (which creates cursors).

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

Usage Guidelines3/5

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

The description mentions 'State: Works in any state' but does not explicitly state when to use this tool over alternatives like get_trace_log. The cursor parameter implies prior use of mark_trace_cursor but lacks explicit guidance.

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

get_trace_logA
Read-onlyIdempotent

Get tracepoint evaluation log.

State: Works in any state.

Args: since: Only return entries after this timestamp (monotonic) tracepoint_id: Filter to specific tracepoint

NameRequiredDescriptionDefault
sinceNo
tracepoint_idNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior. The description adds the state constraint ('Works in any state'), which is useful context beyond annotations. No contradictions or omissions.

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

Conciseness5/5

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

The description is extremely concise with two sentences for purpose and two lines for parameters, no wasted words. Information is front-loaded and efficiently structured.

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

Completeness4/5

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

Given the tool's simplicity and annotations, the description covers purpose, state, and parameter meanings. However, it lacks details about return format or pagination, which could aid completeness.

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

Parameters5/5

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

Schema coverage is 0%, so the description fully compensates by explaining both parameters: 'since' for timestamp filtering and 'tracepoint_id' for specific tracepoint filtering. This adds meaning beyond the schema's type and default.

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

Purpose5/5

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

The description clearly states the action 'Get tracepoint evaluation log,' which is a specific verb and resource. It is distinct from sibling tools like 'add_tracepoint' or 'clear_trace_log'.

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

Usage Guidelines3/5

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

The description mentions 'Works in any state,' providing minimal usage context. However, it lacks when-to-use or alternatives, and does not differentiate from similar tools like 'clear_trace_log' or 'list_breakpoints'.

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

get_variablesA
Read-onlyIdempotent

Get variables for a scope or structured variable.

State: STOPPED required. Call get_scopes() first to get variables_reference.

Supports paging for large collections (e.g. arrays, lists).

Args: variables_reference: Reference from get_scopes or a nested variable filter: Filter to "indexed" (array elements) or "named" (properties only) start: Index of first variable to fetch (for paging) count: Maximum number of variables to return (for paging)

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
countNo
startNo
filterNo
variables_referenceYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is known. The description adds valuable context beyond annotations: the required stopped state, paging support, and a note about the escape hatch. It does not repeat the annotations.

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

Conciseness4/5

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

The description is concise and front-loaded with the purpose. It uses a clear structure: brief intro, state requirement, paging mention, parameter details, escape hatch. Every sentence adds value without redundancy. It is not overly verbose.

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

Completeness4/5

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

Given no output schema, the description covers the essential aspects: what the tool does, preconditions, paging, and parameter meanings. It could be improved by describing the return format (e.g., an array of variable objects), but the current level is sufficient for an agent to understand usage.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the full burden. The 'Args:' section explains each parameter (variables_reference, filter, start, count) with meaningful descriptions, including the allowed values for filter ('indexed' or 'named'). This adds significant value beyond the bare 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 clearly states 'Get variables for a scope or structured variable,' which is a specific verb and resource. It distinguishes itself from siblings like get_scopes (which returns scopes) and set_variable (which modifies) by mentioning the prerequisite call to get_scopes and the stopped state requirement.

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 'State: STOPPED required. Call get_scopes() first to get variables_reference,' providing clear when-to-use guidance and a prerequisite. It could improve by explicitly contrasting with set_variable or other alternatives, but the context is sufficient for an AI agent.

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

inspect_debug_launch_compatibilityA
Read-onlyIdempotent

Inspect target/dbgshim compatibility without building or launching.

NameRequiredDescriptionDefault
programYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds behavioral context that the tool does not build or launch, which is useful. No contradiction, but no further behavioral details provided.

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

Conciseness5/5

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

A single sentence of 7 words, front-loaded with the verb 'Inspect'. Every word earns its place with no redundancy.

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

Completeness3/5

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

Given the simple tool (1 param, no output schema), the description covers the core purpose but lacks details about what compatibility is checked or what the return value means. Adequate but not fully complete.

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

Parameters1/5

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

Schema coverage is 0% for the single required parameter 'program', and the description does not describe the parameter at all. It fails add meaning beyond the schema's bare name and type.

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

Purpose5/5

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

The description clearly states the tool inspects target/dbgshim compatibility without building or launching. It uses a specific verb and resource, and distinguishes from sibling tools that perform building or launching.

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 context on when to use (when checking compatibility without side effects) by stating 'without building or launching'. However, it does not explicitly mention when not to use or suggest alternatives.

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

instrumentation_group_clearC
Destructive

Remove a named instrumentation group with leak detection.

NameRequiredDescriptionDefault
nameYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already indicate destructiveHint: true, so the destructive nature is known. The description adds 'with leak detection,' providing a behavioral trait beyond annotations. However, it does not explain what leak detection entails or other behaviors like error handling.

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

Conciseness4/5

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

The description is a single sentence, concise and front-loaded with the action. It wastes no words but lacks details expected for a destructive tool. It is efficient but could be more informative.

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

Completeness2/5

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

Given the tool is destructive with a single parameter and no output schema, the description omits critical context: what happens on success/error, leak detection specifics, reversibility, and prerequisites. It is insufficient for complete understanding.

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

Parameters2/5

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

Schema description coverage is 0%, and the description only generically references 'named' without elaborating on the 'name' parameter's format, constraints, or how to obtain it. It does not compensate for the missing schema descriptions.

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

Purpose4/5

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

The description states 'Remove a named instrumentation group with leak detection,' clearly indicating the action and resource. It distinguishes from siblings like 'instrumentation_group_create' and 'instrumentation_group_inspect.' However, it could be more explicit that the group is identified by the 'name' parameter.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool vs alternatives (e.g., when to remove vs create or inspect). There are no usage scenarios, prerequisites, or exclusions mentioned.

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

instrumentation_group_createB
Destructive

Create a named breakpoint/tracepoint group for smoke evidence.

NameRequiredDescriptionDefault
nameYes
breakpointsNo
tracepointsNo

TDQS

B3.3/5.0
Behavior3/5

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

The annotation destructiveHint=true already indicates state modification. The description confirms creation but adds no additional behavioral context (e.g., side effects, permissions, or reversibility).

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

Conciseness3/5

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

The description is a single short sentence, concise but lacking essential details. It is front-loaded but provides minimal information.

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

Completeness2/5

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

Given the tool's complexity (two complex optional parameters, no output schema), the description is insufficient for an agent to understand how to correctly invoke the tool. Missing parameter structure and return behavior.

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

Parameters2/5

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

With 0% schema description coverage and three parameters, the description only hints at the 'name' parameter but provides no details about the breakpoints and tracepoints objects, leaving agents to guess their structure.

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

Purpose5/5

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

The description clearly states the tool creates a named group for breakpoints/tracepoints with a specific use case (smoke evidence). It distinguishes from sibling tools like add_breakpoint and instrumentation_group_clear.

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

Usage Guidelines3/5

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

The description implies usage for smoke testing but provides no explicit guidance on when to use this tool versus adding individual breakpoints or tracepoints. No mention of prerequisites or context.

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

instrumentation_group_inspectC
Read-only

Inspect grouped breakpoint hits and trace logs.

NameRequiredDescriptionDefault
nameYes

TDQS

C2.9/5.0
Behavior3/5

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

The annotations already indicate readOnlyHint=true, so the description does not need to restate that. However, the description adds no additional behavioral context, such as what happens if the name is invalid, or if data is truncated. It provides minimal added value beyond the annotations.

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

Conciseness4/5

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

The description is a single sentence, which is concise and front-loaded. However, it may be too brief; a slightly more informative sentence would be warranted without reducing conciseness.

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

Completeness2/5

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

Given the tool's simplicity (one required parameter, no output schema), the description still lacks completeness. It does not explain what the inspection produces (e.g., a list of hits, detailed logs) or how to interpret the results. The agent is left guessing about the output.

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

Parameters2/5

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

The only parameter 'name' has no description in the schema (0% coverage). The description does not clarify what 'name' refers to (presumably the group name), nor does it explain acceptable values. The description fails to compensate for the missing schema documentation.

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 uses the verb 'Inspect' and specifies the resource 'grouped breakpoint hits and trace logs', making the tool's purpose clear. It implicitly distinguishes from siblings like 'instrumentation_group_clear' and 'instrumentation_group_create' by focusing on inspection rather than modification. However, it could more explicitly differentiate from other inspection tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, such as get_trace_log or list_breakpoints. No prerequisites or exclusion criteria are mentioned. The description lacks any contextual usage advice.

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

list_breakpointsA
Read-onlyIdempotent

List breakpoints (line + function). Per-file filter scopes only line bps.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
fileNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate read-only and idempotent. Description adds that per-file filtering only affects line breakpoints, which is useful but does not significantly expand beyond annotation information.

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

Conciseness5/5

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

Two sentences plus a note: no fluff, every sentence adds value. Front-loaded with the main action and key constraint.

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

Completeness3/5

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

No output schema and no mention of return format or structure. For a list tool, agents may need to know what fields are returned. The escape hatch partially covers advanced needs, but overall completeness is average.

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

Parameters4/5

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

Schema has 0% description coverage, so description must compensate. It clarifies the 'file' parameter: provides a file to filter only line breakpoints in that file. This adds meaning beyond the schema, though format details are missing.

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?

Description clearly states the tool lists breakpoints (line and function), and specifies that the per-file filter only applies to line breakpoints. This distinguishes it from siblings like add_breakpoint or clear_breakpoints.

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

Usage Guidelines3/5

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

No explicit when-to-use or when-not-to-use guidance. The escape hatch mentions DAP requests for unwrapped details, but does not compare to other listing tools or explain scenarios where this tool is preferred.

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

list_snapshotsA
Read-onlyIdempotent

List all captured snapshots with metadata.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and idempotentHint, so the agent knows it is a safe read operation. The description adds that it lists metadata but does not disclose any further behavioral traits like pagination or ordering.

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

Conciseness5/5

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

The description is a single sentence with no wasted words. It is appropriately concise and directly states the tool's purpose.

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

Completeness4/5

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

Given the simple nature of the tool (no parameters, no output schema) and the presence of good annotations, the description is mostly complete. However, it could mention what metadata is included or any ordering behavior.

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

Parameters4/5

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

There are no parameters, and schema coverage is 100%. The description need not add parameter information, so a baseline of 4 is appropriate.

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

Purpose4/5

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

The description clearly states the tool lists snapshots with metadata, using a specific verb and resource. However, it does not explicitly differentiate from sibling tools like create_snapshot or diff_snapshots, which would improve clarity.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. Given the large number of sibling tools, explicit usage context would help an agent choose correctly.

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

mark_trace_cursorA
Read-onlyIdempotent

Mark the current tracepoint log boundary for later delta reads.

State: Works in any state.

Args: tracepoint_id: Optional tracepoint filter to bind into the cursor

NameRequiredDescriptionDefault
tracepoint_idNo

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true (safe) and idempotentHint=true (repeatable). The description adds that it works in any state, which is useful. It does not describe return behavior or side effects beyond marking, but annotations cover safety adequately.

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 short sentences with no wasted words. The main purpose is front-loaded, followed by state info and parameter description. Every sentence is informative and earns its place.

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

Completeness4/5

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

Given the tool has one optional parameter and no output schema, the description covers essential aspects. It could explicitly mention the relationship to get_trace_delta for a more complete lifecycle context, but it is sufficient for a simple tool.

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

Parameters4/5

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

Schema coverage is 0% for parameter descriptions, but the description explains 'Optional tracepoint filter to bind into the cursor', adding meaning about the parameter's role as a filter and its effect on the cursor. This compensates for the lack of schema descriptions.

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?

Description clearly states 'Mark the current tracepoint log boundary for later delta reads', specifying the verb 'mark' and resource 'tracepoint log boundary'. It distinguishes itself from siblings like get_trace_delta (reads the delta) and clear_trace_log (clears the log). The 'State: Works in any state' adds context.

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

Usage Guidelines4/5

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

The description implies usage before calling get_trace_delta (for later delta reads), providing clear context. It does not explicitly state when not to use or mention alternatives like runtime_smoke_mark_event_cursor, but the purpose is clear for the intended use case.

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

output_assert_sinceB
Read-only

Assert required and forbidden output patterns since a checkpoint.

NameRequiredDescriptionDefault
regexNo
requiredNo
forbiddenNo
checkpointYes
max_matchesNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description aligns with a non-mutating operation. However, the description adds no further behavioral context such as side effects, error conditions, or limitations beyond what annotations convey.

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

Conciseness5/5

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

Single sentence front-loads the action, contains no filler, and is appropriately sized for the tool's purpose.

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

Completeness2/5

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

Given the tool has 5 parameters, no output schema, and zero schema description coverage, the description is too minimal to be fully complete. It lacks details on parameter usage, expected patterns, and behavior, making it insufficient for an agent to use correctly.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description explains none of the five parameters individually. It hints at 'required' and 'forbidden' but omits 'checkpoint', 'regex', and 'max_matches'. This fails to compensate for the missing schema descriptions, leaving parameter meaning ambiguous.

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?

Description uses a specific verb 'assert' and clearly identifies the resource 'required and forbidden output patterns since a checkpoint'. It distinguishes from sibling tools like search_output and get_output by focusing on assertion rather than retrieval.

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

Usage Guidelines3/5

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

Description implies usage for verifying output patterns relative to a checkpoint but provides no explicit when-to-use or when-not-to-use guidance. It does not mention alternatives or prerequisites.

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

output_checkpointB
Idempotent

Mark the current output buffer position for later assertions.

NameRequiredDescriptionDefault
nameYes

TDQS

B3.3/5.0
Behavior3/5

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

Annotations declare idempotentHint=true and openWorldHint=false. The description adds minimal behavioral context ('Mark the current output buffer position') which is consistent but does not elaborate on side effects or state changes beyond what annotations imply.

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

Conciseness3/5

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

The description is a single sentence, making it concise, but it does not earn its place fully as it lacks crucial parameter details. It could be improved by integrating parameter explanation without becoming verbose.

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

Completeness2/5

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

With no output schema and only one parameter, the description should fully explain the tool's purpose and parameter. It fails to cover the parameter's role, making the description incomplete for correct invocation.

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

Parameters2/5

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

The input schema has one required parameter 'name' with no description and 0% schema coverage. The description does not explain what the name parameter represents or how to use it, leaving the agent with no guidance on parameter semantics.

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

Purpose5/5

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

Description uses a specific verb-resource pair ('Mark the current output buffer position for later assertions') that clearly states the tool's function and distinguishes it from siblings like output_assert_since.

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

Usage Guidelines3/5

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

The description implies usage (to later assert about output) but does not explicitly state when to use or when not to, nor mention alternatives or prerequisites.

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

pause_executionA
Idempotent

Pause program execution.

State: RUNNING required. Returns immediately (does not block like step tools). Use get_call_stack() after pause to inspect the stopped state.

Unlike continue/step tools, this returns immediately after sending the pause command — it does not wait for a stopped event.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
thread_idNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare idempotentHint=true and openWorldHint=false. Description adds crucial behavioral info: that it returns immediately and does not wait for a stopped event, unlike step tools. This goes beyond annotations, though annotations already indicate it's safe to retry.

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. No fluff. Front-loaded with the core action. Ideal conciseness.

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

Completeness4/5

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

For a simple tool with one optional param and no output schema, the description covers the main behavioral aspects: required state, non-blocking nature, recommended follow-up, and escape hatch. Minor missing detail about thread_id, but overall sufficient.

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

Parameters2/5

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

Schema coverage is 0% and the description does not explain the thread_id parameter. While the parameter name and type are self-evident, the description fails to add context (e.g., what happens when null). This is a gap given low coverage.

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

Purpose5/5

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

The description clearly states 'Pause program execution' with a specific verb and resource. It distinguishes itself from sibling step/continue tools by noting it returns immediately and does not block. The required state 'RUNNING' is also specified.

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: 'State: RUNNING required.' and suggests using get_call_stack() after pause. Contrasts with continue/step tools and provides an escape hatch reference, offering clear when-to-use and when-not guidance.

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

quick_evaluateA
Idempotent

Evaluate an expression while the program is running (atomic pause-eval-resume).

Pauses execution for ~5ms, evaluates the expression, then resumes. Use this instead of manually pausing, evaluating, and continuing.

IMPORTANT: Only works when program is RUNNING. If stopped, use evaluate_expression instead.

Args: expression: Expression to evaluate (e.g., "myVariable", "list.Count") frame_id: Optional stack frame ID for evaluation context

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
frame_idNo
expressionYes

TDQS

A4.9/5.0
Behavior5/5

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

Describes atomic pause-eval-resume with ~5ms pause. Annotations already indicate idempotent and not read-only, and description adds detail without contradiction.

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?

Efficiently structured: concise summary, key details, usage note, and args. Each sentence adds value.

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

Completeness4/5

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

Covers purpose, usage, parameters, and behavioral details. Minor gap: no mention of return value format, but acceptable given standard debugger behavior.

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

Parameters5/5

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

Schema has no descriptions (0% coverage), but description provides clear parameter explanations with examples for expression and context for frame_id.

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?

Clearly states the tool evaluates an expression while the program is running via atomic pause-eval-resume. Distinguishes from sibling 'evaluate_expression' for stopped programs.

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 (program running) and when not to (stopped: use evaluate_expression). Also provides escape hatch reference.

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

read_memoryA
Read-onlyIdempotent

Read raw memory bytes from a debugger memoryReference.

Capability-gated: current netcoredbg builds usually return an unsupported error unless they advertise supportsReadMemoryRequest.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

Args: memory_reference: DAP memoryReference from a variable or stack frame offset: Byte offset from the memory reference count: Number of bytes to read; count=0 returns empty data locally

NameRequiredDescriptionDefault
countNo
offsetNo
memory_referenceYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description adds behavioral details beyond annotations: capability limitations, error conditions, and count=0 behavior. Annotations already indicate idempotent and read-only, but description enriches understanding.

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

Conciseness4/5

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

The description is well-structured with a brief header and parameter list, but includes some verbose context about capability-gating and escape hatch that could be more concise.

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 annotations and presence of output schema, the description covers purpose, parameters, behavioral quirks, and limitations, making it complete for the tool's complexity.

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

Parameters5/5

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

With 0% schema coverage, the description fully explains each parameter's meaning and behavior, including DAP source for memory_reference and count=0 edge case.

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

Purpose5/5

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

The description clearly states the tool reads raw memory bytes from a DAP memoryReference, using specific verb and resource. It distinguishes from sibling tools like write_memory and evaluate_expression.

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 context on capability-gating and an escape hatch for unsupported cases, but does not explicitly contrast with alternative tools for reading memory data.

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

remove_breakpointB
Idempotent

Remove a breakpoint from a specific line.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
fileYes
lineYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations indicate idempotentHint=true and openWorldHint=false, which partially inform behavior. The description adds no further behavioral details (e.g., what happens if breakpoint doesn't exist). With annotations, a score of 3 is appropriate as baseline.

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

Conciseness5/5

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

The description is extremely concise: two sentences with no fluff. The first sentence directly states the purpose, and the second adds relevant escape hatch information. Every word earns its place.

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

Completeness3/5

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

For a simple removal tool, the description is minimally sufficient but lacks details on error handling (e.g., non-existent breakpoint) and return value. With no output schema and 0% parameter coverage, more context would be beneficial.

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

Parameters1/5

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

Schema description coverage is 0%. The description does not explain the parameters 'file' or 'line', leaving the agent without additional context on expected format or constraints. The description fails to compensate for the lack of schema documentation.

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

Purpose5/5

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

The description clearly states the action: 'Remove a breakpoint from a specific line.' The verb 'Remove' and resource 'breakpoint' are specific. It distinguishes from sibling tools like 'add_breakpoint' and 'list_breakpoints' by focusing on removal.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like clearing all breakpoints with 'clear_breakpoints'. It only mentions an escape hatch for unwrapped DAP requests, which does not clarify usage context.

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

remove_function_breakpointA
Idempotent

Remove function breakpoint by name (exact match used at add time).

Args: function_name: Name passed to add_function_breakpoint.

NameRequiredDescriptionDefault
function_nameYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations provide idempotentHint: true and openWorldHint: false, which cover safety and repeatability. The description adds the 'exact match' detail but does not discuss behavior when breakpoint does not exist. It aligns with annotations, no contradiction.

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

Conciseness5/5

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

The description is extremely concise: one sentence plus a minimal Args note. It is front-loaded and contains no extraneous information, making it easy to parse quickly.

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

Completeness4/5

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

For a simple tool with one parameter and no output schema, the description is largely complete. It could mention the effect of calling on a non-existent breakpoint, but the idempotent annotation covers that. Output schema absence is acceptable given the tool's simplicity.

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 description adds meaning beyond the schema by noting that function_name must match exactly what was passed to add_function_breakpoint. With 0% schema coverage, this helps the agent understand the parameter's role and format requirement.

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

Purpose5/5

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

The description clearly states it removes a function breakpoint by name, distinguishing it from siblings like remove_breakpoint (which likely handles other breakpoint types). The phrase 'exact match used at add time' adds precision.

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

Usage Guidelines4/5

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

The description implies use for removing function breakpoints, but does not explicitly state when to avoid this tool (e.g., for non-function breakpoints use remove_breakpoint). It provides context but lacks clear alternatives.

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

remove_tracepointB

Remove a tracepoint by ID.

Args: tracepoint_id: Tracepoint ID (e.g., "tp-1")

NameRequiredDescriptionDefault
tracepoint_idYes

TDQS

B3.4/5.0
Behavior2/5

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

Does not disclose behavioral traits beyond the basic action; no mention of error handling, side effects, or requirements. Annotations are minimal and do not compensate.

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

Conciseness4/5

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

Very concise with two short sentences; no unnecessary words, but could benefit from a structured format or bullet points.

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

Completeness3/5

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

Adequate for a simple one-parameter tool, but lacks information about return values, error conditions, or prerequisites. Minimal annotations do not supplement.

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?

Adds value to the schema by providing a concrete example ('tp-1') for the tracepoint_id parameter, which is missing from the schema description.

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

Purpose5/5

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

Description clearly states the action 'Remove a tracepoint' and specifies the method 'by ID', distinguishing it from sibling tools like add_tracepoint and clear_tracepoints.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives; does not mention prerequisites or when not to use it.

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

restart_debugA

Restart the current debug session with the same configuration.

Stops the current session, optionally rebuilds, and relaunches. Use this after code changes to debug the updated version.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

Args: rebuild: Whether to rebuild before restarting (default: True)

NameRequiredDescriptionDefault
rebuildNo

TDQS

A4.4/5.0
Behavior3/5

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

Describes basic steps (stop, optionally rebuild, relaunch) but lacks detail on side effects like breakpoint retention or state preservation. Annotations are minimal, so description could do more.

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?

Concise and well-structured: main action first, then steps, usage, escape hatch, parameter. No unnecessary words.

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

Completeness5/5

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

For a simple tool with one parameter and no output schema, the description covers action, parameter, usage context, and an advanced option. Complete and sufficient.

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

Parameters5/5

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

The single parameter 'rebuild' is fully explained with purpose and default value, adding meaning beyond the schema's type and default.

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?

Clear verb 'restart', specific resource 'current debug session', and scope 'with same configuration'. Distinct from siblings like start_debug or stop_debug.

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

Usage Guidelines4/5

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

Explicitly states when to use: 'after code changes'. Mentions an escape hatch for advanced cases, but does not detail when not to use or fully compare alternatives.

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

run_runtime_smokeC

Run a bounded runtime smoke scenario plan with cleanup evidence.

NameRequiredDescriptionDefault
planYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations provide only openWorldHint: false, offering little behavioral context. The description mentions 'with cleanup evidence' but does not specify what cleanup entails, whether it is destructive, or what side effects occur. No readOnlyHint is present, so the agent cannot assess safety. The description adds minimal transparency beyond the verb.

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

Conciseness4/5

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

The description is a single sentence, concise and front-loaded with the essential action. However, it sacrifices necessary detail, which might be acceptable if the tool is well-known, but for an AI agent, it is borderline under-specified.

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

Completeness2/5

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

Given the complexity of a smoke test scenario plan and the lack of an output schema, the description is incomplete. It does not describe return values, success indicators, or error conditions. Combined with the vague parameter semantics, the agent lacks sufficient context to use the tool reliably.

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

Parameters2/5

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

The schema coverage is 0%, so the description must explain the 'plan' parameter. It describes it as a 'scenario plan' and mentions 'bounded' and 'cleanup evidence', but does not define the expected structure, allowed fields, or constraints. The schema has additionalProperties: true, offering no guidance, and the description fails to compensate.

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 uses a specific verb 'Run' and identifies the resource as a 'bounded runtime smoke scenario plan', which distinguishes it from sibling tools like 'add_breakpoint' or 'start_debug'. However, the jargon 'bounded runtime smoke scenario plan' may be unclear to an agent unfamiliar with the domain.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives. The sibling list contains many debug and UI tools, but no analog to 'run_runtime_smoke', leaving the agent to infer context. The description does not indicate prerequisites, ordering, or exclusions.

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

runtime_smoke_cleanup_contractA
DestructiveIdempotent

Clear runtime-smoke contamination after failed or timed-out cleanup.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true. The description adds context about the specific scenario (failed/timed-out cleanup) and the action ('Clear contamination'), which is useful 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?

The description is a single, concise sentence that front-loads the purpose without any wasted words.

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 zero parameters, no output schema, and annotations that cover destructive/idempotent behavior, the description fully explains the tool's purpose and context of use.

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

Parameters4/5

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

No parameters exist, and schema coverage is 100%. The description does not need to add parameter details, and zero parameters merit a baseline of 4.

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

Purpose5/5

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

The description uses a specific verb ('Clear') and resource ('runtime-smoke contamination') and provides context ('after failed or timed-out cleanup'), clearly distinguishing it from sibling runtime_smoke tools like start, stop, or validate.

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 states when to use the tool (after failed or timed-out cleanup), providing clear context. It does not mention when not to use it or alternatives, but the use case is narrow and well-defined.

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

runtime_smoke_evidence_bundleC
Read-only

Return a compact evidence packet for a durable runtime smoke run.

NameRequiredDescriptionDefault
run_idYes
agent_modeNo
event_limitNo
after_cursorNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, making the read-only nature clear. The description adds no extra behavioral context beyond 'Return', such as what the evidence packet contains or potential side effects.

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

Conciseness4/5

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

The description is a single concise sentence. It is front-loaded and to the point, though it could be slightly more informative without becoming verbose.

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

Completeness2/5

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

With no output schema and many sibling tools, the description fails to adequately inform the agent about return format, pagination, or how to effectively use the parameters. The tool's behavior in different scenarios is opaque.

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

Parameters1/5

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

Schema coverage is 0%, and the description does not explain any of the 4 parameters (run_id, after_cursor, event_limit, agent_mode). The agent receives no help understanding parameter meaning or usage.

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

Purpose4/5

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

The description clearly states the tool returns a compact evidence packet for a smoke run, using specific verb and resource. However, it does not differentiate this from sibling tools like runtime_smoke_get_result or runtime_smoke_get_event_delta.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like runtime_smoke_get_result. The description does not mention prerequisites or context for invocation.

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

runtime_smoke_get_event_deltaC
Read-only

Return bounded lifecycle events after a cursor token.

NameRequiredDescriptionDefault
cursorYes
agent_modeNo
event_limitNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, indicating safe read operation. The description adds that events are 'bounded' and 'lifecycle' and uses a cursor token, providing some behavioral context beyond annotations. However, it does not explain what 'bounded' means or how cursors work.

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

Conciseness4/5

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

The description is a single, front-loaded sentence that efficiently conveys the core action. It is concise but could include additional context without becoming verbose.

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

Completeness2/5

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

For a tool with 3 parameters (including a nested cursor object), no output schema, and many siblings, the description is minimal. It does not explain 'lifecycle events', cursor semantics, return format, or error conditions, leaving the agent underinformed.

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

Parameters2/5

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

Schema coverage is 0% (no parameter descriptions in schema), so the description must compensate. It only mentions 'cursor token' but fails to explain event_limit (default 50, max events) or agent_mode (default false, purpose unclear). The cursor object is left opaque.

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

Purpose4/5

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

The description states a specific verb ('Return') and resource ('bounded lifecycle events') with condition ('after a cursor token'). It is clear about what the tool does but does not differentiate from siblings like 'get_trace_delta' or 'runtime_smoke_tail_events'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. There are many sibling tools with similar themes (e.g., runtime_smoke_tail_events, get_trace_delta, runtime_smoke_mark_event_cursor) but the description gives no context for selection.

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

runtime_smoke_get_resultB
Read-only

Return the final runtime smoke envelope when a durable run completes.

NameRequiredDescriptionDefault
run_idYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already include readOnlyHint=true, indicating a safe read operation. Description adds that it returns the 'final' envelope upon completion, but does not disclose behaviors like whether it blocks or requires a valid run state. With annotations present, the description contributes marginally.

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

Conciseness4/5

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

Extremely concise, one sentence. Front-loaded with key information. However, it could be slightly improved by including parameter context without major length increase.

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

Completeness2/5

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

Given one parameter, no output schema, and many sibling runtime_smoke tools, the description is incomplete. It does not explain what a 'runtime smoke envelope' is, how to obtain a valid run_id, or the expected sequence of calls. Lacks sufficient context for an agent to use it correctly.

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

Parameters2/5

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

Schema description coverage is 0% for the single parameter 'run_id'. The description does not explain what run_id refers to (e.g., from runtime_smoke_start) or any constraints. For a parameter with no schema description, the tool description should compensate but fails to do so.

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

Purpose4/5

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

Description clearly states it returns the final runtime smoke envelope when a durable run completes. Verb 'Return' and specific resource 'final runtime smoke envelope' are identifiable, but it does not differentiate from sibling tools like runtime_smoke_validate_probe or runtime_smoke_wait_for_result.

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

Usage Guidelines3/5

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

Implies usage when a durable run completes, but does not explicitly state when to call it (e.g., after runtime_smoke_run_plan) or when not to use it. No alternatives or exclusions mentioned, leaving ambiguity among the many runtime_smoke siblings.

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

runtime_smoke_mark_event_cursorB
Read-only

Return a compact cursor token for the current durable run event position.

NameRequiredDescriptionDefault
run_idYes
agent_modeNo
include_debug_outputNo
include_trace_sourceNo
include_app_diagnosticsNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, so the description adds limited behavioral detail. It describes the output as a compact cursor token, providing some context beyond the annotation. However, it does not disclose any other behaviors like side effects or limitations.

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

Conciseness4/5

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

The description is a single concise sentence that delivers the core purpose immediately. While efficient, it could be slightly expanded to cover parameters without losing conciseness.

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

Completeness2/5

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

Given five parameters (one required) and no output schema, the description is insufficient. It does not explain the purpose of optional parameters or the format of the returned cursor token, leaving the agent underinformed for correct invocation.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not explain any of the five parameters. The agent receives no guidance on the meaning or usage of 'run_id', 'agent_mode', 'include_debug_output', 'include_trace_source', or 'include_app_diagnostics'.

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 'Return' and specifies the resource as 'compact cursor token for the current durable run event position.' It clearly distinguishes from sibling tools like 'mark_trace_cursor' by focusing on durable run events.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. No mention of prerequisites, scenarios, or when not to use it. The description only states what it does without usage context.

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

runtime_smoke_run_planC
Destructive

Validate then start a durable runtime smoke run.

NameRequiredDescriptionDefault
planNo
plan_pathNo
agent_modeNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, so the description's 'start' matches that. The word 'durable' hints at persistence, but no further behavioral traits (e.g., side effects, reversibility) are disclosed beyond what annotations provide.

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

Conciseness3/5

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

The description is a single sentence, which is concise but lacks structure. It could be expanded slightly to include key details without becoming verbose.

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

Completeness1/5

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

Given no output schema and 3 opaque parameters, the description fails to provide sufficient context. It does not clarify return values, parameter selection criteria, or the meaning of 'durable'.

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

Parameters1/5

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

Schema has 0% description coverage for 3 parameters. The description omits any explanation of 'plan', 'plan_path', or 'agent_mode', leaving the agent without guidance on how to populate these fields or their relationship.

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

Purpose5/5

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

The description clearly states the tool validates then starts a 'durable runtime smoke run', using specific verbs and resource. This distinguishes it from siblings like runtime_smoke_start (just start) and runtime_smoke_validate_plan (just validate).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus the separate validate or start tools. There are no prerequisites, exclusions, or context given for selection among the many runtime smoke related siblings.

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

runtime_smoke_run_probeC
Destructive

Validate then start a durable runtime-smoke v2 run for one probe.

NameRequiredDescriptionDefault
nameNo
phaseNoafter
probeYes
budgetsNo
agent_modeNo
debug_preflightNo
tracepoint_guardNo

TDQS

C2.9/5.0
Behavior3/5

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

The description adds behavioral context beyond the destructiveHint annotation by mentioning 'durable' and the two-step process ('validate then start'). However, it does not explain what 'durable' entails, what happens on validation failure, or other side effects. Given annotations already signal destructiveness, the description provides some but limited additional transparency.

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

Conciseness4/5

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

The description is a single sentence that is short and front-loaded with the action. It uses no unnecessary words. However, for the tool's complexity (7 parameters, no schema descriptions), it could benefit from a structured format like bullet points to aid reading. Overall, it is concise but slightly under-specific.

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

Completeness2/5

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

Given the tool's complexity (7 parameters, nested objects, no output schema, 0% schema coverage), the description is far from complete. It omits details on validation criteria, return values, and parameter effects. A more comprehensive description is needed for effective agent use.

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

Parameters2/5

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

With 0% schema description coverage and 7 parameters, the description adds almost no parameter semantics. It only implies the 'probe' parameter is a single probe, but other parameters like 'name', 'phase', 'budgets', etc., remain unexplained. The tool's purpose suggests parameter context, but the description fails to provide it.

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

Purpose4/5

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

The description clearly states the tool validates and starts a durable runtime-smoke v2 run for one probe. It specifies the action (validate then start) and the resource (run for one probe). However, it does not explicitly differentiate from sibling tools like runtime_smoke_start or runtime_smoke_validate_probe, which may cause confusion among the many smoke-related tools.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. No prerequisites, exclusions, or comparisons to other runtime_smoke_* tools are mentioned, leaving the agent without context for appropriate invocation.

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

runtime_smoke_startB
Destructive

Start a durable runtime smoke run and return a run id.

NameRequiredDescriptionDefault
planYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already indicate destructiveHint: true, so the description's 'Start' is consistent. The description adds that it returns a run id, but does not disclose side effects or behaviors beyond 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?

A single sentence of 10 words, no filler. Efficiently communicates the core purpose.

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

Completeness2/5

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

With a complex nested object parameter and many sibling tools, the description is too terse. It does not explain what a 'durable runtime smoke run' entails, how to structure the plan, or how the returned run id is used.

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

Parameters1/5

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

The sole parameter 'plan' (object with additionalProperties) has no description in the schema (0% coverage). The tool description provides no details about what the plan should contain, leaving the agent uninformed.

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

Purpose5/5

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

The description clearly states the action ('Start'), the resource ('durable runtime smoke run'), and the outcome ('return a run id'). This verb+resource combination distinguishes it from sibling tools like runtime_smoke_run_plan or runtime_smoke_run_probe.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as runtime_smoke_run_plan or runtime_smoke_run_probe. No mention of prerequisites or postconditions.

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

runtime_smoke_stopC
DestructiveIdempotent

Idempotently stop a durable runtime smoke run and return cleanup evidence.

NameRequiredDescriptionDefault
run_idYes

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already provide destructiveHint and idempotentHint. The description adds 'idempotently stop' and 'return cleanup evidence', adding some behavioral context. No contradiction, but missing details on error states or side effects.

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

Conciseness2/5

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

The description is a single sentence, which is excessively brief. It lacks essential information about the parameter and usage, making it underspecified rather than efficiently concise.

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

Completeness2/5

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

Given the complexity of durable runtime smoke runs, many sibling tools, and no output schema, the description is incomplete. It omits what 'cleanup evidence' means, prerequisites, and error handling.

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

Parameters1/5

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

Schema coverage is 0% and the description provides no explanation of the run_id parameter beyond its name. The agent receives no guidance on how to obtain or format this required parameter.

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

Purpose4/5

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

The description clearly states the tool stops a durable runtime smoke run and returns cleanup evidence. It uses a specific verb and resource, but does not differentiate from sibling tools like runtime_smoke_cleanup_contract or runtime_smoke_get_result.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. It does not mention prerequisites, when not to use it, or provide any context about its role among many runtime_smoke_* siblings.

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

runtime_smoke_tail_eventsC
Read-only

Tail bounded lifecycle events for a durable runtime smoke run.

NameRequiredDescriptionDefault
limitNo
run_idYes
after_cursorNo

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, making safety clear. The description adds 'tail' and 'bounded' but does not explain behavior like pagination, blocking, or what constitutes 'bounded.' No conflicts 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.

Conciseness3/5

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

The description is a single sentence, which is concise but lacks essential structure. It omits parameter explanations and usage context, making it too sparse for a tool with 3 parameters and no output schema.

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

Completeness2/5

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

Given no output schema and 0% parameter documentation, the description should explain the return format and parameter semantics. It fails to provide enough context for an agent to invoke the tool correctly.

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

Parameters1/5

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

Schema coverage is 0%, and the description provides no parameter details. It does not explain run_id, after_cursor, or limit, leaving the agent to infer from schema names alone. This is insufficient for correct usage.

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 verb 'Tail' and resource 'bounded lifecycle events' clearly indicate the tool's function. It distinguishes itself from sibling tools like runtime_smoke_get_event_delta by implying continuous/paginated retrieval rather than a single snapshot. However, the term 'bounded' is ambiguous without context.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., runtime_smoke_get_event_delta or runtime_smoke_get_result). The description does not mention prerequisites, context, or exclusion criteria.

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

runtime_smoke_validate_planA
Read-only

Validate a runtime-smoke plan without launching or touching a target app.

NameRequiredDescriptionDefault
planNo
plan_pathNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description adds that the tool does not launch or touch the app, reinforcing the safe, non-destructive behavior. No contradictions.

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

Conciseness5/5

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

The description is a single, clear sentence with no extraneous information, perfectly concise and front-loaded.

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

Completeness3/5

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

Given the simplicity of the tool (2 optional params, no output schema, safe annotations), the description is nearly sufficient but lacks any indication of the return value or validation result format, leaving some ambiguity.

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

Parameters1/5

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

The description completely ignores the two parameters (plan and plan_path) despite 0% schema description coverage. It adds no meaning beyond what the schema provides (names and types), failing to compensate for the lack of schema descriptions.

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 ('validate') and resource ('runtime-smoke plan') and clearly distinguishes from siblings by emphasizing it does not launch or touch the target app, differentiating it from active tools like runtime_smoke_run_plan.

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

Usage Guidelines3/5

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

The description implies this tool is for pre-run validation but does not explicitly state when not to use it or mention alternative tools. It provides basic context but lacks comparative guidance.

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

runtime_smoke_validate_probeC
Read-only

Validate one generated probe plan and return agent-mode run guidance.

NameRequiredDescriptionDefault
nameNo
phaseNoafter
probeYes
budgetsNo
agent_modeNo
debug_preflightNo
tracepoint_guardNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, so the description's mention of 'validate' and 'return guidance' is consistent. However, it provides no additional behavioral context beyond the annotations, such as side effects or return format.

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

Conciseness4/5

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

The description is a single concise sentence that clearly states the main action and output. It is front-loaded but lacks structured layout. Very efficient.

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

Completeness2/5

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

With 7 parameters and no output schema, the description is insufficient for an agent to use the tool correctly. It omits parameter details, return values, and contextual information about validation results.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain any of the 7 parameters (e.g., probe, name, phase, budgets). The agent cannot determine parameter roles from the description alone.

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

Purpose4/5

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

The description clearly states the tool validates a generated probe plan and returns agent-mode run guidance, distinguishing it from similar siblings like runtime_smoke_validate_plan by specifying the output type. However, it does not explicitly differentiate from all siblings.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives, such as runtime_smoke_validate_plan or runtime_smoke_run_probe. No prerequisites or context for appropriate usage.

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

runtime_smoke_wait_for_resultC
Read-only

Wait for a durable runtime smoke run and return compact evidence.

NameRequiredDescriptionDefault
run_idYes
agent_modeNo
timeout_msNo
event_limitNo
after_cursorNo
poll_interval_msNo

TDQS

C2.3/5.0
Behavior2/5

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

The readOnlyHint annotation is consistent with a waiting/observing tool, but the description adds minimal behavioral context. It does not explain the polling mechanism, timeout behavior, or what 'compact evidence' entails, leaving important behavior undocumented.

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

Conciseness2/5

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

The description is extremely short (one sentence), but it sacrifices informativeness for brevity. While concise, it omits critical details about usage, parameters, and return value, making it under-specified.

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

Completeness1/5

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

With no output schema and 0% parameter documentation, the description is severely incomplete. The agent cannot infer the return format, behavior, or parameter meanings, which is insufficient for reliable tool use.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no explanation of any parameters. Key parameters like run_id, timeout_ms, and agent_mode remain completely opaque, forcing the agent to rely solely on parameter names or external knowledge.

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

Purpose4/5

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

The description clearly states the action (wait) and the resource (durable runtime smoke run). However, it does not differentiate from closely related sibling tools like runtime_smoke_get_result or runtime_smoke_tail_events, which may have overlapping functionality.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives. The sibling set includes many smoke test tools, and the description lacks any hints about selection criteria or conditions for use.

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

search_outputA
Read-onlyIdempotent

Search program output for a pattern (regex supported).

Use this instead of get_output when looking for specific messages, errors, or log entries in large output. Returns matching lines with context.

Args: pattern: Regex pattern to search for (case-insensitive) context_lines: Number of lines before/after each match (default 2) category: Filter by category: "stdout", "stderr", or "console" (default: all)

Returns: List of matches with line numbers and context

NameRequiredDescriptionDefault
patternYes
categoryNo
context_linesNo

TDQS

A4.5/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint), the description adds that regex is case-insensitive, returns matching lines with context, and explains parameter behavior. No contradictions.

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?

Highly concise: a one-line summary, followed by usage guidance, then parameter descriptions. Every sentence adds value; no wasted words.

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?

Fully explains the tool's purpose, usage, parameters, and return value. Without output schema, the description of 'List of matches with line numbers and context' is sufficient. No gaps.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by explaining pattern (regex, case-insensitive), context_lines (number, default 2), and category (filter by 'stdout', 'stderr', or 'console', default all). Adds meaning beyond 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?

Clearly states 'Search program output for a pattern (regex supported)' and distinguishes from get_output by specifying when to use it for looking for specific messages/errors/log entries in large output.

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

Usage Guidelines4/5

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

Explicitly recommends 'Use this instead of get_output when looking for specific messages, errors, or log entries in large output,' providing clear context for when to choose this tool over its sibling.

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

search_sourceC
Read-onlyIdempotent

Run a bounded regex search across project source files.

NameRequiredDescriptionDefault
patternYes
file_globNo
max_resultsNo
timeout_secondsNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, indicating a safe, read-only operation. The description adds 'bounded' but does not elaborate on behavioral traits beyond what annotations convey, such as how bounds are enforced or what the search scope entails.

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

Conciseness3/5

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

The description is a single sentence, which is concise but overly minimal. It sacrifices essential details for brevity, resulting in a structure that is too terse to be fully useful.

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

Completeness2/5

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

Given the tool has 4 parameters, an output schema, and moderate complexity, the description fails to explain key aspects like the role of 'file_glob', the behavior of 'bounded', or the format of results. The output schema may cover return values, but parameter guidance is severely lacking.

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

Parameters1/5

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

Schema description coverage is 0%, meaning no parameter explanations exist in the schema. The description provides no additional meaning for parameters like 'pattern', 'file_glob', 'timeout_seconds', or 'max_results', leaving the agent without critical usage details.

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

Purpose5/5

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

The description clearly states the action ('Run') and resource ('bounded regex search across project source files'), and it distinguishes from siblings like 'search_output' which targets output instead of source.

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives (e.g., 'search_output'). Usage is implied by the name and context, but no guidance on exclusions or prerequisites is provided.

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

set_variableA

Set a variable's value during debugging.

State: STOPPED required.

Modifies a variable in the current scope. The program must be stopped. Use get_variables first to find the variables_reference for the scope.

Args: variables_reference: Reference from get_scopes or get_variables name: Variable name to modify value: New value as a string expression

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
nameYes
valueYes
variables_referenceYes

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses that the tool modifies a variable, requires a stopped state, and expects parameters from related tools. It includes an escape hatch for advanced use. Annotations provide only openWorldHint, so the description carries full responsibility, and it covers the key behavioral aspects.

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 concise, with a clear first line stating the purpose, followed by required state and parameter details. Every sentence serves a purpose, and the structure is efficient.

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

Completeness4/5

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

The description adequately covers the tool's functionality and parameter usage for a debugging context. It mentions the escape hatch for advanced cases. However, it could be improved by noting potential error conditions or the scope of variable modification.

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

Parameters4/5

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

The input schema has 0% description coverage, so the description must add meaning. It explains each parameter: variables_reference as from get_scopes or get_variables, name as variable name, value as a string expression. This adds necessary context beyond mere types.

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

Purpose5/5

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

The description clearly states the tool's action: 'Set a variable's value during debugging.' It specifies the resource (a variable in the current scope) and distinguishes it from other debug tools like get_variables or evaluate_expression.

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 prerequisites: 'State: STOPPED required' and 'The program must be stopped.' It also advises to use get_variables first to obtain the variables_reference. However, it does not explicitly mention alternatives or when not to use this tool.

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

start_debugA

Start debugging a .NET program. RECOMMENDED for most debugging scenarios.

This is the preferred method for debugging .NET applications. It launches a new process under the debugger with full feature support including:

  • Complete call stack visibility

  • Full variable inspection

  • All breakpoint features

SMART RESOLUTION: For .NET 6+ apps (WPF/WinForms), automatically resolves .exe to .dll to avoid "deps.json conflict" errors. You can pass either App.exe or App.dll - the correct target will be selected automatically.

PRE-BUILD: By default, builds the project before launching to ensure you're debugging the latest code. Provide build_project path to .csproj file. Set pre_build=False to skip building (e.g., for pre-built binaries).

ENVIRONMENT: String values override the debuggee environment; null removes inherited variables (case-insensitive on Windows). Launch overrides do not change the server or pre-build environment. Removals may drain and restart an idle adapter. With pre_build=False, a removal request is refused while a debuggee is active; stop it explicitly first. The existing pre-build stop/build sequence is unchanged.

BUILD FAILURE: A completed failed restore/build is included in the first error response's data: failed stage, executed argv, working directory, exit code, stdout/stderr, and parsed diagnostics. No debugger is launched. Validation failures and attempts without a completed build omit this data.

BUILD WARNINGS: Hidden by default to reduce noise. If the build succeeds but the app behaves unexpectedly, call get_build_diagnostics() to see all warnings — they may reveal the issue.

Use attach_debug only for already-running processes (e.g., ASP.NET services).

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

Args: program: Path to the .NET executable or DLL to debug (auto-resolved) cwd: Working directory for the program args: Command line arguments env: Debuggee environment overrides; null removes an inherited variable launch_profile: Optional project launch profile name stop_at_entry: Stop at entry point pre_build: Build project before launching (default: True). Requires build_project. build_project: Path to .csproj file (required when pre_build=True) build_configuration: Build configuration (Debug/Release) stealth_mode: Avoid foreground-stealing UI actions for GUI debugging

NameRequiredDescriptionDefault
cwdNo
envNo
argsNo
programYes
pre_buildNo
stealth_modeNo
build_projectNo
stop_at_entryNo
launch_profileNo
build_configurationNoDebug

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare openWorldHint=false, so the description carries the full burden and does so richly: it discloses smart .exe/.dll resolution, that pre-build runs by default, env override/removal semantics (case-insensitive, removal may drain/restart an idle adapter, refused during active debuggee), and that failed builds return diagnostics without launching a debugger.

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

Conciseness4/5

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

Front-loaded and well-sectioned with headers (SMART RESOLUTION, PRE-BUILD, ENVIRONMENT, etc.). Slightly redundant at the top ('RECOMMENDED...' then 'preferred method...') and the ENVIRONMENT paragraph is dense, but overall the structure earns its length.

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 10-parameter launch tool with no output schema and minimal annotations, the description covers the behavioral surface an agent needs: build dependency, env semantics, failure data shape, hidden warnings, and stealth mode. Nothing essential to a correct call is missing.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate and it does: the Args block documents all 10 parameters, including the critical pre_build=True -> build_project dependency, env null-removal semantics, and build_configuration values. This adds substantial meaning beyond the bare schema titles.

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

Purpose5/5

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

States a specific verb and resource ('Start debugging a .NET program') and explicitly positions itself against the sibling attach_debug: 'Use attach_debug only for already-running processes.' An agent can distinguish launch vs attach without opening either schema.

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

Usage Guidelines5/5

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

Explicit when-to-use ('RECOMMENDED for most debugging scenarios', 'preferred method') and when-not (attach_debug is only for already-running processes). It also names an escape hatch (dap-escape-hatch prompt) and gives clear triggers for pre_build=False and get_build_diagnostics.

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

step_intoA

Step into the next function call. Blocks until the step completes.

State: STOPPED required.

Enters the function being called on the current line. Use this when you need to investigate what happens inside a called function.

When multiple calls exist on one line, call get_step_in_targets first and pass the desired target's id via target_id.

IMPORTANT: After this returns with state=stopped, you are inside the called function. Use step_out to return to the caller.

Args: thread_id: Thread to step (uses current thread if omitted) target_id: Specific step-in target ID from get_step_in_targets

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
target_idNo
thread_idNo

TDQS

A4.3/5.0
Behavior4/5

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

Describes blocking behavior, required state (STOPPED), and result state (stopped inside function). No annotations to contradict, and description adds valuable behavioral context beyond schema.

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

Conciseness4/5

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

Well-structured with sections for purpose, state requirement, usage, arguments, and escape hatch. Each sentence is informative, though slightly verbose; could be tightened.

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?

Covers essential aspects: blocking, state management, argument usage, and relation to sibling tools. Lacks return value details due to no output schema, but this is acceptable given the tool's nature.

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

Parameters4/5

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

Schema coverage is 0%, but description explains both parameters: thread_id (optional, uses current thread) and target_id (optional, derived from get_step_in_targets). Adds meaning beyond the schema's titles and types.

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?

Description clearly states 'Step into the next function call' and explains it enters the called function. Distinguishes from sibling tools like step_out and step_over by mentioning when to use 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?

Provides explicit guidance: use when investigating inside a called function, recommends get_step_in_targets for multiple calls on one line, and advises step_out to return. Does not explicitly state when not to use, but provides sufficient context.

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

step_outB

Step out of the current function. Blocks until the step completes.

State: STOPPED required.

Continues execution until the current function returns, then stops at the caller. Use this to exit a function you stepped into.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
thread_idNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations provide no read/write hints. The description adds some behavioral context: blocks until complete, continues execution then stops at caller. But it does not disclose side effects or what happens to the state beyond the required STOPPED state.

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

Conciseness4/5

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

The description is relatively concise (5 lines) and front-loaded with the core purpose. The 'Escape hatch' line is slightly extraneous but does not significantly harm conciseness.

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

Completeness2/5

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

Given the one optional parameter, no output schema, and minimal annotations, the description covers the basic operation but misses parameter explanation and potential side effects. It does not contrast with sibling tools beyond mentioning stepping into.

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

Parameters1/5

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

There is one optional parameter (thread_id) with no description in the schema. The tool description does not mention this parameter at all, leaving the agent uninformed about when or why to provide it.

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

Purpose5/5

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

The description clearly states 'Step out of the current function' with a specific verb and resource. It distinguishes from siblings like step_into and step_over by explaining it exits a function you stepped into.

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

Usage Guidelines4/5

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

The description provides clear guidance: 'Use this to exit a function you stepped into' and mentions required state ('State: STOPPED required'). However, it does not explicitly state when not to use it or list alternatives.

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

step_overA

Step over to the next line. Blocks until the step completes.

State: STOPPED required.

Executes the current line without entering function calls. Returns the new stopped location with source context.

IMPORTANT: After this returns with state=stopped, inspect variables at the new location before deciding the next action.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault
thread_idNo

TDQS

A4.1/5.0
Behavior4/5

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

Describes blocking behavior, state requirement, effect of not entering functions, and return of new location. With minimal annotations (only openWorldHint=false), this adds significant behavioral insight, though it doesn't cover potential side effects like variable changes.

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

Conciseness5/5

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

The description is well-organized: action, requirement, behavior, important note, escape hatch. Every sentence adds value without redundancy.

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

Completeness4/5

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

Covers core stepping behavior, state requirement, and return info. Lacks explanation of thread_id parameter, but given optional nature and presence of sibling step tools, it is largely complete for its purpose.

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

Parameters2/5

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

The single parameter thread_id is not mentioned in the description (0% schema coverage). While its purpose may be inferred, the description does not clarify its role or default behavior, leaving ambiguity for the agent.

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 explicitly states 'Step over to the next line' and 'Executes the current line without entering function calls', clearly defining the action and distinguishing it from step_into and step_out among siblings.

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

Usage Guidelines4/5

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

Prerequisite 'State: STOPPED required' is given, and the post-action instruction to inspect variables provides usage context. However, it does not explicitly compare with step_into/step_out or mention when not to use.

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

stop_debugB
Destructive

Stop the current debug session.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, so the destructive nature is clear. The description adds that it stops the session but does not elaborate on side effects (e.g., whether breakpoints are cleared, state is lost). It does not contradict 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 extremely concise: two short sentences. The first sentence states the action, the second provides a helpful pointer to an alternative (DAP escape hatch). No unnecessary words.

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

Completeness3/5

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

Given no parameters and annotations, the description is adequate but could be improved by specifying which debug session is affected (e.g., the session started by start_debug). It does not explain input-output expectations, but it's a simple stop action.

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

Parameters4/5

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

There are no parameters, and schema coverage is 100%. The description does not need to add parameter details. Baseline score of 4 is appropriate for zero-parameter tools.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Stop the current debug session.' This is a specific verb-resource pair. However, among siblings there are similar tools like 'terminate_debug' and 'restart_debug', and the description does not explicitly differentiate from them, though the verb 'stop' is distinct.

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

Usage Guidelines2/5

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

The description provides minimal usage guidance. It only mentions an 'escape hatch' for DAP requests but does not indicate when to use this tool versus alternatives (e.g., terminate_debug, pause_execution). There is no explicit advice on prerequisites or conditions.

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

summarize_objectA
Read-onlyIdempotent

Produce a flattened summary of a complex object.

State: STOPPED required. Get variables_reference from get_variables() response.

Returns property paths (dot notation), values, and types up to the configured depth. Detects circular references.

Args: variables_reference: Variable reference from get_variables response max_depth: Maximum nesting depth (default 2, max 5) max_properties: Maximum total properties to return (default 50)

NameRequiredDescriptionDefault
max_depthNo
max_propertiesNo
variables_referenceYes

TDQS

A4.8/5.0
Behavior5/5

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

Adds returns format (dot notation), circular reference detection, and depth/property limits. Annotations already confirm read-only/idempotent; description enriches beyond.

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

Conciseness5/5

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

Purpose sentence first, then critical state requirement, then output format, then parameter list. No redundancy, efficient.

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?

All necessary context: state requirement, parameter sources, limits, and output format. No output schema needed given description clarity.

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

Parameters5/5

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

Schema has 0% description coverage; description compensates fully with clear meaning for each parameter, including defaults and max values.

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?

Clear verb 'Produce a flattened summary' specifies exact output. Distinguished from siblings like evaluate_expression by focusing on flattening complex objects.

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?

Specifies prerequisite: State STOPPED and source for variables_reference. Could mention alternatives for simple evaluations but otherwise strong.

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

terminate_debugA
Destructive

Gracefully terminate the debugged program.

Sends DAP terminate request for clean shutdown. Falls back to forced disconnect if adapter doesn't support terminate.

Use this instead of stop_debug when you want a graceful exit.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations indicate destructiveHint: true, but description adds value: it sends DAP terminate request, falls back to forced disconnect, and is graceful. No contradictions. However, it could be more explicit about consequences like state loss.

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 short sentences, each adds value. Front-loaded with main action. No fluff or redundancy.

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

Completeness4/5

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

Input schema is empty, no output schema. Description covers behavior (graceful, DAP, fallback) adequately. Could mention requirement for active debug session, but it's implied. Fairly complete for a simple tool.

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

Parameters4/5

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

There are zero parameters, so baseline 4. The description does not need to explain parameters, and it does not.

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

Purpose5/5

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

The description clearly states the tool terminates the debugged program gracefully, using DAP terminate request with fallback. It distinguishes from stop_debug by specifying 'graceful exit'. The verb 'terminate' and resource 'debugged program' are specific and unambiguous.

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 says 'Use this instead of stop_debug when you want a graceful exit.' Also mentions 'Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.' Provides clear when-to-use and alternative.

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

ui_bring_to_frontA

Bring the debuggee window to the foreground and exit stealth mode.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

The description adds behavioral context beyond the sparse annotations (only openWorldHint: false). It reveals that the tool exits stealth mode, which is a key side effect. Without annotations covering this, the description carries the burden and does so adequately.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It conveys the essential purpose and behavior concisely.

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 simplicity of the action (no parameters, no output schema), the description is fully complete. It covers what the tool does and the key behavioral change (exiting stealth mode). No additional context is needed.

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 no parameters, so the description does not need to explain parameter semantics. Baseline for zero parameters is 4. The description does not add any param-related information because none exist.

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

Purpose5/5

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

The description clearly states the tool's action: bring the debuggee window to the foreground and exit stealth mode. It uses specific verbs ('bring', 'exit') and a clear resource ('debuggee window', 'stealth mode'). This distinguishes it from sibling UI tools like ui_click or ui_set_focus.

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

Usage Guidelines3/5

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

The description implies when to use this tool (when you need the debuggee window visible and no longer in stealth mode), but it does not explicitly state when not to use it or mention alternatives. No guidance on exclusions or conflict with other tools.

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

ui_clickA

Click on a UI element.

Note: If app is STOPPED at breakpoint, resume with continue_execution() first.

Tries cached coordinates first (from last ui_get_window_tree call), then falls back to pywinauto element search.

Args: automation_id: AutomationId property name: Element's Name/Title property control_type: Control type

NameRequiredDescriptionDefault
nameNo
xpathNo
root_idNo
control_typeNo
automation_idNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations provide openWorldHint=false, and the description adds caching and fallback details. No contradictions. However, the description does not disclose other behaviors like side effects, error handling, or waiting conditions beyond what is implied.

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

Conciseness4/5

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

The description is concise with a clear header, note, and explanation. It uses bullet points for parameters, which aids readability. No unnecessary sentences.

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

Completeness2/5

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

The tool has 5 parameters with no schema descriptions, no output schema, and moderate complexity. The description fails to cover all parameters, does not explain return behavior, error cases, or preconditions beyond the breakpoint note. This leaves the agent under-informed.

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

Parameters2/5

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

The description explains 3 of 5 parameters (automation_id, name, control_type), but omits root_id and xpath entirely. Given 0% schema description coverage, the description partially compensates but leaves significant gaps.

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 'Click on a UI element', which is a specific action on a specific resource. The name 'ui_click' and siblings like 'ui_double_click', 'ui_right_click', 'ui_click_annotated' help distinguish it.

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 includes a note about resuming execution if app is stopped. It also explains the caching and fallback behavior, providing implicit guidance on when this tool is appropriate. However, it does not explicitly contrast with sibling tools or state when not to use it.

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

ui_click_annotatedA

Click an element by its ID from ui_take_annotated_screenshot.

Uses the numbered element from the last annotated screenshot. Call ui_take_annotated_screenshot first to get element IDs.

Args: element_id: Element ID number from the annotated screenshot generation: Generation counter from the screenshot response (optional, warns if stale)

NameRequiredDescriptionDefault
element_idYes
generationNo

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses the prerequisite and the optional generation parameter for staleness warnings. Combined with the openWorldHint: false annotation, the agent understands this is a safe UI interaction without external side effects.

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

Conciseness5/5

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

The description is concise, with a clear summary sentence followed by two short paragraphs. No redundant or vague statements. Every sentence adds value.

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

Completeness4/5

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

The tool is simple with two parameters, and the description covers the essential process. It lacks error handling details but is sufficient for correct invocation given the annotated screenshot context.

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 schema coverage at 0%, the description compensates by explaining element_id as 'Element ID number from the annotated screenshot' and generation as 'Generation counter from the screenshot response (optional, warns if stale)'. This adds meaningful context 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 clearly states the verb 'click' and the resource 'element by its ID from ui_take_annotated_screenshot'. It distinguishes from sibling tools like ui_click and ui_click_at by specifying annotated identification.

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 instructs to call ui_take_annotated_screenshot first, and explains the purpose of the generation parameter. However, it does not contrast with alternatives such as ui_click or ui_click_at.

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

ui_click_atA

Click at absolute screen coordinates.

Use with ui_get_window_tree rectangle data when element search fails. Get coordinates from the 'rectangle' field in tree output. Click goes to the center: x = (left + right) / 2, y = (top + bottom) / 2

Args: x: Screen X coordinate y: Screen Y coordinate

NameRequiredDescriptionDefault
xYes
yYes

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the single annotation (openWorldHint: false), the description reveals that the click goes to the center of the rectangle using the formula x = (left + right) / 2, y = (top + bottom) / 2. This adds meaningful behavioral context not present in annotations or schema.

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

Conciseness5/5

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

The description is extremely concise with no wasted words. It front-loads the purpose, then provides usage context, coordinate calculation, and parameter list in a structured format. Every sentence is necessary and earns its place.

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

Completeness4/5

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

Given the tool's simplicity (no output schema, no complex parameters), the description covers the essential use case, coordinate calculation, and parameter meaning. It does not discuss error behavior or return values, but those are likely obvious for a click action.

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 description labels the parameters as 'Screen X coordinate' and 'Screen Y coordinate', which adds a bit of meaning beyond the schema's title fields. However, with 0% schema description coverage and only 2 parameters, more detail would have been beneficial, such as coordinate range or behavior outside bounds. The center calculation is behavioral, not strictly parameter semantics.

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

Purpose5/5

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

The description clearly states the verb 'click' and the resource 'absolute screen coordinates'. It distinguishes itself from sibling tools like ui_click and ui_click_annotated by specifying that it uses coordinates obtained from ui_get_window_tree rectangle data.

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 to use the tool with ui_get_window_tree rectangle data when element search fails, providing clear context for when to use it. It does not mention when not to use it or alternative tools, but the guidance is sufficient.

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

ui_clipboard_readA
Read-only

Read text content from the system clipboard.

Executes on an STA thread inside the FlaUI bridge (required by System.Windows.Clipboard). Returns {text: "...", has_text: bool}.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds value by disclosing the STA thread requirement and the exact return structure ({text, has_text}). This goes beyond the 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?

Two sentences: first states purpose, second adds technical context and return format. No filler; highly concise and front-loaded.

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

Completeness4/5

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

For a zero-parameter tool with readOnly annotations, the description covers purpose, execution constraints, and return structure. Could mention behavior with empty clipboard or non-text content, but not critical.

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

Parameters4/5

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

There are no parameters, and schema coverage is 100%. The description correctly omits param details; baseline score of 4 applies.

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

Purpose5/5

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

The description clearly states the tool reads text from the system clipboard and provides the return format. The name 'ui_clipboard_read' is self-explanatory and distinguishes it from the sibling 'ui_clipboard_write'.

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

Usage Guidelines3/5

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

No explicit usage guidance when to use this tool versus alternatives. While the purpose is clear, the description lacks context such as 'use when you need to retrieve clipboard text'. The STA thread detail is technical, not usage advice.

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

ui_clipboard_writeA

Write text to the system clipboard.

Executes on an STA thread inside the FlaUI bridge (required by System.Windows.Clipboard). Supports full Unicode including emoji and CJK.

Args: text: The text to write to the clipboard.

NameRequiredDescriptionDefault
textYes

TDQS

A3.9/5.0
Behavior4/5

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

The description adds valuable context beyond annotations: it mentions execution on an STA thread via FlaUI bridge, and full Unicode support including emoji and CJK. Annotations only provide openWorldHint: false, offering no behavioral 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 concise: three sentences plus an args section. It is front-loaded with the purpose, followed by technical detail, and then parameter documentation. No unnecessary words.

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

Completeness3/5

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

For a simple write tool with one parameter and no output schema, the description covers purpose, technical constraints, and input format. However, it lacks information about return value or error conditions, which would improve completeness.

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

Parameters3/5

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

The description repeats the parameter name 'text' with a minimal explanation ('The text to write to the clipboard'), adding little beyond the schema. While it mentions Unicode support, it does not specify length limits or special encoding requirements.

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 explicitly states 'Write text to the system clipboard', using a specific verb and resource. It clearly distinguishes from sibling tool ui_clipboard_read which reads clipboard content.

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

Usage Guidelines3/5

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

The description does not provide explicit when-to-use or when-not-to-use guidance, nor does it reference alternatives like ui_clipboard_read. However, the purpose is self-evident, so it remains adequate.

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

ui_close_windowA

Close a top-level window via WindowPattern.

After closing, subsequent ui_* calls return an error if the closed window was the active session window. Use window_title to target a specific window (e.g. a modal dialog); omit to close the main application window.

Args: window_title: Optional partial title match to target a specific window. Omit to target the main connected window.

NameRequiredDescriptionDefault
window_titleNo

TDQS

A4.8/5.0
Behavior5/5

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

The description discloses an important behavioral trait: after closing, subsequent ui_* calls return an error if the closed window was the active session window. This adds significant transparency beyond the annotations (openWorldHint false) and no contradictions.

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 concise and well-structured, with a clear purpose statement, a behavioral note, and a dedicated 'Args' section. Every sentence adds value without 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?

For a simple tool with one optional parameter and no output schema, the description is complete. It covers the operation, side effects, and parameter usage sufficiently for an AI agent to invoke correctly.

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

Parameters5/5

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

With schema description coverage at 0%, the description fully explains the single parameter window_title: it is an optional partial title match, and omitting it targets the main connected window. This compensates completely for the lack of schema descriptions.

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

Purpose5/5

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

The description clearly states the action 'Close a top-level window' and specifies the mechanism 'via WindowPattern'. It distinguishes from sibling tools by being the dedicated close operation for windows.

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 optional window_title parameter: to target a specific window like a modal dialog, and to omit to close the main application window. However, it does not explicitly mention when not to use the tool or alternatives.

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

ui_collapseA

Collapse a TreeView node, ComboBox dropdown, or other collapsible element.

Uses ExpandCollapsePattern. Collapsing an already-collapsed element is safe and returns {collapsed: true, was_already: true}.

Args: automation_id: AutomationId of the element to collapse.

NameRequiredDescriptionDefault
automation_idYes

TDQS

A4.3/5.0
Behavior4/5

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

The description adds behavioral context beyond the minimal annotations: it specifies the use of ExpandCollapsePattern, the safety of collapsing already-collapsed elements, and the return object structure. This is helpful for an agent.

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 concise: three sentences that cover purpose, key behavioral detail, and parameter. Every sentence adds value with no redundancy.

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

Completeness5/5

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

Given the tool's simplicity (one required parameter, no output schema, no nested objects), the description is fully complete. It covers the core functionality, safe usage, parameter definition, and return value shape.

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 description explains the single parameter 'automation_id' as 'AutomationId of the element to collapse', adding meaning beyond the schema which only defines its type. With 0% schema description coverage, this compensation is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool collapses TreeView nodes, ComboBox dropdowns, or other collapsible elements. It uses a specific verb and resource, and distinguishes itself from sibling tools like ui_expand.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It mentions that collapsing an already-collapsed element is safe, which is a useful guideline. However, it does not explicitly compare with alternatives like ui_expand or ui_toggle, nor does it state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_diffC
Read-only

Diff two named UI snapshots.

NameRequiredDescriptionDefault
afterYes
beforeYes
fieldsYes

TDQS

C2.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, so the description adds no further behavioral context. It does not explain what 'Diff' entails (e.g., output format, side effects).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only one sentence, which is too brief to convey necessary information. It sacrifices completeness for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and parameter descriptions, the description is severely incomplete. It fails to explain the return value or the role of 'fields', leaving the agent with insufficient information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage and no parameter explanations in the description, the meaning of 'before', 'after', and especially 'fields' is unclear. The description adds no value beyond parameter names.

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 uses a clear verb 'Diff' and resource 'two named UI snapshots', making the purpose understandable. However, it does not differentiate from the sibling tool 'diff_snapshots'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'diff_snapshots', nor any exclusions or contexts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_double_clickC

Double-click on a UI element.

Tries cached coordinates first, then falls back to pywinauto element search.

Note: If app is STOPPED at breakpoint, resume with continue_execution() first.

Args: automation_id: AutomationId property name: Element's Name/Title property control_type: Control type

NameRequiredDescriptionDefault
nameNo
xpathNo
root_idNo
control_typeNo
automation_idNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are minimal (only openWorldHint). The description mentions caching and fallback search, but does not disclose destructiveness, focus requirements, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is short and to the point, with a breakpoint note. The Args listing is clear but could integrate remaining parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 optional parameters and no output schema, the description leaves gaps: no info on waiting, timeouts, or element not found behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It lists only 3 of 5 parameters in Args, omitting root_id and xpath. No explanation of how parameters interact or which are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it performs a double-click on a UI element. It mentions fallback behavior but does not explicitly differentiate from sibling tools like ui_click or ui_right_click.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a note about resuming the app if stopped at a breakpoint, but lacks explicit guidance on when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_dragA

Drag from one position to another.

Two modes:

  1. By AutomationId: from_automation_id + to_automation_id (uses cached rectangles)

  2. By coordinates: from_x, from_y, to_x, to_y (absolute screen coords)

For mode 1, call ui_get_window_tree first to populate cache.

Args: from_automation_id: Source element AutomationId to_automation_id: Target element AutomationId from_x: Source X coordinate (screen absolute) from_y: Source Y coordinate to_x: Target X coordinate to_y: Target Y coordinate speed_ms: Total drag duration in milliseconds. Minimum 20 ms so the gesture always emits enough waypoints to cross common WPF drag thresholds reliably. hold_modifiers: Optional modifier names to hold for the full drag. Accepted values: ctrl, shift, alt, win.

Notes: - Identical from/to coordinates are rejected. - Short drags that stay below the system drag threshold should use ui_click instead of ui_drag.

NameRequiredDescriptionDefault
to_xNo
to_yNo
from_xNo
from_yNo
speed_msNo
hold_modifiersNo
to_automation_idNo
from_automation_idNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behaviors beyond the minimal annotation (openWorldHint: false): rejects identical coordinates, enforces minimum speed_ms of 20 ms for reliable drag thresholds, and describes optional modifier support. No contradictions.

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?

Well-structured with clear sections (modes, args, notes). No redundant or irrelevant information. Each sentence 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?

Given 8 parameters, no output schema, and extensive sibling tools, the description is complete: covers prerequisites, edge cases (identical coordinates, short drags), and alternatives. An agent can use this tool correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain all parameters. It does so comprehensively: defines each coordinate and automation ID, explains speed_ms minimum and purpose, and lists accepted modifier values. Adds essential context 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 clearly states 'Drag from one position to another' and defines two distinct modes (By AutomationId and By coordinates). It differentiates from sibling tools like ui_click by specifying when to use that alternative (short drags).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: when to use each mode, prerequisite for mode 1 (call ui_get_window_tree first), and conditions to use ui_click instead. This helps the agent choose correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_eventsC

Start, read, or stop a bounded selector-scoped UI event buffer.

NameRequiredDescriptionDefault
nameNo
xpathNo
actionYes
fieldsNo
root_idNo
buffer_idYes
max_eventsNo
control_typeNo
automation_idNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions 'bounded' and 'selector-scoped' but does not disclose side effects, whether events are persistent, or requirements (e.g., running UI session). With minimal annotations, the description should provide more behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence is concise but too sparse for a complex tool. It front-loads the key actions but omits essential details, sacrificing clarity for brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters, no output schema, and no enum hints, the description is grossly incomplete. An agent cannot infer how to specify the selector (e.g., via root_id/xpath) or interpret return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and description does not explain any of the 9 parameters. 'action' and 'buffer_id' are required but their allowed values are not specified. Parameters like 'fields', 'automation_id', 'root_id' are unexplained, making correct invocation unlikely.

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 managing a 'bounded selector-scoped UI event buffer' with three actions (start, read, stop). It distinguishes from sibling tools that perform individual UI actions. However, it lacks definition of 'selector-scoped' and what events are captured.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like ui_query or ui_snapshot. No prerequisites or context provided for starting/reading/stopping a buffer.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_expandA

Expand a TreeView node, ComboBox dropdown, or other collapsible element.

Uses ExpandCollapsePattern. Expanding an already-expanded element is safe and returns {expanded: true, was_already: true}.

Args: automation_id: AutomationId of the element to expand.

NameRequiredDescriptionDefault
automation_idYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that it uses ExpandCollapsePattern, that it's safe to call on already-expanded elements, and the return format. However, it does not specify if the element must be visible or enabled, or any other side effects. Annotations are minimal (only openWorldHint), so description carries burden but has gaps.

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 concise: one sentence for purpose, one for safety and return, and a clear Args section. Every sentence adds value, and it is front-loaded with the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one parameter and no output schema, the description covers the operation, safety, and return format. It provides enough context for an agent to use it correctly. Minor missing details (e.g., visibility requirements) are not critical given its simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, automation_id, is described as 'AutomationId of the element to expand.' This adds meaning beyond the schema (which only provides title and type), but given the schema coverage is 0%, the description provides necessary context. Adequate but not exceptional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: expand a TreeView node, ComboBox dropdown, or other collapsible element. It uses a specific verb and resource, and distinguishes from siblings like ui_collapse and ui_toggle.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that expanding an already-expanded element is safe, but does not explicitly state when to use this tool over alternatives like ui_toggle or ui_invoke. No contraindications or usage context beyond that.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_file_dialogA

Complete a standard Windows Open/Save file dialog in a single call.

Enters the file path and clicks the accept button. Handles the standard Win32 dialog layout (File name ComboBox + Open/Save button) with multi-strategy fallback for different dialog variants.

Args: path: Full file path to enter (e.g. "C:/data/test.txt") accept_button: Name of accept button (default "Open", use "Save" for save dialogs)

NameRequiredDescriptionDefault
pathYes
accept_buttonNoOpen

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description details the action (enters path, clicks accept) and the multi-strategy fallback for different dialog variants. Since annotations only provide openWorldHint=false (no readOnlyHint/destructiveHint), the description fully discloses the mutating UI interaction.

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 brief (three short sentences) and front-loads the main purpose. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and a simple UI interaction, the description covers purpose, parameters, and behavioral fallback. It lacks explicit error handling or success/failure conditions, but is otherwise complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds essential meaning: example path format, explanation of accept_button default and usage ('Open' vs 'Save'). This fully compensates for the schema's lack of descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it completes a standard Windows Open/Save file dialog in a single call by entering the file path and clicking the accept button. This distinguishes it from sibling UI tools that require multiple steps, like ui_click or ui_send_keys.

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 indicates it is designed for standard Win32 file dialogs and mentions a default button value of 'Open' with 'Save' for save dialogs. It implies when to use but does not explicitly exclude alternative approaches or non-standard dialog variants.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_find_elementA
Read-onlyIdempotent

Find a UI element by AutomationId, name, control type, or XPath.

At least one search criterion must be provided. Use ui_get_window_tree first to discover available elements.

Args: automation_id: AutomationId property (most reliable for WPF) name: Element's Name/Title property control_type: Type like "Button", "TextBox", "MenuItem" root_id: Optional AutomationId to scope search to a subtree xpath: Optional XPath expression (FlaUI backend only)

Returns: Element info if found

NameRequiredDescriptionDefault
nameNo
xpathNo
root_idNo
control_typeNo
automation_idNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=true and idempotentHint=true, so the description's additional context about requiring at least one criterion and returning element info supplements these. No contradictions.

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 concise, using a single introductory sentence followed by bullet-point arguments. It front-loads the primary action and constraints without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 parameters, no output schema), the description covers the main return behavior ('Element info if found') and mentions prerequisites. It could specify search priority or error cases, but is adequate for most use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It lists all five parameters with brief explanations (e.g., 'automation_id: AutomationId property (most reliable for WPF)'). This adds essential meaning, though some details (e.g., XPath backend) are omitted.

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 specific verbs and resources: 'Find a UI element by AutomationId, name, control type, or XPath.' It clearly distinguishes from siblings like ui_click (action) and ui_get_window_tree (tree retrieval) by focusing on locating elements.

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 advises using ui_get_window_tree first to discover elements and states that at least one search criterion is required. While it doesn't explicitly list alternatives, the guidance is clear and contextual.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_focusA
Read-only

Read bounded focus evidence for a selector without moving focus.

NameRequiredDescriptionDefault
nameNo
xpathNo
actionYes
root_idNo
control_typeNo
automation_idNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description confirms no side effects with 'without moving focus', and the readOnlyHint annotation already indicates safety. No additional behavioral details are provided, such as what 'bounded focus evidence' means or any rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no unnecessary words. It is efficiently front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, no output schema, UI context), the description fails to explain what 'bounded focus evidence' is or how to use parameters. The agent lacks guidance for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 6 parameters with 0% description coverage, and the tool description does not explain any parameters, including the required 'action' field. This leaves the agent guessing about valid values and usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Read bounded focus evidence for a selector without moving focus', specifying the action (read) and the resource (focus evidence). This distinguishes it from sibling tools like ui_set_focus and ui_get_focused_element.

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 context that the tool is read-only and does not move focus, but does not explicitly state when to use it over alternatives or when not to use it. The readOnlyHint annotation reinforces the non-destructive nature.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_get_focused_elementA
Read-onlyIdempotent

Get information about the currently focused UI element.

Returns the focused element's automationId, name, controlType, and value. Useful for verifying focus state after ui_set_focus or tab navigation.

Note: Returns focus within the app window, not always OS-level dialogs.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Describes return fields (automationId, name, controlType, value) and scope limitation (app window vs. OS dialogs). Annotations already indicate readOnly and idempotent, but description adds valuable context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with no waste. Front-loaded with core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool is simple (0 params), and description covers return values and a key limitation. No output schema needed given the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters, so schema coverage is 100%. Description correctly does not add param info, earning baseline 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'Get information about the currently focused UI element.' Distinguishes from sibling UI tools like ui_set_focus and ui_find_element.

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 it's useful for verifying focus after ui_set_focus or tab navigation. Also notes limitation about OS-level dialogs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_get_held_modifiersA
Read-onlyIdempotent

Inspect currently held modifiers.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, so the description adds minimal value. It confirms the tool is read-only but doesn't disclose return format or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded, no wasted words. Perfectly concise for a simple tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Minimal description with no output schema; agent may lack details on what 'modifiers' includes (e.g., list of strings). Adequate for a simple read but could specify return type.

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?

Zero parameters with 100% schema coverage; the description adds no parameter details, which is acceptable. Baseline 4 for no parameters.

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 'Inspect currently held modifiers' clearly states the action (inspect) and the resource (currently held modifiers). It distinguishes from siblings like ui_hold_modifiers and ui_release_modifiers by focusing on inspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. The description does not mention checking modifiers before interactions or any context for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_get_selected_itemA
Read-onlyIdempotent

Get the currently selected item in a list/grid control.

Returns the selected item's name, index, and properties. Useful for verifying selection state after clicks or keyboard navigation.

Note: FlaUI backend returns selection for the first item only. Use ui_find_element to inspect individual items for full multi-selection state.

Args: automation_id: AutomationId of the list/grid/combobox control root_id: Optional AutomationId to scope search to a subtree xpath: Optional XPath expression (FlaUI backend only)

NameRequiredDescriptionDefault
xpathNo
root_idNo
automation_idYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate read-only and idempotent behavior. The description adds a critical backend-specific limitation ('FlaUI backend returns selection for the first item only'), which is valuable beyond annotations. However, it does not specify behavior when no item is selected or error conditions.

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 concise (5 sentences plus argument list) and front-loaded with the primary purpose. Every sentence adds value without redundancy. The arguments are clearly listed with inline definitions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 params, no output schema), the description covers the core functionality and parameter semantics. It mentions what is returned (name, index, properties) but omits details on handling empty selections or errors, which would be helpful for a complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to all three parameters: automation_id is the AutomationId of a list/grid/combobox control; root_id scopes the search; xpath is an optional XPath expression available only in FlaUI backend. Since the input schema has 0% description coverage, the description fully compensates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'currently selected item in a list/grid control'. It distinguishes from sibling tools like ui_find_element by explicitly noting that it returns only the first item in multi-selection, whereas ui_find_element can inspect individual items for full state.

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 provides explicit guidance on when to use ('useful for verifying selection state after clicks or keyboard navigation') and when not to use ('Use ui_find_element to inspect individual items for full multi-selection state'). This directly addresses alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_get_window_treeA
Read-onlyIdempotent

Get the visual tree of the debugged application — ALL top-level windows.

Covers the main app window and any sibling windows (modal dialogs, popups, file pickers) owned by the same process. Modal dialogs created via WPF Window.ShowDialog() are sibling top-level windows, not descendants of the main window — they appear in the "windows" array alongside the main window.

Call after start_debug and wait for the application window to appear.

Args: max_depth: Maximum depth to traverse within each window (default 3) max_children: Maximum children per element (default 50)

Returns: FlaUI backend: {"windows": [tree, ...], "count": N, "primary": "Main App"} Each tree entry carries automationId, controlType, name, rect, children, etc. Use ui_switch_window to retarget subsequent calls at a specific window (e.g. a modal dialog).

pywinauto fallback backend: a single-window tree dict with
automationId/name/rect/children at the root (no windows array,
no count, no primary). Callers that need to support both
backends should probe for the "windows" key and fall back to
treating the response itself as a single-window tree.
NameRequiredDescriptionDefault
max_depthNo
max_childrenNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations give readOnlyHint and idempotentHint. Description adds significant context: explains window hierarchy (modal dialogs are siblings), details return format differences between FlaUI and pywinauto backends, and notes that 'windows' array includes main window and siblings. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Structured with paragraphs: main purpose, behavioral nuance, prerequisite, parameters, return format. Front-loaded with key info. Slightly long but every sentence adds value; no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers prerequisites, parameters, return details for two backends, and related tool. No output schema but description compensates. Could mention error conditions (e.g., no debug session) but overall complete given tool complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has no descriptions (coverage 0%). Description clearly explains both parameters: max_depth (default 3) and max_children (default 50), adding meaning beyond schema. Could further clarify edge cases (e.g., depth=0), but adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets the visual tree of the debugged application, explicitly noting it covers ALL top-level windows. It distinguishes from siblings by explaining that modal dialogs from ShowDialog() are sibling top-level windows, not descendants, which differentiates it from tools like ui_find_element that target specific elements.

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 usage guidance: call after start_debug and wait for window. Mentions using ui_switch_window to retarget later calls. Lacks explicit alternatives or when-not-to-use, but the description of backend differences and focused purpose compensates.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_gridC

Read, select, or assert WPF DataGrid row evidence.

NameRequiredDescriptionDefault
nameNo
rowsNo
phaseNo
xpathNo
actionYes
columnNo
expectNo
columnsNo
root_idNo
row_keyNo
identityNo
end_indexNo
row_indexNo
probe_nameNo
max_scrollsNo
start_indexNo
control_typeNo
automation_idNo
ensure_visibleNo
scroll_settle_msNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only include openWorldHint=false, which is not explained or expanded upon. The description does not disclose side effects, permissions, or whether operations are read-only or destructive beyond implying multiple modes (read/select/assert).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no fluff, but it may be too terse given the tool's complexity. While concise, it sacrifices necessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's 20 parameters, no output schema, and high complexity, the description is severely incomplete. It does not explain actions, row identifiers, or behavior, leaving the agent unable to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 20 parameters and 0% schema description coverage, the description fails to explain any parameter's meaning or relation to the actions. The agent receives no assistance on how to populate action, row_index, columns, or other critical fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb-action ('Read, select, or assert') and the resource ('WPF DataGrid row evidence'), distinguishing it from sibling UI tools which handle generic clicks, selections, or property reads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like ui_find_element, ui_select_items, or other grid-specific tools. The description does not mention exclusions or context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_hold_modifiersB

Hold modifiers across subsequent UI input calls.

NameRequiredDescriptionDefault
modifiersYes

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that modifiers are held across subsequent calls, which is a key behavioral aspect. However, it does not address overlapping calls, state persistence, or edge cases. The sparse annotations (only openWorldHint) leave the description to carry the burden, which it partially does.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with a clear verb and context. It could be slightly expanded with more detail without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of parameter guidance, no output schema, and minimal annotations, the description is insufficient for an agent to use the tool correctly. It does not provide enough context about valid inputs or the tool's effect on other tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description does not explain what the 'modifiers' array should contain (e.g., valid strings like 'ctrl', 'shift'). The agent has no guidance on allowable values.

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 'Hold modifiers across subsequent UI input calls' clearly states the verb 'hold' and resource 'modifiers', and distinguishes from sibling tools like 'ui_release_modifiers' and 'ui_get_held_modifiers'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. Missing when-not-to-use or tips about releasing modifiers after use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_hoverB

Move the real pointer over one uniquely resolved foreground UI element.

NameRequiredDescriptionDefault
nameNo
xpathNo
root_idNo
timeout_msNo
control_typeNo
automation_idNo

TDQS

B3.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavioral traits: 'real pointer' indicates actual cursor movement (not simulated), and 'uniquely resolved' implies it will fail if the element is ambiguous. Although annotations (openWorldHint: false) suggest no outside impact, the description adds nuance about physical pointer movement. It could be more explicit about hover duration or side effects, but overall adds value beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence of 11 words, front-loading the core action. It wastes no words, but could be slightly expanded to include critical context without harming conciseness. It is appropriately sized given the tool's relative simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has six parameters, no output schema, and minimal annotations, the description is incomplete. It does not explain how to resolve an element, what happens on failure, return behavior, or timeout semantics. The tool's behavior for multiple matches or error states is omitted, leaving significant gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has six parameters with no descriptions (0% coverage), and the description does not mention any parameter meanings or constraints. For example, it does not explain that 'name' or 'xpath' are used to identify the element, nor the role of 'timeout_ms'. This forces the agent to rely solely on parameter names, which may be insufficient.

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 'move' and resource 'real pointer', clearly indicating the action. It distinguishes from sibling tools like ui_click or ui_focus by specifying 'hover' and 'uniquely resolved foreground UI element', making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention scenarios like triggering hover effects or when not to use it (e.g., avoid if click is needed). Implicit differentiation may be inferred from sibling names, but no explicit usage advice is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_invokeA

Invoke a UI element using UIA InvokePattern (no mouse movement).

Note: If app is STOPPED at breakpoint, resume with continue_execution() first.

Preferred over ui_click for buttons, menu items, and hyperlinks because it works reliably even when the element is off-screen or partially obscured. Falls back to Click() if InvokePattern is not supported.

WPF top-level MenuItem headers: scope the native ENTER key to the parent, then rediscover the popup child and call ui_invoke separately for that exact child. Do not add a fixture-specific key handler. Invoking the parent alone does not guarantee submenu peers materialize. Use pre/post UI oracles; a child missing after verified expansion is a harness observation, not automatically a product defect.

Args: automation_id: AutomationId property name: Element's Name/Title property control_type: Control type (Button, MenuItem, Hyperlink, etc.) root_id: Optional AutomationId to scope search to a subtree xpath: Optional XPath expression (FlaUI backend only)

NameRequiredDescriptionDefault
nameNo
xpathNo
root_idNo
control_typeNo
automation_idNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavioral traits beyond annotations: it uses InvokePattern, avoids mouse movement, falls back to Click() if needed, and has a special note about WPF menu headers. It also warns about a common gotcha (breakpoint pause). While it doesn't mention side effects or error behavior, the description adds valuable insight into how the tool operates, which is not contradicted by the sparse annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a mix of general guidance and very specific troubleshooting (the WPF MenuItem paragraph). While accurate, the WPF section is somewhat tangential and could be shortened or moved to a note, as it is likely a rare edge case. The breakpoint note is useful but interrupts the flow. Overall, it delivers valuable information but could be more streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with five optional parameters and no output schema, the description covers critical usage constraints such as the InvokePattern vs Click fallback, breakpoint interaction, and nested menu handling. However, it omits details like how multiple selectors (e.g., name + automation_id) are combined (AND vs OR), behavior when no elements match, or timeout defaults. It addresses common pitfalls but leaves the agent guessing on some execution semantics.

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 0% schema description coverage, the description carries the full burden for parameter semantics. It lists each parameter with a concise purpose: 'root_id: Optional AutomationId to scope search to a subtree' and 'xpath: Optional XPath expression (FlaUI backend only)' adds implementation-specific context. This goes beyond a bare list, though it could benefit from examples or selector precedence logic.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Invoke a UI element using UIA InvokePattern (no mouse movement).' It distinguishes itself from the sibling 'ui_click' by explicitly noting it is 'Preferred over ui_click for buttons, menu items, and hyperlinks' and explains the advantage (works when off-screen or obscured). This makes the purpose unambiguous and differentiates it from similar tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: 'Preferred over ui_click for buttons, menu items, and hyperlinks because it works reliably even when the element is off-screen or partially obscured.' It also gives a direct alternative (ui_click) and a prerequisite ('If app is STOPPED at breakpoint, resume with continue_execution() first'), offering clear direction on when to use this tool versus others.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_key_sequenceB

Send keys while holding modifiers and report cleanup evidence.

keys accepts NUMPAD0 through NUMPAD9, NUMPADADD, NUMPADSUBTRACT, NUMPADMULTIPLY, NUMPADDIVIDE, NUMPADDECIMAL, NUMPADENTER and NUMLOCK, optionally enclosed in braces. NUMLOCK presses/releases the key; it does not set a requested lock state. Physical delivery requires the FlaUI backend.

For WPF top-level MenuItem headers, scope the native ENTER key to the parent, then rediscover the popup child after expansion and invoke its exact child through a separate ui_invoke. Do not add a fixture-specific key handler. Invoking the parent menu alone does not ensure submenu peers materialize. Use pre/post UI oracles; a missing child after verified expansion is a harness observation, not automatically a product defect.

NameRequiredDescriptionDefault
keysYes
nameNo
xpathNo
root_idNo
modifiersYes
control_typeNo
automation_idNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations carry almost nothing (only openWorldHint=false), so the description bears the burden and does disclose useful behavior: the accepted NUMPAD/NUMLOCK key vocabulary, that NUMLOCK toggles rather than sets a lock state, and that physical delivery needs the FlaUI backend. It is silent on the post-conditions that matter for a key-injection tool — whether modifiers stay held afterwards (cf. ui_release_modifiers/ui_get_held_modifiers), whether the target is focused first, and what "cleanup evidence" actually contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, which is good, but the second half sprawls into a long menu-specific anecdote about harness observations vs. product defects that crowds out more broadly useful information. The key vocabulary block is justified; the MENU guidance is over-weighted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter input-injection tool with no output schema and near-zero schema documentation, the description leaves the caller unable to construct a valid target argument or predict the returned evidence. The FlaUI-backend note is the only hint that delivery can fail; failure modes and return shape go unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters, so the description must compensate — and it only covers `keys` (with a valuable enum-like key list). The five target-selection parameters (name, xpath, root_id, control_type, automation_id) and the required `modifiers` array are never explained, including whether they are mutually exclusive or how an element is resolved.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource ("Send keys while holding modifiers") plus an unusual side effect ("report cleanup evidence"). The modifier-holding aspect implicitly separates it from ui_send_keys/ui_send_keys_focused, but those siblings are never named, so the agent must infer the boundary from the phrasing rather than being told.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real usage guidance, but only for one narrow scenario: the WPF MenuItem workflow (scope ENTER to the parent, rediscover the popup child, invoke via ui_invoke, don't add a fixture-specific handler, use pre/post oracles). Nothing says when to pick this over ui_send_keys, ui_send_keys_focused, ui_send_keys_batch, or ui_hold_modifiers, which is the more common selection problem.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_maximize_windowA

Maximize a top-level window via WindowPattern.

Args: window_title: Optional partial title match. Omit to target main window.

NameRequiredDescriptionDefault
window_titleNo

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations for readOnlyHint or destructiveHint, so description should disclose behavior. 'Maximize' implies mutation, but no details on side effects, permissions, or error conditions. Minimal disclosure beyond the action itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose. No wasted words. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose and parameter usage adequately. Lacks details on failure modes (e.g., window not found) or return values. No output schema. Acceptable for a simple tool but could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% coverage (no descriptions), so description compensates by explaining window_title as 'Optional partial title match. Omit to target main window.' Adds clear meaning and default behavior.

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?

Description clearly states 'Maximize a top-level window via WindowPattern' - specific verb (maximize) and resource (window). Distinguishes from sibling tools like ui_minimize_window and ui_restore_window by name and action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides guidance on parameter: 'Optional partial title match. Omit to target main window.' However, no explicit when to use vs alternatives or prerequisites are given. Implied usage but lacks exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_minimize_windowA

Minimize a top-level window via WindowPattern.

Args: window_title: Optional partial title match. Omit to target main window.

NameRequiredDescriptionDefault
window_titleNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only include openWorldHint: false, which is minimally informative. The description adds that it uses WindowPattern (UIA), indicating it interacts with native UI. However, it does not disclose behavior in edge cases (e.g., window not found), whether it supports non-top-level windows, or system permissions required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. It front-loads the primary action and then briefly explains the parameter. This structure is efficient for an agent to quickly understand the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool and the set of siblings, the description is fairly complete but lacks details on error handling, return behavior, and explicit differentiation from related tools like ui_close_window or ui_restore_window. For an agent to handle all scenarios, more context on failure modes would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does so effectively by explaining that 'window_title' is an optional partial title match and omitting targets the main window. This adds meaning beyond the schema's type and default, though it could clarify matching rules (e.g., case sensitivity).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Minimize a top-level window via WindowPattern.' It uses a specific verb and resource, and the tool name aligns with this. Among siblings like ui_maximize_window, ui_restore_window, ui_close_window, this tool's purpose is distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance on the optional 'window_title' parameter: 'Optional partial title match. Omit to target main window.' This clarifies when to provide a title vs not, but it does not explicitly state when to use this tool over alternatives (e.g., minimizing vs closing a window) or mention any prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_monitor_eventsC
Read-only

Return retained semantic UI monitor history without polling.

NameRequiredDescriptionDefault
monitor_idYes
after_cursorNo

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, indicating a safe read operation. The description adds that it returns retained history without polling, providing some behavioral context beyond annotations, but it does not discuss authentication, rate limits, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very brief (one sentence), but it is under-specified and omits critical parameter information. It achieves conciseness at the expense of completeness, which reduces its usefulness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of output schema and 0% parameter coverage, the description is incomplete. The agent lacks information about return values, parameter roles, and how this tool fits with siblings like ui_monitor_start or ui_monitor_poll.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the tool description does not mention the parameters monitor_id or after_cursor. The agent receives no guidance on what these parameters represent or how to use them, making the tool difficult to invoke correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool returns retained semantic UI monitor history without polling, which distinguishes it from polling and waiting tools. However, it does not explicitly name sibling tools for differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without polling' hints at usage context, but the description lacks explicit guidance on when to use this tool versus alternatives like ui_monitor_poll or ui_monitor_wait. No when-not or alternative tool names are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_monitor_pollA

Poll a semantic UI monitor once and return cursor-filtered events.

NameRequiredDescriptionDefault
monitor_idYes
after_cursorNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the tool polls once (not continuous) and uses cursor filtering. Annotations only include openWorldHint=false, which is consistent. It adds context by specifying the return behavior, though it does not mention side effects or permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, concise sentence that front-loads key information. Every word is necessary and adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two parameters and no output schema, the description covers the core behavior (poll once, cursor-filtered). It does not detail event types or error conditions, but given the limited complexity, it is relatively complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description mentions 'cursor-filtered events', which explains the after_cursor parameter's purpose, but does not describe monitor_id. Schema description coverage is 0%, so the description partially compensates but is not fully informative.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool polls a semantic UI monitor once and returns cursor-filtered events. The verb 'poll' and resource 'semantic UI monitor' are specific, and it distinguishes from sibling tools like ui_monitor_start or ui_monitor_wait by emphasizing a one-time operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for one-time polling rather than continuous monitoring, but it does not explicitly state when to use this tool versus alternatives like ui_monitor_events or ui_monitor_start. No exclusions or alternative guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_monitor_startC

Start a selector-scoped semantic UI monitor.

NameRequiredDescriptionDefault
nameNo
xpathNo
fieldsNo
root_idNo
max_eventsNo
monitor_idYes
control_typeNo
automation_idNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include only openWorldHint=false, providing minimal behavioral cues. The description adds no further details on side effects, whether starting a monitor is destructive, or what cleaning is required, leaving significant behavioral ambiguity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and front-loaded, but it sacrifices essential information. Every word counts, but key details about parameters and behavior are missing, making it under-specified rather than concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (8 parameters, no output schema, no parameter descriptions), the description is severely incomplete. It does not explain how to configure the monitor or what happens when it starts, leaving the agent without critical operational knowledge.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 8 parameters with 0% description coverage, and the description adds no meaning to any parameter. The term 'selector-scoped' hints at some parameters but fails to clarify which ones or their formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the verb 'Start' and resource 'UI monitor' with qualifiers 'selector-scoped' and 'semantic', giving a clear purpose. However, it does not distinguish from sibling tools like ui_monitor_events or ui_monitor_poll, which are also UI monitoring tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. There is no indication of prerequisites, appropriate contexts, or exclusions, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_monitor_waitC

Wait for a semantic UI monitor event or return a bounded timeout.

NameRequiredDescriptionDefault
monitor_idYes
timeout_msNo
after_cursorNo
poll_interval_msNo

TDQS

C2.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions a 'bounded timeout,' adding some behavioral insight beyond annotations, but fails to disclose what happens on timeout, event semantics, or whether it blocks. Annotations are minimal, so more detail is needed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only 9 words, which is too brief. It sacrifices necessary details for brevity, resulting in under-specification rather than conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, no output schema, and minimal annotations, the description is grossly incomplete. It fails to explain parameters, return values, or behavioral nuances, leaving the agent without sufficient context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description provides no explanation of any parameter (monitor_id, after_cursor, timeout_ms, poll_interval_ms), leaving the agent to infer meaning solely from names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool waits for a UI monitor event or returns on timeout. However, it does not differentiate from similar sibling tools like ui_monitor_poll or ui_monitor_events, lacking specificity about what constitutes a 'semantic' event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. There is no mention of context, prerequisites, or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_move_windowA

Move a window to screen coordinates (x, y) via TransformPattern.

Returns {moved: false, reason: "..."} if the window cannot be moved (CanMove = false). Does NOT raise an exception in that case.

Args: x: Target screen X coordinate for the window's top-left corner. y: Target screen Y coordinate for the window's top-left corner. window_title: Optional partial title match. Omit to target main window.

NameRequiredDescriptionDefault
xYes
yYes
window_titleNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool returns a structured error object when the window cannot be moved (CanMove=false) and that it does not raise an exception. This adds behavioral context beyond the annotations, which only include openWorldHint=false. It does not detail side effects or permissions, but is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: a brief sentence for the action, a clear line about the return format, and a structured Args section. Every sentence adds value without 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 tool with 3 parameters and no output schema, the description covers the action, return value on failure, and parameter semantics completely. It provides enough context for effective selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description explicitly defines all three parameters: x and y as target screen coordinates, and window_title as optional with a hint to omit for main window. Since schema description coverage is 0%, this adds critical meaning beyond type/title.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Move a window to screen coordinates (x, y)') and the resource ('window'), with specification of the underlying pattern (TransformPattern). It is specific and distinguishes from sibling tools like ui_resize_window or ui_maximize_window.

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 context on when it returns the error object and emphasizes that no exception is raised. However, it does not explicitly state when to use this tool vs alternatives (e.g., ui_switch_window) or note when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_propertyC
Read-only

Read bounded UI property evidence without mutation side effects.

NameRequiredDescriptionDefault
nameNo
xpathNo
actionYes
root_idNo
propertyNo
control_typeNo
automation_idNo
property_nameNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the description's statement of 'no mutation side effects' is redundant. It adds 'bounded' but does not explain what bounds exist (e.g., scope, limitations). No additional behavioral traits disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence, which is concise but at the expense of informativeness. It front-loads the core purpose but lacks necessary details, making it barely adequate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 8 parameters and no output schema, the description should compensate with parameter explanations and return value hints. It does not, leaving the tool's usage unclear and incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 8 parameters with 0% description coverage. The description does not explain any parameter meanings, such as 'action', 'property', 'automation_id', etc., leaving the agent to infer from names alone. This is inadequate for a tool with many parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Read bounded UI property evidence' which clearly indicates a read operation on UI properties. 'Without mutation side effects' further clarifies it is non-destructive. However, 'bounded' is vague and the term 'property evidence' is not standard, slightly reducing clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when needing to read UI properties safely, but it does not specify when not to use it or how it differs from similar read tools like ui_query or ui_text. No explicit alternatives or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_queryB
Read-only

Read selected UI fields without dumping the full tree.

NameRequiredDescriptionDefault
nameNo
xpathNo
fieldsYes
root_idNo
max_resultsNo
control_typeNo
automation_idNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true; description adds only 'Read selected UI fields,' which aligns but provides no additional behavioral context beyond what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence front-loads the purpose with no wasted words, though it could be slightly more informative without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, no output schema, and no parameter guidance, the description is too minimal to fully support correct invocation for complex UI queries.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description adds no explanation of the 7 parameters (e.g., how automation_id, name, etc., are used to identify elements).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads selected UI fields without dumping the full tree, distinguishing it from tree-dumping siblings like ui_get_window_tree.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies use for selective reading vs full tree dump, but no explicit when-to-use, when-not-to-use, or alternative tools named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_read_textA
Read-onlyIdempotent

Read text content from a UI element using multi-strategy extraction.

Tries 5 strategies in order: ValuePattern → TextPattern → Name → LegacyIAccessible → visible text descendants. The response includes which strategy provided the text (source field).

When the primary text looks like a CLR type name (e.g., "Namespace.Class"), automatically falls back to visible descendant text.

Args: automation_id: AutomationId property name: Element's Name/Title property root_id: Optional AutomationId to scope search to a subtree xpath: Optional XPath expression (FlaUI backend only)

NameRequiredDescriptionDefault
nameNo
xpathNo
root_idNo
automation_idNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint and idempotentHint annotations, the description details the 5 strategies tried in order, the automatic fallback for CLR type names, and the inclusion of a 'source' field in the response. This adds valuable behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (3 sentences plus a parameter list), front-loaded with the main purpose, and every sentence adds value. No extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 4 parameters, no output schema, and annotations present, the description covers the extraction strategy and fallback behavior. However, it omits details about error cases (e.g., element not found) and the full output format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds minimal meaning to each parameter (e.g., 'AutomationId property', 'Element's Name/Title property'). It does not clarify mutual exclusivity, optionality, or how parameters interact.

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?

Clearly states 'Read text content from a UI element using multi-strategy extraction', providing a specific verb (read), resource (text content from UI element), and methodology. Distinguishes from sibling UI tools that perform other actions like clicking or querying.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies usage for reading text from UI elements but lacks explicit guidance on when not to use, prerequisites, or alternatives among siblings. While it describes the extraction strategy, it does not help the agent decide between this and similar tools like ui_get_selected_item.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_realize_virtualized_itemA
Idempotent

Realize a virtualized list or grid item so it enters the visual tree.

Virtualized lists (VirtualizingStackPanel with VirtualizationMode=Recycling) only create UI elements for visible rows. Items outside the viewport are "virtualized" — they exist in the data source but have no AutomationElement. This tool forces the item into the visual tree so subsequent ui_click or ui_find_element calls can reach it.

Operation is idempotent: re-realizing an already-realized item is safe and returns {realized: true} without error.

Returns: {realized: true, element_id: "...", bounding_rect: {x, y, width, height}} on success. {realized: false, reason: "item not found"} if the item is not in the data source. {realized: false, reason: "container does not support ItemContainerPattern"} if the container is not a virtualizing list.

Args: container_automation_id: AutomationId of the list/grid container. prop_name: Property to search by. Supported: "AutomationId", "Name", "ClassName". value: Value to match against the chosen property.

NameRequiredDescriptionDefault
valueYes
prop_nameYes
container_automation_idYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint annotation, the description details the operation's effect (forces into visual tree), idempotency, error cases (item not found, container not virtualizing), and the exact return object structure. No contradictions 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?

The description is well-structured: purpose first, then background, then idempotency, return values, and parameters. All sentences are necessary and informative. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the virtualization concept, multiple return cases, and error conditions. Lacks a concrete example or guidance on obtaining the container_automation_id, but overall is sufficient for the tool's complexity. Minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It lists the three parameters and specifies supported values for prop_name (AutomationId, Name, ClassName). This adds value but could provide more detail or examples. Baseline 3 is appropriate given partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: realizing a virtualized list/grid item. It explains the context of virtualized lists and that this tool forces an item into the visual tree, distinguishing it from sibling UI tools that operate on already-realized elements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use this tool: before ui_click or ui_find_element on virtualized lists. It mentions idempotency and safe re-realization. While it doesn't explicitly list when not to use it or alternatives, the context is clear and implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_release_modifiersB

Release held modifiers or all held modifiers.

NameRequiredDescriptionDefault
modifiersYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description lacks details about behavior beyond the core action. It does not explain what 'all held modifiers' means, potential side effects, or any restrictions, and the annotation only provides openWorldHint=false without additional context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence that is front-loaded and immediately conveys the tool's purpose. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description omits important context such as prerequisites (must have held modifiers), return behavior, and error conditions. It is incomplete for a tool with no output schema and minimal annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds some meaning by indicating the parameter can accept a list or a single string and mentions 'all held modifiers', but it does not explain valid values or how to specify 'all', leaving ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (release) and the resource (held modifiers), and it distinguishes itself from sibling tools like ui_hold_modifiers and ui_get_held_modifiers by focusing on release.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus alternatives or provide prerequisites (e.g., modifiers must be held first). The usage context is implied but not clarified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_resize_windowA

Resize a window to the given dimensions via TransformPattern.

Returns {resized: false, reason: "..."} if the window cannot be resized (CanResize = false). Does NOT raise an exception in that case.

Args: width: Target window width in pixels. height: Target window height in pixels. window_title: Optional partial title match. Omit to target main window.

NameRequiredDescriptionDefault
widthYes
heightYes
window_titleNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Description adds behavioral details beyond annotations: returns {resized: false...} on failure, does not raise exception. Annotations only have openWorldHint: false, so description adds useful context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences plus Args list, no wasted words. Front-loaded with main purpose and behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers return value on failure and parameter semantics. Missing details on dimension constraints or behavior when window_title doesn't match, but sufficient for simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, description explains each parameter: width and height as pixels, window_title as optional partial match with default behavior to target main window. Adds critical meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool resizes a window to given dimensions, using 'Resize' and 'window'. It distinguishes from siblings like ui_maximize_window by specifying dimensions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description implies usage via the action but does not explicitly state when to use vs alternatives like move, minimize, or maximize. No guidance on when to omit window_title.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_restore_windowA

Restore a minimized or maximized window to normal state via WindowPattern.

Args: window_title: Optional partial title match. Omit to target main window.

NameRequiredDescriptionDefault
window_titleNo

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only include openWorldHint:false, so the description carries the burden. It mentions 'via WindowPattern' but does not explain what this entails, any side effects, failure conditions, or required window state. Behavioral disclosure is minimal.

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, each earning its place: the first states the purpose, the second explains the parameter. No redundancy or unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description covers the main aspects: purpose and parameter semantics. However, it lacks usage guidelines and behavioral transparency, leaving some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds critical meaning: it clarifies that window_title is a partial match and omitting it targets the main window. This goes beyond the schema's type definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action (restore a window to normal state) and the method (via WindowPattern). It also distinguishes from sibling tools like ui_minimize_window and ui_maximize_window by specifying the target state (normal).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when a window is minimized or maximized) but does not provide explicit guidance on alternatives or prerequisites. It mentions an omission strategy for the parameter but lacks broader usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_right_clickB

Right-click on a UI element to open context menu.

Tries cached coordinates first, then falls back to pywinauto element search.

Note: If app is STOPPED at breakpoint, resume with continue_execution() first.

Args: automation_id: AutomationId property name: Element's Name/Title property control_type: Control type

NameRequiredDescriptionDefault
nameNo
xpathNo
root_idNo
control_typeNo
automation_idNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only include openWorldHint: false, so the description bears the burden of disclosure. It mentions cached coordinates and fallback search, and alerts about breakpoints. However, it does not describe failure modes, success criteria, or whether the tool interacts with the UI state (e.g., opening context menus) beyond the click.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is fairly concise but structurally flawed: it mixes a usage note with a partial parameter list. The arg section is incomplete (missing two params) and uses bullet-like formatting. Could be more streamlined.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, no output schema, and minimal annotations, the description leaves significant gaps. It does not explain element identification logic, behavior on multiple matches, or return value. The breakpoint note is helpful but not enough to make the tool well-documented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It lists only 3 of 5 parameters (automation_id, name, control_type) and merely repeats their property names without explaining how to use them (e.g., which are required, how they interact). Parameters root_id and xpath are omitted entirely.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Right-click on a UI element to open context menu,' which conveys the core action and result. However, it does not differentiate from sibling tools like ui_click or ui_double_click, which limits clarity when choosing among them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a behavior note (caching and fallback) and a prerequisite (resume if stopped at breakpoint). But it lacks explicit guidance on when to use this tool versus other click variants, nor does it mention any restrictions or best practices.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_scrollA

Scroll a UI control.

Note: If app is STOPPED at breakpoint, resume with continue_execution() first.

Args: automation_id: AutomationId of the scrollable control direction: "up", "down", "left", "right" amount: Number of scroll units (default 3)

NameRequiredDescriptionDefault
amountNo
directionNodown
automation_idYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations beyond openWorldHint=false, which the description does not contradict. The description lacks details on side effects, error behavior, or whether scrolling is synchronous. Provides minimal behavioral insight.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (two lines plus args list) and front-loaded with purpose. The note about breakpoints is relevant. Could be slightly more structured but efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool without output schema, the description covers basic usage but lacks details on failure modes or prerequisites for scrollable controls. It is minimally adequate.

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 0% schema coverage, the description adds meaning by explaining automation_id, direction (listing values), and amount (noting default). However, it omits the default value for direction (which is 'down' in schema), leaving a small gap.

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 'Scroll a UI control' with a specific verb and resource. Among numerous sibling UI tools (e.g., ui_click, ui_drag), it uniquely identifies scrolling behavior.

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 a clear prerequisite: if the app is stopped at a breakpoint, resume with continue_execution() first. Does not explicitly distinguish from alternatives like ui_collapse or ui_expand, but the context is adequate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_select_itemsA

Select items by index in a list/grid control (DataGrid, ListView, ListBox).

With FlaUI backend: uses SelectionItemPattern (reliable for virtualized lists). With pywinauto backend: two strategies (tries both):

  1. UIA SelectionItemPattern — works for non-virtualized lists

  2. Coordinate click fallback — clicks items using cached rectangles (Ctrl+click for multi-select, plain click for first item)

For WPF virtualized lists (VirtualizingStackPanel), strategy 1 may fail because off-screen items don't have UI containers. Strategy 2 uses visible item coordinates from the cache. FlaUI backend handles this natively.

Args: automation_id: AutomationId of the list/grid control indices: List of 0-based item indices to select mode: "replace" (clear existing, select these) or "add" (add to existing selection)

NameRequiredDescriptionDefault
modeNoreplace
indicesYes
automation_idYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description thoroughly covers behavioral details: two backend strategies with fallback mechanisms, multi-select behavior (Ctrl+click), and limitations with virtualized lists. This goes well beyond the sparse annotation (only openWorldHint: false), providing the agent with essential operational knowledge.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear intro, backend details, and args list. It is front-loaded with the core purpose. However, it is somewhat lengthy; some backend implementation details could be shortened without losing essential guidance for the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description should mention the return value or outcome (e.g., success/failure, selected items). It also lacks error handling or prerequisite conditions (e.g., control must exist). This leaves an incomplete picture for the agent, though the behavioral details are strong.

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 0% schema description coverage, the description adds meaning by explaining the three parameters (automation_id, indices, mode) in an 'Args' section. It clarifies that indices are 0-based and mode options are 'replace' or 'add', though it does not enumerate all possible mode values or provide additional constraints 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 clearly states the tool's purpose: 'Select items by index in a list/grid control (DataGrid, ListView, ListBox).' This is a specific verb+resource pair, and it distinguishes itself from sibling tools like ui_get_selected_item which only retrieves selection, not modifies it.

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 detailed backend-specific strategies and addresses virtualized list edge cases. It implies usage context (e.g., for reliable selection in virtualized lists, FlaUI backend is preferred) but does not explicitly state when not to use it or name alternatives for different selection needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_send_keysA

Send keyboard input to a UI element.

Note: If app is STOPPED at breakpoint, resume with continue_execution() first.

Tries cached coordinates first (click to focus, then send keys), then falls back to pywinauto element search.

Key syntax (modifiers are PREFIX characters, special keys in braces):

  • Regular text: "hello world"

  • Modifiers: ^ = Ctrl, % = Alt, + = Shift

  • Alt+Z: "%z" Alt+F4: "%{F4}"

  • Ctrl+C: "^c" Ctrl+Shift+S: "^+s"

  • Shift+Tab: "+{TAB}"

  • Special keys: {ENTER} {TAB} {ESC} {DELETE} {BACKSPACE}

  • Arrow keys: {LEFT} {RIGHT} {UP} {DOWN}

  • Navigation: {HOME} {END} {PGUP} {PGDN}

  • Function keys: {F1} {F2} ... {F12}

  • Physical keypad: {NUMPAD0} ... {NUMPAD9}, {NUMPADADD}, {NUMPADSUBTRACT}, {NUMPADMULTIPLY}, {NUMPADDIVIDE}, {NUMPADDECIMAL}, {NUMPADENTER}, {NUMLOCK} (press/release, not lock-state setting)

  • Combined: Ctrl+End = "^{END}", Alt+Z = "%z"

IMPORTANT: Modifier prefixes (^%+) apply to the NEXT character or {KEY}. For Alt+Z send "%z" (NOT "{ALT}z" or "Alt+Z").

Args: keys: Keys to send (see syntax above) automation_id: Target element's AutomationId name: Target element's Name control_type: Target element's control type

NameRequiredDescriptionDefault
keysYes
nameNo
xpathNo
root_idNo
control_typeNo
automation_idNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With only openWorldHint=false in annotations, the description adds substantial behavioral detail: it tries cached coordinates first (clicking to focus then sending keys) and falls back to pywinauto element search. It also notes the breakpoint resume requirement and provides extensive key syntax. It does not, however, describe side effects (e.g., whether typed text modifies application state) or return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and a key prerequisite, then organized into clear sections using bullets and examples. The key syntax section is necessarily detailed, but every sentence earns its place by explaining a distinct aspect of the tool's operation or syntax.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (6 parameters, no output schema, minimal annotations), the description covers essential aspects: purpose, prerequisite, fallback behavior, and comprehensive key syntax. It omits some parameter details (xpath, root_id) and return-value information, but provides enough for an agent to invoke the tool correctly in most common scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It thoroughly documents the required 'keys' parameter with syntax rules, and briefly names automation_id, name, and control_type. However, it omits xpath and root_id entirely and does not explain how the target-identification parameters interact or take precedence, leaving significant gaps for 6 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Send') and resource ('keyboard input to a UI element'), making the tool's purpose clear. However, it does not differentiate itself from siblings like ui_send_keys_focused or ui_key_sequence, leaving the agent to infer when this tool is preferable.

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 a clear prerequisite: 'If app is STOPPED at breakpoint, resume with continue_execution() first.' It also describes the internal approach (cached coordinates then fallback), which helps the agent understand operational context. However, it does not explicitly compare with alternative sibling tools or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_send_keys_batchA

Send a batch of key sequences in a single call, holding focus throughout.

Solves the race condition where the terminal steals focus between individual send_keys calls. The bridge holds foreground + element focus for the entire batch, sending keys with configurable delay.

Use this for: arrow navigation (20x DOWN), typing sequences, keyboard shortcuts.

Args: keys: List of key strings, each sent separately with delay. Example: ["{DOWN}", "{DOWN}", "{DOWN}"] for 3 arrow presses. Physical keypad example: ["{NUMPAD1}", "{NUMPADADD}"]. automation_id: Target element to focus before sending. delay_ms: Milliseconds between each key (default 50ms).

NameRequiredDescriptionDefault
keysYes
delay_msNo
automation_idNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare openWorldHint false, so the description carries most of the behavioral load. It adds meaningful context: the race condition being solved, holding foreground and element focus, and configurable inter-key delay. It does not discuss failure modes or side effects of sending keystrokes, keeping it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with purpose and rationale, then structured use cases and Args. It is appropriately sized, though the sentence about the bridge holding focus slightly repeats the opening and the Args section could be tighter.

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 3-parameter UI action with no output schema and minimal annotations, the description covers behavior, usage, and every parameter with examples. It leaves out explicit selection guidance against the closest siblings (ui_send_keys_focused, ui_key_sequence), so it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must document parameters, and it does: keys as a list sent separately with examples including special key syntax, automation_id as the element to focus before sending, and delay_ms as the interval with default 50ms. This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Send a batch of key sequences in a single call') and distinguishes the batch operation from individual send_keys calls, which is the key sibling distinction. An agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use cases ('arrow navigation (20x DOWN), typing sequences, keyboard shortcuts') and implies the alternative is individual send_keys calls for non-batch scenarios. It does not explicitly name when not to use it or route to ui_send_keys_focused/ui_key_sequence, so not a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_send_keys_focusedA

Send keyboard input to the currently focused element.

Use this AFTER ui_set_focus to avoid re-searching for complex elements like DataGrid that may timeout on repeated searches.

Workflow:

  1. ui_set_focus(automation_id="MyElement") # Focus the element

  2. ui_send_keys_focused(keys="^{END}") # Send keys without re-search

Key syntax (modifiers are PREFIX characters, special keys in braces):

  • ^ = Ctrl, % = Alt, + = Shift

  • Alt+Z: "%z" Ctrl+C: "^c" Shift+Tab: "+{TAB}"

  • Special: {ENTER} {TAB} {ESC} {DELETE} {BACKSPACE}

  • Arrows: {LEFT} {RIGHT} {UP} {DOWN}

  • Navigation: {HOME} {END} {PGUP} {PGDN}

  • Combined: Ctrl+End = "^{END}", Ctrl+Home = "^{HOME}"

  • Physical keypad: {NUMPAD0} ... {NUMPAD9}, {NUMPADADD}, {NUMPADSUBTRACT}, {NUMPADMULTIPLY}, {NUMPADDIVIDE}, {NUMPADDECIMAL}, {NUMPADENTER}, {NUMLOCK} (press/release)

IMPORTANT: For Alt+Z send "%z" (NOT "{ALT}z").

Args: keys: Keys to send (see syntax above)

NameRequiredDescriptionDefault
keysYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare openWorldHint=false, so the description carries most of the burden and does disclose the key behavioral trait: input goes to the already-focused element with no element re-search. It doesn't cover error behavior (e.g. what happens if nothing is focused) or return format, leaving a modest gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the ui_set_focus workflow are front-loaded before the syntax reference. The key-syntax block is long but each line is functional reference material, not filler, so the length is justified despite being dense.

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 one-parameter, no-output-schema tool, the description covers purpose, prerequisite, workflow, and full input syntax. The only untouched area is failure/error semantics, which is minor given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the sole parameter is undocumented in the schema, so the description must compensate — and it does thoroughly, with modifier prefixes, brace syntax for special keys, navigation keys, numpad keys, and a specific Alt+Z counterexample. This is richer than most schemas would provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Send keyboard input to the currently focused element') and the scope qualifier 'focused' implicitly distinguishes it from the element-searching sibling ui_send_keys. The DataGrid timeout rationale makes the distinct role concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit numbered workflow requiring ui_set_focus first, and states the condition that makes this tool preferable ('avoid re-searching for complex elements... that may timeout'). An agent knows when to reach for this over ui_send_keys.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_send_system_eventC

Send a supported system event through the active UI backend.

NameRequiredDescriptionDefault
modeNotoggle
eventYes

TDQS

C2.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description does not disclose side effects or behavioral traits beyond the minimal annotation (openWorldHint: false). It does not indicate if the event is sent synchronously, whether it requires specific UI state, or what the impact is on the UI backend.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise, but it lacks detail. It is appropriately front-loaded but does not earn its place due to insufficient information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 params, no output schema), the description should provide enough context for correct usage. However, it fails to specify what events are supported, how the mode parameter works, or the result of sending an event, making it incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds no meaning to the two parameters. 'event' and 'mode' are not explained; possible values or semantics are missing, leaving the agent to guess.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies 'send a system event' which is a clear action, but 'supported system event' is vague and does not differentiate from many other UI interaction sibling tools. It lacks specificity about what constitutes a system event.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like ui_send_keys or ui_invoke. There is no context about prerequisites or typical use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_set_focusA
Idempotent

Set keyboard focus to a UI element.

Uses UIA-based Focus() for FlaUI backend (monitor/DPI-agnostic), or element search + set_focus for pywinauto backend.

Call this before ui_send_keys to ensure keys go to the right element.

Args: automation_id: AutomationId property (FlaUI + pywinauto) name: Element's Name/Title property (FlaUI + pywinauto) control_type: Control type (pywinauto only) root_id: Optional AutomationId to scope search (pywinauto only) xpath: Optional XPath expression (pywinauto only)

NameRequiredDescriptionDefault
nameNo
xpathNo
root_idNo
control_typeNo
automation_idNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotentHint=true. Description adds backend-specific behavior (FlaUI vs pywinauto) and the link to ui_send_keys. No contradictions; adds useful context beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Concise and well-structured: purpose, backend behavior, usage note, and parameter list. No unnecessary text, but could be slightly more compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema; description lacks details on return values or error handling (e.g., if element not found). For a simple set operation, it's mostly adequate but could be more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 5 parameters with 0% coverage. Description explains each parameter's purpose and which backend applies (e.g., control_type for pywinauto only). Adds meaning beyond bare schema titles.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Set' and the resource 'keyboard focus to a UI element'. It distinguishes itself from sibling tools like ui_click and ui_send_keys by specifically addressing focus setting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: 'Call this before ui_send_keys to ensure keys go to the right element.' This clarifies a common use case. Lacks explicit when-not-to-use, but context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_set_valueA

Set a numeric value on a slider, spinner, or progress bar via RangeValuePattern.

Returns {set: false, reason: "value X out of range [min..max]"} if the value is outside the element's Min/Max bounds — does NOT raise an exception.

Args: automation_id: AutomationId of the RangeValue element (slider, spinner, etc.) value: The numeric value to set. Must be within element's [Minimum, Maximum].

NameRequiredDescriptionDefault
valueYes
automation_idYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that out-of-range values return a structured failure response instead of an exception, adding behavioral insight beyond the minimal annotation (openWorldHint: false).

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?

Concise, well-structured description with a clear purpose line followed by note on error handling and parameter list. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with no output schema, the description covers purpose, behavior, and parameters completely, leaving no obvious gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has no descriptions (0% coverage), so the description adds essential meaning: automation_id is the element's identifier and value must be within the element's range. Could be more explicit about obtaining automation_id.

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?

Clearly states the tool sets a numeric value on specific UI elements (slider, spinner, progress bar) via RangeValuePattern, distinguishing it from other UI interaction tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Specifies the intended elements and pattern, implying usage context. Lacks explicit when-not-to-use or alternative tools but provides sufficient guidance for appropriate selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_snapshotB
Read-only

Capture a named field-limited UI snapshot.

NameRequiredDescriptionDefault
nameNo
xpathNo
fieldsYes
root_idNo
snapshotYes
max_resultsNo
control_typeNo
automation_idNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only and deterministic. The description adds that it is 'field-limited' and 'named', but does not explain side effects like whether snapshots are stored or overwrite existing ones.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence with no redundant words. While it could benefit from slightly more detail, it is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of 8 parameters and no output schema, the description is too brief. It does not explain the purpose of many parameters, the scope of the snapshot, or how it integrates with other tools in the UI/debugging context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description partially compensates by explaining two parameters ('name' and 'fields') but leaves the other six parameters (automation_id, control_type, etc.) undocumented. This insufficiently aids an agent in using all parameters correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('capture'), resource ('UI snapshot'), and qualifiers ('named field-limited'). This distinguishes it from sibling tools like 'ui_take_screenshot' (visual screenshot) and 'create_snapshot' (likely without field filtering).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives (e.g., 'create_snapshot', 'list_snapshots'). No explicit context or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_switch_windowA
Idempotent

Retarget the UI backend at a different top-level window of the same process.

Use this to enter modal dialogs, file pickers, or popups that appear as sibling windows of the app's main window. After switching, all subsequent ui_* calls (find_element, click, send_keys, etc.) operate inside the new window's subtree.

Typical flow:

  1. ui_get_window_tree() → inspect "windows" array

  2. ui_switch_window(name="Create collection") → enter dialog

  3. ui_find_element(control_type="Edit") → locate dialog TextBox

  4. ui_send_keys_batch(keys=["Characters", "{ENTER}"]) → type + submit

  5. After dialog closes, ui_switch_window(name="Main App Title") to return to the original window

Requires the FlaUI bridge backend; the pywinauto fallback raises NotImplementedError. At least one of name or automation_id must be provided; automation_id is matched first.

Args: name: Window title (e.g., the dialog's Title/Name property) automation_id: Window's AutomationId property (if any)

Returns: {"switched": True, "title": "...", "automationId": "..."} on success

NameRequiredDescriptionDefault
nameNo
automation_idNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds significant context beyond annotations: requires FlaUI backend, raises NotImplementedError with pywinauto, describes post-dialog behavior, and explains the return value.

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?

Well-organized with clear sections (purpose, usage flow, backend note, parameters, returns), no redundant text, and essential information front-loaded.

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?

Comprehensive for a tool with 2 parameters: includes purpose, prerequisite, return format, and integration with other ui_* tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Explains the meaning of 'name' and 'automation_id' (window title and AutomationId), gives examples, and notes matching priority, compensating for 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb ('retarget') and resource ('top-level window'), and differentiates it from siblings by specifying use cases like entering modal dialogs, file pickers, or popups.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use scenarios and a typical flow, but does not explicitly state when not to use or contrast with other window-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_take_annotated_screenshotA
Read-onlyIdempotent

Take a screenshot with numbered UI elements overlaid (Set-of-Mark pattern).

Returns annotated WebP image + compact element index. Each interactive element gets a numbered label on the screenshot.

Use ui_click_annotated(element_id) to interact with elements by number.

Args: max_depth: How deep to traverse the UI tree (default 3) interactive_only: Only interactive elements (default True) max_width: Max image width (default 1024) format: Image format: "webp" (smallest), "jpeg", "png" compact: Compact element index — id+name only (default True, saves ~60KB)

NameRequiredDescriptionDefault
formatNowebp
compactNo
max_depthNo
max_widthNo
interactive_onlyNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate idempotent and read-only behavior. Description adds detail: returns WebP image with compact index, and explains compact mode saves ~60KB. No contradictions.

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?

Concise, well-structured: purpose sentence, return info, usage tip, then parameter list. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers return format and key behavioral details. No output schema, but description sufficiently describes outputs. Could mention image encoding, but not critical for selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 5 parameters are described with their effect (max_depth, interactive_only, max_width, format, compact). Schema coverage is 0%, so description compensates fully.

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?

Clearly states the tool's purpose: taking a screenshot with numbered UI elements overlaid (Set-of-Mark pattern). Distinguishes from sibling tools like ui_take_screenshot and ui_click_annotated.

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 usage context: obtain annotated screenshot, then use ui_click_annotated to interact. Does not explicitly exclude alternative tools, but the use case is well-defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_take_screenshotA
Read-onlyIdempotent

Take a screenshot of the debugged application's window.

Returns inline ImageContent (WebP at max_width resolution) directly to your vision pipeline, plus TextContent with metadata and HD file path.

Set evidence to retain a raw PNG for the active debug session. A probable-black PrintWindow raster may make one independently verified BitBlt attempt through the FlaUI bridge. Its explicit typed_bitblt_fallback evidence grade is a distinct capture authority; strict physical assertions separately validate the caller-supplied target. Crop coordinates require evidence mode and are applied to the accepted raw PNG.

Args: max_width: Maximum image width. Default 1280; max useful is 1568. format: Image format: "webp" (smallest), "jpeg", "png" evidence: Persist the raw PNG as session-scoped evidence. crop_x: Raw-image crop origin X; requires all crop arguments. crop_y: Raw-image crop origin Y; requires all crop arguments. crop_width: Raw-image crop width; requires all crop arguments. crop_height: Raw-image crop height; requires all crop arguments. expected_hwnd: Require this HWND and physical raster size before persisting evidence. expected_physical_width: Required raw raster width in physical pixels with expected_hwnd. expected_physical_height: Required raw raster height in physical pixels with expected_hwnd.

NameRequiredDescriptionDefault
crop_xNo
crop_yNo
formatNowebp
evidenceNo
max_widthNo
crop_widthNo
crop_heightNo
expected_hwndNo
expected_physical_widthNo
expected_physical_heightNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only cover read-only/idempotent/local; the description adds substantial behavior: dual return channels (vision-pipeline image + text metadata), the PrintWindow-to-BitBlt fallback via the FlaUI bridge with its distinct typed_bitblt_fallback evidence grade, hwnd/physical-size validation before persisting, and the evidence-mode gating of crops. None of this is derivable from 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The Args block is clean and front-loading is good (purpose first), but the middle paragraph is dense, jargon-heavy prose ('distinct capture authority', 'physical assertions separately validate the caller-supplied target') that is hard to parse. Size is defensible for 10 parameters, but the wording does not earn every sentence.

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 10-parameter tool with no output schema and zero schema coverage, the description reasonably covers inputs, return channels, and evidence/crop/hwnd constraints. It leaves the annotated-screenshot alternative and exact failure conditions unaddressed, which is a modest gap rather than a blocking one.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage the description must carry all 10 parameters, and it largely does, documenting purpose, defaults, and coupling constraints ('requires all crop arguments', 'required raw raster width with expected_hwnd'). One flaw: it claims max_width 'Default 1280' while the schema default is 1568, a subtle inconsistency that undercuts the parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: taking a screenshot of the debugged application's window, plus what it returns (inline WebP ImageContent and TextContent metadata). However, it never distinguishes itself from the sibling ui_take_annotated_screenshot, so the agent must infer which capture tool to use.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives conditional guidance for parameters ('crop coordinates require evidence mode', 'expected_hwnd requires physical size'), which is useful. But there is no when-to-use / when-not-to-use guidance relative to the many sibling capture and UI-inspection tools, so tool selection is left implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_textC

Read or safely replace bounded TextBox/text evidence.

NameRequiredDescriptionDefault
nameNo
textNo
xpathNo
actionYes
root_idNo
control_typeNo
automation_idNo
selection_endNo
selection_startNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions 'safely' but doesn't explain what that entails. No details on boundary behavior, permissions, or side effects. Annotations only provide openWorldHint: false, so description carries the burden but fails to disclose behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one sentence), which is concise but at the cost of necessary detail. It could be restructured to front-load the purpose and include more context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 9 parameters and no output schema, the description is inadequate. It does not explain how to identify the target textbox, what action values are valid, or what 'safe replace' means. The tool's complexity requires more detailed guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%. Description only hints at action parameter values (read/replace) but doesn't clarify other 8 parameters like automation_id, xpath, selection_start, etc. No parameter descriptions are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states it reads or safely replaces text in a bounded TextBox, which is specific. However, it doesn't fully distinguish from sibling tools like ui_read_text and ui_set_value, which may have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives like ui_read_text or ui_set_value. No context on selecting between read and replace actions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_toggleA

Toggle a CheckBox or ToggleButton using UIA TogglePattern.

Returns the new toggle state after the operation: "On", "Off", or "Indeterminate". Use this instead of ui_click for checkboxes to get reliable state feedback.

Note: If app is STOPPED at breakpoint, resume with continue_execution() first.

Args: automation_id: AutomationId property name: Element's Name/Title property control_type: Control type (CheckBox, ToggleButton, etc.) root_id: Optional AutomationId to scope search to a subtree xpath: Optional XPath expression (FlaUI backend only)

NameRequiredDescriptionDefault
nameNo
xpathNo
root_idNo
control_typeNo
automation_idNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses use of TogglePattern, return values (On/Off/Indeterminate), and the need to resume execution if app is stopped. Annotations are minimal (only openWorldHint), so description adds value. No contradictions. Could elaborate on side effects or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is well-structured with clear sections: purpose, return value, usage tip, and parameter list. Each sentence serves a purpose. No redundancy. Front-loaded with essential info.

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?

Covers main functionality, return value, and a critical usage note (breakpoint state). Lacks information on error handling, what happens if element not found, or parameter combination rules. Output schema absent but return value is explained. Good for a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has no parameter descriptions (0% coverage). Description provides one-line explanations for each parameter (e.g., 'AutomationId property', 'Optional XPath expression'). This adds basic meaning but lacks detail on formats, examples, or interrelationships. Adequate compensation for low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it toggles CheckBox/ToggleButton using UIA TogglePattern and returns new state. It distinguishes itself from sibling ui_click for checkboxes, providing specific verb+resource and differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises using this over ui_click for checkboxes for reliable state feedback. Also notes prerequisite to resume execution if app is stopped. Could mention other alternatives like ui_invoke, but guidance is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ui_wait_forA
Read-onlyIdempotent

Wait for a UI element to appear within timeout.

Polls every 500ms until the element is found or timeout expires. Useful for waiting for dialogs, popups, or dynamically created elements.

Args: automation_id: AutomationId to wait for name: Element name to wait for control_type: Control type to wait for timeout: Maximum wait time in seconds (default 5) root_id: Optional AutomationId to scope search to a subtree xpath: Optional XPath expression (FlaUI backend only)

NameRequiredDescriptionDefault
nameNo
xpathNo
root_idNo
timeoutNo
control_typeNo
automation_idNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint and idempotentHint, and the description confirms polling behavior and timeout, adding useful detail without contradiction. The description enhances transparency by explaining the polling interval.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose and polling details, followed by a clean bullet list of parameters. Every sentence adds value, and there is no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, use cases, and parameters, but fails to explain return values or behavior on timeout (e.g., returns null or raises error). Given the lack of output schema, this gap reduces completeness. Overall adequate but missing critical details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description provides brief parameter descriptions. However, most are just repeating parameter names (e.g., 'automation_id: AutomationId to wait for'), adding little meaning. Timeout gets a default value note, and xpath notes backend limitation. This is adequate but not enriching.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool waits for a UI element within a timeout, with polling behavior. It distinguishes from siblings like ui_find_element by focusing on waiting rather than immediate search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit use cases ('dialog, popups, or dynamically created elements'), but does not specify when not to use or mention alternatives like ui_find_element. Still, the guidance is clear and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

verify_debug_freshnessC
Read-only

Verify that the debug session matches expected runtime evidence.

NameRequiredDescriptionDefault
expected_modulesNo
expected_sourcesNo
expected_artifactsNo
expected_workspaceNo
expected_process_idNo
expected_process_nameNo
require_active_processNo

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While the readOnlyHint annotation correctly signals a read-only operation, the description adds no behavioral context beyond that. It does not explain what 'verify' entails (e.g., checks specific fields, possible outcomes), nor does it disclose any side effects or requirements. With annotations present, the description fails to provide additional value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, achieving high conciseness with no redundant words. It is front-loaded and easy to parse. However, the extreme brevity sacrifices meaningful information, which prevents a perfect score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters, all optional, and no output schema, the description is notably incomplete. It does not explain the verification process, expected return values, error conditions, or the meaning of 'freshness'. The agent will struggle to use this tool correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description provides no information about the 7 parameters, despite the input schema having 0% description coverage. Although the schema titles hint at meaning (e.g., 'Expected Process Id'), the description does not clarify how these parameters are used or their relationships. This forces the agent to rely solely on schema titles, which may be insufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: verifying that a debug session matches expected runtime evidence. It uses a specific verb (verify) and resource (debug session freshness). However, it does not differentiate itself from sibling tools like 'debug_hygiene_preflight' or 'run_runtime_smoke' which might have overlapping functions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description does not specify prerequisites, scenarios, or exclusions. It leaves the agent to infer usage context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_memoryA
Destructive

Write base64-encoded bytes to a debugger memoryReference.

DESTRUCTIVE: this mutates debuggee memory and can corrupt process state. Capability-gated: current netcoredbg builds usually return an unsupported error unless they advertise supportsWriteMemoryRequest.

Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.

Args: memory_reference: DAP memoryReference from a variable or stack frame data: Base64-encoded bytes to write offset: Byte offset from the memory reference allow_partial: Let the adapter perform a partial write if needed

NameRequiredDescriptionDefault
dataYes
offsetNo
allow_partialNo
memory_referenceYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations set destructiveHint=true, and the description adds context about corrupting process state and capability restrictions, enhancing transparency beyond 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 lean and well-structured, front-loading the action, followed by critical warnings and parameter details, with no unnecessary sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description covers essential behavioral and parameter context, but could hint at typical use cases or failure modes for completeness.

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 0% schema coverage, the description compensates by detailing each parameter's source and role, e.g., 'DAP memoryReference from a variable or stack frame' and 'Byte offset from the memory reference.'

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 'Write base64-encoded bytes to a debugger memoryReference,' specifying the verb and resource distinctly from siblings like read_memory.

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?

Explicit warnings about destructiveness, capability gating, and an escape hatch alternative provide clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.23.8
    • Changedui_take_screenshot3 fields changed
      • addedInput schema / properties / expected_hwnd
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Expected Hwnd"
        +}
      • addedInput schema / properties / expected_physical_height
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Expected Physical Height"
        +}
      • addedInput schema / properties / expected_physical_width
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Expected Physical Width"
        +}
  2. 1 tool updatev0.23.6
    • Changedui_take_screenshot5 fields changed
      • addedInput schema / properties / crop_height
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Crop Height"
        +}
      • addedInput schema / properties / crop_width
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Crop Width"
        +}
      • addedInput schema / properties / crop_x
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Crop X"
        +}
      • addedInput schema / properties / crop_y
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Crop Y"
        +}
      • addedInput schema / properties / evidence
        Added value: +{
        +  "default": false,
        +  "title": "Evidence",
        +  "type": "boolean"
        +}
  3. 3 tool updatesv0.23.0
    • Addeddebuggee_activity
    • Addedinspect_debug_launch_compatibility
    • Addedui_hover
  4. 1 tool updatev0.22.0
    • Addedremove_function_breakpoint
  5. 1 tool updatev0.19.0
    • Changedruntime_smoke_mark_event_cursor3 fields changed
      • addedInput schema / properties / include_app_diagnostics
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Include App Diagnostics"
        +}
      • addedInput schema / properties / include_debug_output
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Include Debug Output"
        +}
      • addedInput schema / properties / include_trace_source
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Include Trace Source"
        +}
  6. 1 tool updatev0.18.8
    • Changedui_grid1 field changed
      • addedInput schema / properties / ensure_visible
        Added value: +{
        +  "default": false,
        +  "title": "Ensure Visible",
        +  "type": "boolean"
        +}
  7. 1 tool updatev0.18.5
    • Changedui_grid3 fields changed
      • addedInput schema / properties / expect
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Expect"
        +}
      • addedInput schema / properties / phase
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Phase"
        +}
      • addedInput schema / properties / probe_name
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Probe Name"
        +}
  8. 23 tool updatesv0.18.1
    • Addedget_trace_delta
    • Addedmark_trace_cursor
    • Addedruntime_smoke_cleanup_contract
    • Addedruntime_smoke_evidence_bundle
    • Addedruntime_smoke_get_event_delta
    • Addedruntime_smoke_get_result
    • Addedruntime_smoke_mark_event_cursor
    • Addedruntime_smoke_run_plan
    • Addedruntime_smoke_run_probe
    • Addedruntime_smoke_start
    • Addedruntime_smoke_stop
    • Addedruntime_smoke_tail_events
    • Addedruntime_smoke_validate_plan
    • Addedruntime_smoke_validate_probe
    • Addedruntime_smoke_wait_for_result
    • Addedui_focus
    • Changedui_grid8 fields changed
      • addedInput schema / properties / column
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Column"
        +}
      • addedInput schema / properties / columns
        Added value: +{
        +  "anyOf": [
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Columns"
        +}
      • addedInput schema / properties / identity
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Identity"
        +}
      • addedInput schema / properties / max_scrolls
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Max Scrolls"
        +}
      • addedInput schema / properties / row_index
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Row Index"
        +}
      • addedInput schema / properties / row_key
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Row Key"
        +}
      • addedInput schema / properties / rows
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": true,
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Rows"
        +}
      • addedInput schema / properties / scroll_settle_ms
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "integer"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "title": "Scroll Settle Ms"
        +}
    • Addedui_monitor_events
    • Addedui_monitor_poll
    • Addedui_monitor_start
    • Addedui_monitor_wait
    • Addedui_property
    • Addedui_text
  9. 109 tool updatesv0.17.2
    • First observedadd_breakpoint
    • First observedadd_function_breakpoint
    • First observedadd_tracepoint
    • First observedanalyze_collection
    • First observedapply_code_change
    • First observedattach_debug
    • First observedcleanup_processes
    • First observedclear_breakpoints
    • First observedclear_trace_log
    • First observedconfigure_exceptions
    • First observedcontinue_execution
    • First observedcreate_snapshot
    • First observeddebug_hygiene_preflight
    • First observeddiff_snapshots
    • First observeddisassemble
    • First observedevaluate_expression
    • First observedfind_code_references
    • First observedfind_code_symbol
    • First observedget_build_diagnostics
    • First observedget_call_stack
    • First observedget_debug_state
    • First observedget_exception_context
    • First observedget_exception_info
    • First observedget_loaded_sources
    • First observedget_locations
    • First observedget_modules
    • First observedget_output
    • First observedget_output_tail
    • First observedget_progress
    • First observedget_scopes
    • First observedget_source_context
    • First observedget_step_in_targets
    • First observedget_stop_context
    • First observedget_threads
    • First observedget_trace_log
    • First observedget_variables
    • First observedinstrumentation_group_clear
    • First observedinstrumentation_group_create
    • First observedinstrumentation_group_inspect
    • First observedlist_breakpoints
    • First observedlist_snapshots
    • First observedoutput_assert_since
    • First observedoutput_checkpoint
    • First observedpause_execution
    • First observedquick_evaluate
    • First observedread_memory
    • First observedremove_breakpoint
    • First observedremove_tracepoint
    • First observedrestart_debug
    • First observedrun_runtime_smoke
    • First observedsearch_output
    • First observedsearch_source
    • First observedset_variable
    • First observedstart_debug
    • First observedstep_into
    • First observedstep_out
    • First observedstep_over
    • First observedstop_debug
    • First observedsummarize_object
    • First observedterminate_debug
    • First observedui_bring_to_front
    • First observedui_click
    • First observedui_click_annotated
    • First observedui_click_at
    • First observedui_clipboard_read
    • First observedui_clipboard_write
    • First observedui_close_window
    • First observedui_collapse
    • First observedui_diff
    • First observedui_double_click
    • First observedui_drag
    • First observedui_events
    • First observedui_expand
    • First observedui_file_dialog
    • First observedui_find_element
    • First observedui_get_focused_element
    • First observedui_get_held_modifiers
    • First observedui_get_selected_item
    • First observedui_get_window_tree
    • First observedui_grid
    • First observedui_hold_modifiers
    • First observedui_invoke
    • First observedui_key_sequence
    • First observedui_maximize_window
    • First observedui_minimize_window
    • First observedui_move_window
    • First observedui_query
    • First observedui_read_text
    • First observedui_realize_virtualized_item
    • First observedui_release_modifiers
    • First observedui_resize_window
    • First observedui_restore_window
    • First observedui_right_click
    • First observedui_scroll
    • First observedui_select_items
    • First observedui_send_keys
    • First observedui_send_keys_batch
    • First observedui_send_keys_focused
    • First observedui_send_system_event
    • First observedui_set_focus
    • First observedui_set_value
    • First observedui_snapshot
    • First observedui_switch_window
    • First observedui_take_annotated_screenshot
    • First observedui_take_screenshot
    • First observedui_toggle
    • First observedui_wait_for
    • First observedverify_debug_freshness
    • First observedwrite_memory

TDQS

B3.1/5.0

Scored across 135 tools

Disambiguation2/5

Several large clusters of overlapping tools make selection difficult: ~14 runtime_smoke_* tools (run_runtime_smoke, runtime_smoke_run_plan, runtime_smoke_run_probe, runtime_smoke_start, runtime_smoke_get_result, runtime_smoke_evidence_bundle, etc.) are near-indistinguishable, and UI reading is split across ui_read_text, ui_text, ui_query, ui_property, and ui_focus vs ui_get_focused_element. evaluate_expression vs quick_evaluate and get_exception_info vs get_exception_context are also easy to confuse despite the state-based hints.

Naming Consistency3/5

All names are snake_case, but conventions mix: verb-first (add_breakpoint, get_call_stack), domain-prefixed (ui_click, runtime_smoke_start), and standalone verbs (disassemble, continue_execution, step_over). Readable but not a single predictable pattern.

Tool Count1/5

135 tools is an extreme mismatch for any single MCP server, even a debugger with UI automation bolted on. Many tools (runtime_smoke_*, ui_monitor_*, ui_snapshot/ui_diff) are redundant or niche, bloating the surface and hurting agent selection.

Completeness5/5

Coverage is exceptionally broad: debug lifecycle, all breakpoint/tracepoint types, variables/scopes/memory, exceptions, snapshots, source search and Edit-and-Continue, plus extensive UI automation and smoke verification. No obvious domain gaps; if anything, coverage exceeds need.

Maintenance

ActivityActive
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI agents to perform step-through debugging of Python, JavaScript/Node.js, and Rust programs using the Debug Adapter Protocol, with support for breakpoints, variable inspection, and stack traces.
    29
    186
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Enables AI agents to debug code and automate browsers using Chrome DevTools Protocol, supporting breakpoints, variable inspection, and replayable interaction recording.
    35
    3,254 npm
    19
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to debug code inside VS Code by setting breakpoints, stepping through execution, inspecting variables, and evaluating expressions across multiple languages.
    580
    MIT
  • A
    license
    B
    quality
    A
    maintenance
    Inspect and automate WPF apps with 38 MCP tools, a CLI and a C# SDK. C# tests support launch/attach, AutomationIds, virtualized grids/trees, automatic waits, exact selection, WPF dialogs and property notifications. Includes mouse/touch input, binding diagnostics, screenshots, recording/replay and xUnit export. Supports .NET Framework 4.7.2/4.8/4.8.1 and .NET 8/9/10 WPF.
    38
    21
    MIT