netcoredbg-mcp
The netcoredbg-mcp server gives AI coding agents a full-featured .NET debugger and Windows UI automation suite via the Model Context Protocol (MCP), covering ~130 tools across debugging, inspection, UI automation, and runtime smoke testing.
Debug Control
Launch or attach to .NET processes; auto-build before launch
Control execution: continue, pause, step over/into/out, restart, stop, terminate
Long-poll pattern: execution tools block until a meaningful debugger event occurs
Breakpoints & Exceptions
Line breakpoints with optional conditions and hit counts
Function breakpoints by method name
Exception filters (all, user-unhandled, none)
List, remove, and clear breakpoints
Code Inspection
Inspect threads, call stacks, scopes, and local variables
Evaluate expressions in the current debug context;
quick_evaluatefor atomic pause-eval-resume while runningSet variable values at runtime
Get exception info (type, message, inner chain, locals) and full stop context in one call
List loaded modules and source files; disassemble instructions; resolve DAP location references
Tracepoints
Non-stopping tracepoints that log expression values on each hit
Read, filter, and clear the trace log
Snapshots & Object Analysis
Capture named snapshots of local variables; diff two snapshots
Analyze collections (count, nulls, min/max/avg, samples)
Summarize complex objects with flattened dot-notation paths and circular reference detection
Memory
Read raw memory from debugger memory references
Write bytes to debugger memory references (capability-gated)
Output & Build Diagnostics
Read, search (regex), and tail stdout/stderr from the debugged process
Get full build diagnostics including warnings
Runtime Smoke Testing
Hygiene preflight: clear stale debugger state before a run
Named instrumentation groups of breakpoints/tracepoints as smoke evidence
Output checkpoints and assertions (required/forbidden patterns since a checkpoint)
Verify debug session freshness (workspace, process, modules, artifacts)
Run bounded one-shot smoke scenario plans; durable lifecycle for longer runs
Windows UI Automation (WPF, WinForms, Avalonia) — 46 tools
Get full UI element tree; find elements by AutomationId, name, control type, or XPath
Click, double-click, right-click, invoke, toggle elements; click at screen coordinates
Send keyboard input with modifier support (Ctrl, Alt, Shift); batch key sequences
Drag and drop between elements or coordinates
Take plain or annotated screenshots (Set-of-Mark numbered labels for agent vision)
Select list/grid items; read text from elements; set focus; wait for elements (polling)
Window management: bring to front, switch, close, maximize, minimize, restore, move, resize
Expand/collapse tree nodes and dropdowns; set numeric values on sliders/spinners
Clipboard read/write; realize virtualized off-screen list items
WPF DataGrid: read, select, assert rows; complete file Open/Save dialogs in one call
Stealth mode: operate without stealing foreground focus
Code Search
Find symbols and references in the project
Get source context around a line; full-text search across source files
Edit-and-Continue
Apply live method-body edits to a stopped session without restarting (requires EnC-capable netcoredbg; rude edits rejected)
Multi-Agent Safety
Exclusive session ownership for debug control; other agents observe read-only
Inactivity-based ownership auto-release
Prompts & Resources
8 purpose-built prompts (general debugging, GUI debugging, exception investigation, visual workflows, etc.)
4 resources:
debug://state,debug://breakpoints,debug://output,debug://threads
Note: Windows is required for UI automation. Prefer
start_debugoverattach_debugdue to upstreamjustMyCodelimitations in attach mode. Only inspect variables when the app is stopped.
Provides debugging capabilities for .NET applications, including launching, attaching, setting breakpoints, stepping through code, inspecting variables, evaluating expressions, and GUI automation for WPF, WinForms, and Avalonia.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@netcoredbg-mcpSet a breakpoint in Program.cs, run the app, and inspect local variables when it stops."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
netcoredbg-mcp
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 |
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 |
|
Request errors | Within the valid JSON-RPC request boundary in specs018, required metadata errors retain the original ID and |
|
Capabilities and tools | Tools-only with | Discovery/catalog/value scenarios and the fixed advertised schemas; full nested client-capability conformance is not claimed. |
Filesystem authority | Only launch-pinned | 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/ | 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-cwdRestart 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) orpipto install the package.A .NET SDK/runtime suitable for the application being debugged.
netcoredbg. The setup wizard can download or discover it and scans compatibledbgshim.dllfiles.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
netcoredbgcapabilities.
Install and configure
Recommended installation
pipx keeps the command-line server isolated from project environments:
pipx install netcoredbg-mcp
netcoredbg-mcp --setup
netcoredbg-mcp --versionThe 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\MyDotNetAppRun 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:
Add a breakpoint in the code path of interest.
Call
start_debugwith the program and, when appropriate,pre_build=true.Wait for
state=stopped.Read
get_call_stack,get_scopes, andget_variables.Evaluate or step only while stopped.
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 |
|
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 |
|
Process management | 1 |
|
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 |
| Print the installed package version. |
| Provision or discover debugger prerequisites, then print a client configuration snippet. |
| Install the default prebuilt Edit-and-Continue debugger with |
| Set the default project root for path resolution and source search. |
| 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 |
| Explicit path to |
| Authoritative project-root fallback. |
| Explicit FlaUI bridge executable path. |
| Inline preview dimensions and WebP quality. |
| Multi-agent ownership inactivity timeout. |
| 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.
netcoredbgand 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 toolsadd_breakpointAIdempotent
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
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes | ||
| condition | No | ||
| hit_condition | No |
TDQS
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.
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.
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.
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.
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.
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_breakpointAIdempotent
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
| Name | Required | Description | Default |
|---|---|---|---|
| condition | No | ||
| function_name | Yes | ||
| hit_condition | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes | ||
| expression | Yes |
TDQS
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.
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.
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.
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.
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.
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_collectionARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
| sample_size | No | ||
| variables_reference | Yes |
TDQS
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.
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.
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.
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.
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.
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_changeBDestructive
Apply source edits to a stopped debug session using Edit-and-Continue.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| edits | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| process_id | Yes |
TDQS
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.
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.
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.
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.
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.
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_processesADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No |
TDQS
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.
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.
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.
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.
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.
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_breakpointsADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_exceptionsAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| filters | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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_activityCRead-onlyIdempotent
Observe adapter-owned debuggee activity during one bounded window.
| Name | Required | Description | Default |
|---|---|---|---|
| window_ms | No |
TDQS
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.
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.
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.
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.
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.
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_preflightADestructive
Clear stale debugger state and report a compact hygiene result.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | ||
| clear_trace_log | No | ||
| clear_breakpoints | No | ||
| clear_exception_filters | No |
TDQS
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.
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.
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.
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.
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.
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_snapshotsARead-onlyIdempotent
Compare two snapshots and show variable differences.
Args: name1: First snapshot name (before state) name2: Second snapshot name (after state)
| Name | Required | Description | Default |
|---|---|---|---|
| name1 | Yes | ||
| name2 | Yes |
TDQS
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.
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.
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.
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.
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.
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.
disassembleBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| resolve_symbols | No | ||
| memory_reference | Yes | ||
| instruction_count | No | ||
| instruction_offset | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| frame_id | No | ||
| expression | Yes |
TDQS
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.
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.
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.
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.
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.
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_referencesBRead-onlyIdempotent
Find literal symbol references across project files.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_symbolARead-onlyIdempotent
Find a C# symbol definition by name and optional kind.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_diagnosticsARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
| include_warnings | No |
TDQS
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.
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.
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.
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.
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.
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_stackARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| levels | No | ||
| thread_id | No |
TDQS
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.
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.
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.
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.
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.
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_stateARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_contextARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| max_frames | No | ||
| max_inner_exceptions | No | ||
| include_variables_for_frames | No |
TDQS
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.
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.
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.
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.
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.
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_infoBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | No |
TDQS
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.
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.
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.
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.
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.
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_sourcesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_locationsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| location_reference | Yes |
TDQS
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.
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.
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.
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.
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.
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_modulesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | ||
| category | No |
TDQS
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.
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.
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.
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.
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.
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_tailARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
| lines | No | ||
| category | No |
TDQS
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.
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.
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.
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.
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.
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_progressARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_scopesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| frame_id | No |
TDQS
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.
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.
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.
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.
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.
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_contextBRead-onlyIdempotent
Read source lines around a project-scoped location.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes | ||
| radius | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_targetsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| frame_id | No |
TDQS
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.
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.
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.
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.
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.
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_contextARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| include_variables | No | ||
| include_output_tail | No |
TDQS
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.
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.
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.
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.
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.
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_threadsARead-onlyIdempotent
Get all threads in the debugged process.
Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_deltaARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | Yes | ||
| tracepoint_id | No |
TDQS
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.
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.
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.
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.
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.
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_logARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | ||
| tracepoint_id | No |
TDQS
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.
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.
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.
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.
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.
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_variablesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| start | No | ||
| filter | No | ||
| variables_reference | Yes |
TDQS
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.
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.
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.
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.
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.
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_compatibilityARead-onlyIdempotent
Inspect target/dbgshim compatibility without building or launching.
| Name | Required | Description | Default |
|---|---|---|---|
| program | Yes |
TDQS
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.
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.
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.
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.
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.
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_clearCDestructive
Remove a named instrumentation group with leak detection.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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_createBDestructive
Create a named breakpoint/tracepoint group for smoke evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| breakpoints | No | ||
| tracepoints | No |
TDQS
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.
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.
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.
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.
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.
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_inspectCRead-only
Inspect grouped breakpoint hits and trace logs.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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_breakpointsARead-onlyIdempotent
List breakpoints (line + function). Per-file filter scopes only line bps.
Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No |
TDQS
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.
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.
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.
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.
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.
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_snapshotsARead-onlyIdempotent
List all captured snapshots with metadata.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_cursorARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| tracepoint_id | No |
TDQS
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.
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.
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.
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.
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.
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_sinceBRead-only
Assert required and forbidden output patterns since a checkpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| regex | No | ||
| required | No | ||
| forbidden | No | ||
| checkpoint | Yes | ||
| max_matches | No |
TDQS
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.
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.
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.
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.
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.
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_checkpointBIdempotent
Mark the current output buffer position for later assertions.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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_executionAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | No |
TDQS
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.
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.
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.
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.
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.
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_evaluateAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| frame_id | No | ||
| expression | Yes |
TDQS
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.
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.
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.
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.
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.
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_memoryARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| offset | No | ||
| memory_reference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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_breakpointBIdempotent
Remove a breakpoint from a specific line.
Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | ||
| line | Yes |
TDQS
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.
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.
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.
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.
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.
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_breakpointAIdempotent
Remove function breakpoint by name (exact match used at add time).
Args: function_name: Name passed to add_function_breakpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| function_name | Yes |
TDQS
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.
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.
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.
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.
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.
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")
| Name | Required | Description | Default |
|---|---|---|---|
| tracepoint_id | Yes |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| rebuild | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes |
TDQS
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.
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.
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.
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.
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.
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_contractADestructiveIdempotent
Clear runtime-smoke contamination after failed or timed-out cleanup.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_bundleCRead-only
Return a compact evidence packet for a durable runtime smoke run.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| agent_mode | No | ||
| event_limit | No | ||
| after_cursor | No |
TDQS
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.
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.
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.
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.
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.
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_deltaCRead-only
Return bounded lifecycle events after a cursor token.
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | Yes | ||
| agent_mode | No | ||
| event_limit | No |
TDQS
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.
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.
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.
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.
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.
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_resultBRead-only
Return the final runtime smoke envelope when a durable run completes.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
TDQS
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.
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.
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.
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.
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.
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_cursorBRead-only
Return a compact cursor token for the current durable run event position.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| agent_mode | No | ||
| include_debug_output | No | ||
| include_trace_source | No | ||
| include_app_diagnostics | No |
TDQS
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.
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.
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.
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.
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.
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_planCDestructive
Validate then start a durable runtime smoke run.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | No | ||
| plan_path | No | ||
| agent_mode | No |
TDQS
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.
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.
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.
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.
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.
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_probeCDestructive
Validate then start a durable runtime-smoke v2 run for one probe.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| phase | No | after | |
| probe | Yes | ||
| budgets | No | ||
| agent_mode | No | ||
| debug_preflight | No | ||
| tracepoint_guard | No |
TDQS
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.
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.
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.
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.
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.
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_startBDestructive
Start a durable runtime smoke run and return a run id.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes |
TDQS
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.
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.
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.
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.
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.
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_stopCDestructiveIdempotent
Idempotently stop a durable runtime smoke run and return cleanup evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes |
TDQS
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.
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.
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.
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.
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.
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_eventsCRead-only
Tail bounded lifecycle events for a durable runtime smoke run.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| run_id | Yes | ||
| after_cursor | No |
TDQS
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.
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.
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.
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.
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.
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_planARead-only
Validate a runtime-smoke plan without launching or touching a target app.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | No | ||
| plan_path | No |
TDQS
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.
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.
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.
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.
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.
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_probeCRead-only
Validate one generated probe plan and return agent-mode run guidance.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| phase | No | after | |
| probe | Yes | ||
| budgets | No | ||
| agent_mode | No | ||
| debug_preflight | No | ||
| tracepoint_guard | No |
TDQS
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.
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.
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.
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.
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.
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_resultCRead-only
Wait for a durable runtime smoke run and return compact evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| run_id | Yes | ||
| agent_mode | No | ||
| timeout_ms | No | ||
| event_limit | No | ||
| after_cursor | No | ||
| poll_interval_ms | No |
TDQS
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.
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.
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.
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.
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.
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_outputARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | ||
| category | No | ||
| context_lines | No |
TDQS
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.
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.
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.
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.
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.
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_sourceCRead-onlyIdempotent
Run a bounded regex search across project source files.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | ||
| file_glob | No | ||
| max_results | No | ||
| timeout_seconds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| value | Yes | ||
| variables_reference | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | ||
| env | No | ||
| args | No | ||
| program | Yes | ||
| pre_build | No | ||
| stealth_mode | No | ||
| build_project | No | ||
| stop_at_entry | No | ||
| launch_profile | No | ||
| build_configuration | No | Debug |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_id | No | ||
| thread_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| thread_id | No |
TDQS
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.
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.
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.
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.
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.
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_debugBDestructive
Stop the current debug session.
Escape hatch: see the dap-escape-hatch prompt for unwrapped DAP requests.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_objectARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
| max_depth | No | ||
| max_properties | No | ||
| variables_reference | Yes |
TDQS
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.
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.
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.
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.
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.
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_debugADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| element_id | Yes | ||
| generation | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes |
TDQS
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.
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.
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.
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.
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.
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_readARead-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}.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| window_title | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| automation_id | Yes |
TDQS
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.
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.
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.
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.
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.
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_diffCRead-only
Diff two named UI snapshots.
| Name | Required | Description | Default |
|---|---|---|---|
| after | Yes | ||
| before | Yes | ||
| fields | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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:
By AutomationId: from_automation_id + to_automation_id (uses cached rectangles)
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to_x | No | ||
| to_y | No | ||
| from_x | No | ||
| from_y | No | ||
| speed_ms | No | ||
| hold_modifiers | No | ||
| to_automation_id | No | ||
| from_automation_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| action | Yes | ||
| fields | No | ||
| root_id | No | ||
| buffer_id | Yes | ||
| max_events | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| automation_id | Yes |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| accept_button | No | Open |
TDQS
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.
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.
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.
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.
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.
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_elementARead-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
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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_focusARead-only
Read bounded focus evidence for a selector without moving focus.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| action | Yes | ||
| root_id | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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_elementARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_modifiersARead-onlyIdempotent
Inspect currently held modifiers.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_itemARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
| xpath | No | ||
| root_id | No | ||
| automation_id | Yes |
TDQS
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.
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.
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.
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.
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.
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_treeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| max_depth | No | ||
| max_children | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| rows | No | ||
| phase | No | ||
| xpath | No | ||
| action | Yes | ||
| column | No | ||
| expect | No | ||
| columns | No | ||
| root_id | No | ||
| row_key | No | ||
| identity | No | ||
| end_index | No | ||
| row_index | No | ||
| probe_name | No | ||
| max_scrolls | No | ||
| start_index | No | ||
| control_type | No | ||
| automation_id | No | ||
| ensure_visible | No | ||
| scroll_settle_ms | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| modifiers | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| timeout_ms | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | ||
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| modifiers | Yes | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| window_title | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| window_title | No |
TDQS
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.
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.
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.
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.
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.
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_eventsCRead-only
Return retained semantic UI monitor history without polling.
| Name | Required | Description | Default |
|---|---|---|---|
| monitor_id | Yes | ||
| after_cursor | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| monitor_id | Yes | ||
| after_cursor | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| fields | No | ||
| root_id | No | ||
| max_events | No | ||
| monitor_id | Yes | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| monitor_id | Yes | ||
| timeout_ms | No | ||
| after_cursor | No | ||
| poll_interval_ms | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | ||
| y | Yes | ||
| window_title | No |
TDQS
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.
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.
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.
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.
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.
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_propertyCRead-only
Read bounded UI property evidence without mutation side effects.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| action | Yes | ||
| root_id | No | ||
| property | No | ||
| control_type | No | ||
| automation_id | No | ||
| property_name | No |
TDQS
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.
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.
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.
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.
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.
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_queryBRead-only
Read selected UI fields without dumping the full tree.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| fields | Yes | ||
| root_id | No | ||
| max_results | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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_textARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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_itemAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| prop_name | Yes | ||
| container_automation_id | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| modifiers | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| width | Yes | ||
| height | Yes | ||
| window_title | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| window_title | No |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No | ||
| direction | No | down | |
| automation_id | Yes |
TDQS
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.
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.
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.
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.
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.
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):
UIA SelectionItemPattern — works for non-virtualized lists
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)
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | replace | |
| indices | Yes | ||
| automation_id | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | ||
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | ||
| delay_ms | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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:
ui_set_focus(automation_id="MyElement") # Focus the element
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)
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | toggle | |
| event | Yes |
TDQS
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.
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.
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.
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.
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.
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_focusAIdempotent
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)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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].
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | ||
| automation_id | Yes |
TDQS
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.
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.
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.
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.
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.
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_snapshotBRead-only
Capture a named field-limited UI snapshot.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| fields | Yes | ||
| root_id | No | ||
| snapshot | Yes | ||
| max_results | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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_windowAIdempotent
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:
ui_get_window_tree() → inspect "windows" array
ui_switch_window(name="Create collection") → enter dialog
ui_find_element(control_type="Edit") → locate dialog TextBox
ui_send_keys_batch(keys=["Characters", "{ENTER}"]) → type + submit
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
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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_screenshotARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | webp | |
| compact | No | ||
| max_depth | No | ||
| max_width | No | ||
| interactive_only | No |
TDQS
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.
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.
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.
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.
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.
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_screenshotARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| crop_x | No | ||
| crop_y | No | ||
| format | No | webp | |
| evidence | No | ||
| max_width | No | ||
| crop_width | No | ||
| crop_height | No | ||
| expected_hwnd | No | ||
| expected_physical_width | No | ||
| expected_physical_height | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| text | No | ||
| xpath | No | ||
| action | Yes | ||
| root_id | No | ||
| control_type | No | ||
| automation_id | No | ||
| selection_end | No | ||
| selection_start | No |
TDQS
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.
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.
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.
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.
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.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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_forARead-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)
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| xpath | No | ||
| root_id | No | ||
| timeout | No | ||
| control_type | No | ||
| automation_id | No |
TDQS
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.
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.
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.
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.
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.
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_freshnessCRead-only
Verify that the debug session matches expected runtime evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| expected_modules | No | ||
| expected_sources | No | ||
| expected_artifacts | No | ||
| expected_workspace | No | ||
| expected_process_id | No | ||
| expected_process_name | No | ||
| require_active_process | No |
TDQS
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.
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.
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.
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.
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.
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_memoryADestructive
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
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | ||
| offset | No | ||
| allow_partial | No | ||
| memory_reference | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 tool update
v0.23.8- Changed
ui_take_screenshot3 fields changed- added
Input schema / properties / expected_hwndAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Expected Hwnd" +} - added
Input schema / properties / expected_physical_heightAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Expected Physical Height" +} - added
Input schema / properties / expected_physical_widthAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Expected Physical Width" +}
1 tool update
v0.23.6- Changed
ui_take_screenshot5 fields changed- added
Input schema / properties / crop_heightAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Crop Height" +} - added
Input schema / properties / crop_widthAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Crop Width" +} - added
Input schema / properties / crop_xAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Crop X" +} - added
Input schema / properties / crop_yAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Crop Y" +} - added
Input schema / properties / evidenceAdded value: +{ + "default": false, + "title": "Evidence", + "type": "boolean" +}
3 tool updates
v0.23.0- Added
debuggee_activity - Added
inspect_debug_launch_compatibility - Added
ui_hover
1 tool update
v0.22.0- Added
remove_function_breakpoint
1 tool update
v0.19.0- Changed
runtime_smoke_mark_event_cursor3 fields changed- added
Input schema / properties / include_app_diagnosticsAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Include App Diagnostics" +} - added
Input schema / properties / include_debug_outputAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Include Debug Output" +} - added
Input schema / properties / include_trace_sourceAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Include Trace Source" +}
1 tool update
v0.18.8- Changed
ui_grid1 field changed- added
Input schema / properties / ensure_visibleAdded value: +{ + "default": false, + "title": "Ensure Visible", + "type": "boolean" +}
1 tool update
v0.18.5- Changed
ui_grid3 fields changed- added
Input schema / properties / expectAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Expect" +} - added
Input schema / properties / phaseAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Phase" +} - added
Input schema / properties / probe_nameAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Probe Name" +}
23 tool updates
v0.18.1- Added
get_trace_delta - Added
mark_trace_cursor - Added
runtime_smoke_cleanup_contract - Added
runtime_smoke_evidence_bundle - Added
runtime_smoke_get_event_delta - Added
runtime_smoke_get_result - Added
runtime_smoke_mark_event_cursor - Added
runtime_smoke_run_plan - Added
runtime_smoke_run_probe - Added
runtime_smoke_start - Added
runtime_smoke_stop - Added
runtime_smoke_tail_events - Added
runtime_smoke_validate_plan - Added
runtime_smoke_validate_probe - Added
runtime_smoke_wait_for_result - Added
ui_focus - Changed
ui_grid8 fields changed- added
Input schema / properties / columnAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Column" +} - added
Input schema / properties / columnsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Columns" +} - added
Input schema / properties / identityAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Identity" +} - added
Input schema / properties / max_scrollsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max Scrolls" +} - added
Input schema / properties / row_indexAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Row Index" +} - added
Input schema / properties / row_keyAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Row Key" +} - added
Input schema / properties / rowsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rows" +} - added
Input schema / properties / scroll_settle_msAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Scroll Settle Ms" +}
- Added
ui_monitor_events - Added
ui_monitor_poll - Added
ui_monitor_start - Added
ui_monitor_wait - Added
ui_property - Added
ui_text
109 tool updates
v0.17.2- First observed
add_breakpoint - First observed
add_function_breakpoint - First observed
add_tracepoint - First observed
analyze_collection - First observed
apply_code_change - First observed
attach_debug - First observed
cleanup_processes - First observed
clear_breakpoints - First observed
clear_trace_log - First observed
configure_exceptions - First observed
continue_execution - First observed
create_snapshot - First observed
debug_hygiene_preflight - First observed
diff_snapshots - First observed
disassemble - First observed
evaluate_expression - First observed
find_code_references - First observed
find_code_symbol - First observed
get_build_diagnostics - First observed
get_call_stack - First observed
get_debug_state - First observed
get_exception_context - First observed
get_exception_info - First observed
get_loaded_sources - First observed
get_locations - First observed
get_modules - First observed
get_output - First observed
get_output_tail - First observed
get_progress - First observed
get_scopes - First observed
get_source_context - First observed
get_step_in_targets - First observed
get_stop_context - First observed
get_threads - First observed
get_trace_log - First observed
get_variables - First observed
instrumentation_group_clear - First observed
instrumentation_group_create - First observed
instrumentation_group_inspect - First observed
list_breakpoints - First observed
list_snapshots - First observed
output_assert_since - First observed
output_checkpoint - First observed
pause_execution - First observed
quick_evaluate - First observed
read_memory - First observed
remove_breakpoint - First observed
remove_tracepoint - First observed
restart_debug - First observed
run_runtime_smoke - First observed
search_output - First observed
search_source - First observed
set_variable - First observed
start_debug - First observed
step_into - First observed
step_out - First observed
step_over - First observed
stop_debug - First observed
summarize_object - First observed
terminate_debug - First observed
ui_bring_to_front - First observed
ui_click - First observed
ui_click_annotated - First observed
ui_click_at - First observed
ui_clipboard_read - First observed
ui_clipboard_write - First observed
ui_close_window - First observed
ui_collapse - First observed
ui_diff - First observed
ui_double_click - First observed
ui_drag - First observed
ui_events - First observed
ui_expand - First observed
ui_file_dialog - First observed
ui_find_element - First observed
ui_get_focused_element - First observed
ui_get_held_modifiers - First observed
ui_get_selected_item - First observed
ui_get_window_tree - First observed
ui_grid - First observed
ui_hold_modifiers - First observed
ui_invoke - First observed
ui_key_sequence - First observed
ui_maximize_window - First observed
ui_minimize_window - First observed
ui_move_window - First observed
ui_query - First observed
ui_read_text - First observed
ui_realize_virtualized_item - First observed
ui_release_modifiers - First observed
ui_resize_window - First observed
ui_restore_window - First observed
ui_right_click - First observed
ui_scroll - First observed
ui_select_items - First observed
ui_send_keys - First observed
ui_send_keys_batch - First observed
ui_send_keys_focused - First observed
ui_send_system_event - First observed
ui_set_focus - First observed
ui_set_value - First observed
ui_snapshot - First observed
ui_switch_window - First observed
ui_take_annotated_screenshot - First observed
ui_take_screenshot - First observed
ui_toggle - First observed
ui_wait_for - First observed
verify_debug_freshness - First observed
write_memory
TDQS
Scored across 135 tools
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.
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.
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.
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
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Exception tracking for .NET. Let your AI coding agent search and triage errors and stack traces.
Connect ChatGPT, Claude, Cursor or VS Code to your Windows PC: files, terminal, browser, apps.
Agent Replay Debugger MCP — record every agent step + deterministic replay. Step-debugger for
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables 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.29186MIT
- AlicenseBqualityAmaintenanceEnables AI agents to debug code and automate browsers using Chrome DevTools Protocol, supporting breakpoints, variable inspection, and replayable interaction recording.353,254 npm19MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to debug code inside VS Code by setting breakpoints, stepping through execution, inspecting variables, and evaluating expressions across multiple languages.580MIT
- AlicenseBqualityAmaintenanceInspect 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.3821MIT