Skip to main content
Glama
magna-nz

ASPNET Core Debugging MCP Server

by magna-nz

ASP.NET Core Debugging MCP Server

MCP Toplist

The cross-platform .NET debugging MCP — runs on Linux, macOS, and Windows.

CI NuGet Downloads .NET MCP Platforms License: MIT Glama Quality

An MIT-licensed MCP server that lets an AI agent (Claude, etc.) debug your .NET / ASP.NET Core app — netcoredbg bundled for every platform, nothing extra to install.

Instead of "I think the bug is around line 42, try this", the agent runs your code, pauses it, reads the actual runtime values, mutates state to test a fix, and answers grounded in what it actually saw.

Contents

Related MCP server: mcp-netcoredbg

See it in action

Why is my EF Core query returning empty?

You

GET /users/active returns [], but I know there are active users in the DB. What's the query actually doing?

Claude

I'll pause inside UserRepository.GetActiveAsync and read what EF Core actually sent.

SELECT u.*
FROM Users AS u
WHERE u.IsActive = 1 AND u.TenantId = @__tenantId_0

@__tenantId_0 = 0

The SQL is correct; the parameter is wrong. TenantId = 0, but your tenants start at 1. ICurrentUser.TenantId is being read in the repository constructor — before the request scope resolves it. Fix: read the tenant inside the query (or apply it via HasQueryFilter with IHttpContextAccessor) instead of capturing it at construction.

Why is my JWT auth returning 401?

You

/admin/users is 401-ing for Anna, but her token looks valid to me. What does the auth handler actually see?

Claude

I'll break inside JwtBearerHandler.HandleAuthenticateAsync after her request lands.

Token signature: ✓ valid
Claims built:
  name : anna
  role : User
  iss  : https://auth.staging.example
  aud  : app-api
  exp  : 2026-05-26T14:12:00Z      (not expired)

The token validates fine — but the claim is role=User. Your endpoint is [Authorize(Roles="Admin")]. So the 401 is correct: Anna isn't actually an admin yet upstream. Either her IdP record needs updating, or this policy is wrong.

Test a fix without restarting

You

I think capping discount at 100 fixes the bug. Test that hypothesis without me touching the code.

Claude

I'll pause inside ApplyDiscount on the next checkout and mutate discount in place.

Paused at PricingService.cs:47
  discount = 250        ← bug: two promos stacked

Set discount = 100, resumed.

Result:
  subtotal = $400
  final    = $300
  refund-service complaints: 0

Capping at 100 unblocks the flow downstream. Hypothesis confirmed — time to make the edit for real and decide where the cap belongs (ApplyDiscount itself, or upstream in PromoEngine).

My app is hung — what's actually blocking?

You

/reports hangs forever in staging. Attach and tell me why.

Claude

Attached. Ran hang_analyze.

Thread 12 (HTTP request)
  → blockedOnTask    at ReportService.cs:38   Task.Wait() on T#14

Thread 14 (worker)
  → blockedOnMonitor at SqlConnectionPool.cs:91
                      waiting for SqlConnection
                      (pool max=5, in-use=5)

Classic sync-over-async deadlock. Thread 12 calls .Wait() on a task that itself needs to open another SqlConnection from a fully-held pool. The connection it's holding can't be released until the task completes; the task can't proceed until a connection frees up. Fix: await all the way down in ReportService, or don't hold a connection across the awaited call.

Where is a slow request actually spending its time?

You

GET /order/42 takes 800ms. I don't want to set breakpoints all over — just show me where the time is going.

Claude

I'll auto-instrument your order pipeline and fire the request. Each entry logs the timestamp + arguments, then resumes — the code runs near-normal speed.

[+   4ms] → OrderController.GetOrder()       id=42
[+   6ms] --→ OrderService.LookupOrder()     id=42
[+   9ms] ----→ OrderRepository.FetchById()  id=42
[+  14ms] ------→ SqlClient.ExecuteQuery()   sql="SELECT * FROM orders WHERE id=42"
[+ 287ms] ----→ EnrichmentService.Enrich()   raw="rows(...)"
[+ 781ms] ------→ HttpClient.PostAsync()     url="https://crm.internal/enrich"

Time is in the CRM enrichment HTTP call — 500ms inside HttpClient.PostAsync. DB itself was 5ms. Worth caching EnrichmentService.Enrich or moving it off the request path.

More examples →

How it works

Claude (MCP client)
   │  MCP  (stdio / JSON-RPC)
   ▼
aspnetcore-debugger-mcp        ← this server
   │  DAP  (Debug Adapter Protocol)
   ▼
netcoredbg                     ← Samsung's MIT-licensed .NET debugger, child process
   │  ICorDebug
   ▼
target .NET process

A protocol bridge with agent-friendly composites on top — exception_autopsy, stack_explore, hang_analyze, and the trace tools — that bundle multiple DAP requests into a single tool call.

Use it in 3 steps

  1. Install the tool — needs the .NET 10 SDK.

    dotnet tool install -g AspNetCoreDebuggerMcp --prerelease

    The package bundles prebuilt netcoredbg for linux-x64, linux-arm64, win-x64, osx-x64, and osx-arm64 — no separate install needed.

  2. Register with Claude — either the quick CLI command:

    claude mcp add aspnetcore-debugger -- aspnetcore-debugger-mcp

    …or edit .mcp.json (project-scoped) / ~/.claude.json (global) / claude_desktop_config.json (Claude Desktop) directly:

    {
      "mcpServers": {
        "aspnetcore-debugger": {
          "command": "aspnetcore-debugger-mcp"
        }
      }
    }
  3. Just chat with Claude. /mcp confirms it's connected. From there, describe what you want — "why does this endpoint return null" — and the agent picks the right tools.

Full install + troubleshooting →

Platforms

Bundled netcoredbg binary is selected at runtime — no per-platform install dance.

OS

Architectures

Status

Linux

x64, arm64

✅ Supported (Samsung prebuilt)

macOS

Intel (x64), Apple Silicon (arm64)

✅ Supported (arm64 built by us, since Samsung doesn't ship one)

Windows

x64

✅ Supported (Samsung prebuilt)

Requires the .NET 10 SDK on the host. The MCP server itself is a cross-platform .NET global tool — same install command everywhere.

Tools (27)

Category

Tools

What it's for

Session

debug_launch, debug_attach, debug_disconnect, debug_state

Start, attach to, or stop a debug session

Execution

debug_continue, debug_pause, debug_step, breakpoint_wait

Drive the debuggee and wait for it to stop

Breakpoints

breakpoint_set, breakpoint_set_function, breakpoint_set_exception, breakpoint_set_data, breakpoint_remove, breakpoint_list

Line, function, exception, and data breakpoints

Inspection

threads_list, stacktrace_get, variables_get, variables_set, evaluate, stack_explore

Examine and mutate program state

Exception Autopsy

exception_autopsy

One call: exception chain + top frames + locals + source snippet

Hang / Deadlock

hang_analyze

Auto-pause, classify each thread's blocking pattern (Monitor / Task / Semaphore / async / …)

Request Tracing

trace_start, trace_get, trace_stop

Server-side request tracing — auto-instrument a call chain and capture arguments at every entry

Process I/O

process_read_output

Drain the debuggee's stdout/stderr

Health

debugger_health

Quick check that netcoredbg loaded and the bundled binary is reachable

Full tool reference with parameters →

How this compares

Project

License

Platforms

Approach

.NET

aspnetcore-debugger-mcp (this)

MIT

Linux + macOS + Windows

netcoredbg via DAP, ASP.NET-focused composites (request tracing, hang analysis)

Native, .NET 10

debug-mcp

AGPL-3.0

Linux only (Win/macOS planned)

ICorDebug direct, Roslyn code nav

Native, .NET 10

mcp-debugger

Cross-platform

DAP

Via external debugger

dap-mcp

Cross-platform

DAP

Via external debugger

LLDB MCP

NCSA

Cross-platform

Native LLDB

No

Different sweet spots: this project is the MIT, cross-platform option, with ASP.NET-flavoured composites on top of a DAP. debug-mcp goes deeper into runtime internals via ICorDebug but is Linux-only and AGPL today.

Docs

License

MIT — see LICENSE. Built on netcoredbg (MIT) and the ModelContextProtocol SDK (MIT).

Available Tools

27 tools
breakpoint_listA

List all currently set breakpoints (line, function, and exception filters).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations exist, so description carries full burden. It states 'list all currently set breakpoints', indicating read-only behavior. But lacks details on side effects, authentication, or state changes. Adequate but minimal.

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

Conciseness5/5

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

Single sentence, front-loaded with key verb and resource. No unnecessary words. Highly concise.

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

Completeness5/5

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

With zero parameters and no output schema, the description fully covers the tool's purpose and behavior. No missing information.

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

Parameters4/5

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

No parameters exist, so the description cannot add parameter semantics. Baseline for zero parameters is 4, and the description does not detract.

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

Purpose5/5

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

Description clearly states the verb 'list' and resource 'currently set breakpoints', specifying types (line, function, exception filters). This distinguishes it from sibling tools like breakpoint_set and breakpoint_remove.

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

Usage Guidelines3/5

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

No explicit when-to-use or alternatives are provided. However, the tool's simplicity and zero parameters imply it's used to inspect current breakpoints, which is clear from context.

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

breakpoint_removeA

Remove a breakpoint by its id (line or function).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesBreakpoint id returned from breakpoint_set or breakpoint_set_function.

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It only states the action and identifier type, omitting details like side effects, error behavior, or idempotency. For a deletion tool, this is insufficient.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the action. It is appropriately sized with no unnecessary words.

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

Completeness4/5

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

Given the tool's simplicity (one required parameter, no output schema), the description is mostly complete. However, it lacks error handling details and confirmation of side effects, which would improve completeness.

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

Parameters4/5

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

The schema already describes the 'id' parameter with 100% coverage. The description adds value by clarifying that the id can be for a line or function breakpoint, which goes beyond the schema's generic description.

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

Purpose5/5

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

The description clearly states the verb 'Remove' and the resource 'breakpoint', and specifies the identifier type ('id (line or function)'). This distinguishes it well from sibling tools like breakpoint_set or breakpoint_list.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It implies usage when a breakpoint id is available, but lacks context on when not to use it or mention of related tools.

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

breakpoint_setA

Set a line breakpoint in a source file. Supports conditional, hit-count, and logpoint (logMessage) breakpoints.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineYesLine number (1-based) to break on.
conditionNoOptional expression — break only when this evaluates to true.
logMessageNoIf set, makes this a logpoint (tracepoint): the message is logged and execution continues without pausing. Use {expr} interpolation.
sourcePathYesAbsolute path to the source file.
hitConditionNoOptional hit count expression (e.g. ">5") — break only on the Nth+ hit.

TDQS

A3.9/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full behavioral burden. It specifies the tool sets a line breakpoint and supports conditional/hit-count/logpoint breakpoints, but does not mention side effects (e.g., whether re-setting a breakpoint replaces or duplicates), permissions, or the impact of logMessage (non-breaking). This leaves some ambiguity.

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

Conciseness5/5

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

The description is a single, well-structured sentence that immediately conveys the tool's core function and supported features. No unnecessary words or repetition. Ideal conciseness.

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

Completeness3/5

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

The description lacks details on return values (e.g., breakpoint ID or error messages) and does not explicitly clarify execution behavior (e.g., logpoint continues execution). While the schema covers parameter meanings, the description would benefit from mentioning these contextual aspects to be fully self-contained.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is already explained. The description adds a high-level summary ('conditional, hit-count, logpoint') that maps to parameters condition, hitCondition, and logMessage, but it does not provide additional depth beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Set a line breakpoint in a source file,' distinguishing it from breakpoint_set_function (function breakpoint), breakpoint_set_exception, breakpoint_remove, and breakpoint_list. It also lists supported features (conditional, hit-count, logpoint), reinforcing the tool's specific purpose.

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

Usage Guidelines4/5

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

The description implies use for line breakpoints, naturally distinguishing from sibling tools like breakpoint_set_function or breakpoint_set_exception. However, it does not explicitly state when to use or not use this tool over alternatives, missing an opportunity for clearer guidance.

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

breakpoint_set_dataA

Set a data/watch breakpoint: break when a specific variable changes (or is read). Requires a variablesReference + name from variables_get. May not be supported by all adapters.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the variable to watch.
accessTypeNoAccess type: "write" (default), "read", or "readWrite".write
variablesReferenceYesvariablesReference of the container holding the variable (from variables_get).

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description solely provides behavioral context. It discloses adapter support limitations and the trigger condition, but lacks details on behavior when unsupported or errors.

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

Conciseness5/5

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

Two concise sentences cover purpose, usage, prerequisite, and limitation. No redundancy or extraneous information.

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

Completeness4/5

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

The description is adequate for a simple tool with fully documented schema parameters. It could mention success/failure behavior, but the essential context is present.

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

Parameters4/5

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

Schema coverage is 100% with good definitions. The description adds value by explaining where to obtain variablesReference and name, and clarifying accessType defaults.

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

Purpose5/5

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

The description clearly states the tool sets a data/watch breakpoint and specifies the trigger condition (variable change or read). It distinguishes from sibling breakpoint-setting tools by its specific purpose.

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

Usage Guidelines4/5

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

It explicitly requires variablesReference and name from variables_get, guiding the agent on prerequisites. It also warns that not all adapters support it. It does not explicitly exclude alternatives, but the sibling tools cover different breakpoint types.

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

breakpoint_set_exceptionA

Set the active exception breakpoint filters. Pass [] to clear. Common netcoredbg filters: "all", "user-unhandled".

ParametersJSON Schema
NameRequiredDescriptionDefault
filtersYesFilter names. Empty array clears exception breakpoints.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It explains the effect (setting filters, clearing with empty array) but lacks disclosure of side effects, permissions, or error behavior.

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

Conciseness5/5

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

Three sentences, front-loaded with the main action, no unnecessary words. Every sentence provides useful information.

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

Completeness4/5

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

Given no output schema and no annotations, the description sufficiently covers the basic use case and common filter values. It could be more complete with error handling notes but is adequate.

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

Parameters4/5

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

Schema coverage is 100% and already describes the parameter clearly. The description adds value by giving concrete examples ('all', 'user-unhandled') and the explicit clearing syntax.

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

Purpose5/5

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

The description clearly states the action ('Set'), the resource ('active exception breakpoint filters'), and distinguishes from sibling tools that set breakpoints on lines or functions.

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

Usage Guidelines3/5

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

The description implies usage for exception breakpoints but does not explicitly contrast with sibling tools like breakpoint_set or provide scenarios when to use this tool instead.

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

breakpoint_set_functionA

Set a breakpoint on a function by symbol name (e.g. "Namespace.Class.Method").

ParametersJSON Schema
NameRequiredDescriptionDefault
conditionNoOptional condition expression.
functionNameYesFully-qualified function name to break on.
hitConditionNoOptional hit count expression.

TDQS

A3.5/5.0
Behavior2/5

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

No annotations provided, so description must disclose behavior. It only states the action without mentioning prerequisites (e.g., function must be loaded), side effects, error handling, or whether breakpoints persist. Minimal behavioral context.

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

Conciseness5/5

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

Single sentence, front-loaded, no redundant words. Every part adds value.

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

Completeness3/5

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

Adequate for a simple tool with full schema coverage, but could mention that function must be resolved or that duplicate breakpoints are handled. Lacks output schema, but none expected.

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

Parameters3/5

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

Schema already describes all 3 parameters with 100% coverage. Description adds only an example for functionName ('Namespace.Class.Method'), which is helpful but not substantial beyond schema.

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

Purpose5/5

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

Description clearly states 'Set a breakpoint on a function by symbol name', specifying the verb (set) and resource (function breakpoint). The example distinguishes it from siblings like breakpoint_set (line breakpoint) and breakpoint_set_data.

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

Usage Guidelines3/5

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

Description implies usage when you know the fully-qualified function name, but lacks explicit guidance on when to prefer this over siblings like breakpoint_set. No alternative tools are mentioned.

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

breakpoint_waitA

Block until the debuggee hits a breakpoint, completes a step, or otherwise stops. Returns the stop info plus a full one-shot snapshot: the topmost stack frame, a source snippet around the stop, top-frame locals, and a peek of recent debuggee stdout/stderr (non-destructive — process_read_output still drains the full buffer). Designed so an agent in a step-inspect loop doesn't need separate inspect / read-output round trips.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeoutSecondsNoMaximum seconds to wait. Defaults to 30.
maxLocalsPerScopeNoCap on locals returned per scope on the top frame. Default 30. Pass 0 to omit locals entirely.
maxRecentOutputLinesNoCap on recent debuggee output lines included with the stop (peeked, not drained). Default 50. Pass 0 to omit output.

TDQS

A4.5/5.0
Behavior5/5

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

No annotations are provided, so the description carries full burden. It explicitly states the tool is non-destructive, that process_read_output still drains the full buffer, and details what the snapshot contains (stack frame, source snippet, locals, output peek). This fully discloses behavior beyond what any schema would show.

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

Conciseness5/5

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

Three concise sentences with no waste. First sentence defines core action, second details return snapshot, third explains design rationale. Each sentence earns its place.

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

Completeness5/5

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

Given three optional parameters and no output schema, the description fully explains return values and usage context. It covers all needed behavior for an agent to correctly invoke the tool in a debugging loop.

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

Parameters3/5

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

Schema coverage is 100% and descriptions are already thorough. The tool description repeats default values and 'pass 0 to omit' already present in schema, adding minimal extra meaning. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states what the tool does: block until the debuggee stops, then return stop info plus a snapshot. It explicitly contrasts with sibling tools by noting it bundles inspect and read-output info, distinguishing it from debug_continue, debug_step, process_read_output, etc.

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

Usage Guidelines4/5

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

The description provides clear context for use: designed for a step-inspect loop to avoid separate round trips. It implies when to use, though does not explicitly list exclusions or alternatives beyond mentioning process_read_output.

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

debug_attachB

Attach the debugger to an already-running .NET process by PID.

ParametersJSON Schema
NameRequiredDescriptionDefault
processIdYesSystem process id (PID) of the .NET process to attach to.

TDQS

B3.3/5.0
Behavior2/5

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

No annotations provided, and the description fails to disclose side effects (e.g., pausing the process), authorization needs, or behavior on invalid PID. Only the basic action is stated.

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

Conciseness5/5

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

Single sentence with no wasted words. Front-loaded with the action and key detail.

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

Completeness3/5

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

Given the simple tool with one parameter and no output schema, the description is minimally adequate but lacks completeness about post-attach behavior, errors, or prerequisites.

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

Parameters3/5

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

Schema coverage is 100% and the parameter description in the schema is adequate. The tool description adds no further meaning beyond what the schema provides.

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

Purpose5/5

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

The description clearly states the action (attach), resource (debugger to .NET process), and method (by PID). It distinguishes from siblings like debug_launch (launch new) and debug_disconnect.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives like debug_launch or debug_continue. With 25 sibling tools, explicit usage context is missing.

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

debug_continueC

Resume execution of the debuggee. Defaults to the last-stopped thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadIdNoThread id to continue. If omitted, uses the last thread that stopped.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions defaulting to last-stopped thread, but doesn't disclose side effects (e.g., does it resume all threads? What if debuggee is running? Are there conditions where continuation fails?). Insufficient for a mutation tool.

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

Conciseness4/5

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

Two sentences, no redundancy. Front-loaded with key action. Could be expanded without losing conciseness, but it's efficient.

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

Completeness3/5

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

Given no output schema and minimal description, the tool is simple but missing context like prerequisites (debuggee must be stopped), error conditions, or what happens if threadId is invalid. Acceptable for a straightforward continuation action, but could be more complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the parameter is already well-documented. The description adds that omitting threadId uses the last-stopped thread, which adds value beyond the schema's description. Baseline 3 with slight bonus.

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

Purpose4/5

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

The description clearly states the tool resumes debuggee execution and defaults to the last-stopped thread. It's specific about the verb (Resume) and resource (debuggee), but could be more explicit about the effect (e.g., continues from the current breakpoint). It distinguishes from siblings like debug_pause and debug_step.

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

Usage Guidelines2/5

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

No guidance on when to use vs alternatives like debug_step or debug_pause. It doesn't state that the debuggee must be in a stopped state for continuation, nor does it mention what happens if no thread is stopped. Implied usage is minimal.

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

debug_disconnectA

Disconnect the debugger and terminate the debuggee.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description provides only basic behavioral info: disconnection and termination. It does not disclose side effects, reversibility, or required permissions.

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

Conciseness4/5

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

One sentence, 7 words, no redundancy. However, it could be slightly more structured with additional context in a second sentence.

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

Completeness3/5

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

Given zero parameters and no output schema, the description is minimal. It covers the core action but lacks context about consequences and safety, which is important for a termination tool.

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

Parameters4/5

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

Input schema has zero parameters with 100% coverage. Description does not need to add parameter info, so baseline 4 is appropriate.

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

Purpose5/5

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

The description uses specific verbs 'disconnect' and 'terminate' with clear resources 'debugger' and 'debuggee'. It clearly distinguishes from sibling tools like debug_attach, debug_continue, etc.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Does not specify prerequisites, such as a debugger being attached, or consequences like termination of the debuggee.

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

debugger_healthA

Self-diagnostic. Reports the host platform, RID, resolved netcoredbg path (or that it's missing), where the binary came from (bundled / env var / PATH), and the netcoredbg version it reports. Call this first when something looks wrong, instead of starting a real debug session to find out.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: it reports multiple diagnostic fields, indicates if netcoredbg is missing, and where the binary comes from. No speculative or missing behavioral details.

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

Conciseness5/5

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

Single, well-structured sentence front-loads the purpose ('Self-diagnostic.') then lists outputs and usage advice. No wasted words.

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

Completeness5/5

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

For a self-diagnostic tool with no output schema, the description fully covers what the tool does, what it outputs, and when to use it. No missing information.

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

Parameters4/5

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

The tool has 0 parameters, so baseline is 4. The description does not need to add parameter info as there are none.

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

Purpose5/5

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

The description clearly states it is a self-diagnostic tool that reports host platform, RID, netcoredbg path, origin, and version. It distinguishes itself from sibling debug tools by emphasizing it is for diagnosis before starting a real session.

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

Usage Guidelines5/5

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

Explicitly instructs to 'call this first when something looks wrong, instead of starting a real debug session.' This provides 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.

debug_launchB

Launch a .NET program under the debugger. Returns the resulting session state.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoWorking directory for the program (defaults to the program's directory).
envNoEnvironment variables to set on the debuggee. ASP.NET Core picks these up at startup — use ASPNETCORE_ENVIRONMENT to switch between Development/Staging/Production (the matching appsettings.{Env}.json auto-loads), or override anything in appsettings via the standard double-underscore syntax (e.g. ConnectionStrings__Default). These are session-scoped — no files are edited.
argsNoCommand-line arguments to pass to the program.
programYesPath to the .NET program to debug (.dll or apphost executable).
stopAtEntryNoIf true, the program pauses at entry instead of running until the first breakpoint.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits, but it only mentions launching and returning session state. It does not address blocking behavior, side effects, or session lifecycle, leaving agents uninformed.

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

Conciseness4/5

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

The description is a concise two sentences, front-loading the core action. It is well-structured but could include additional context without becoming verbose.

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

Completeness2/5

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

Given 5 parameters and no output schema, the description is too sparse. It does not explain key aspects like the 'session state' return value, environment variable usage, or relationship to other debug tools.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description adds no parameter-level information beyond the schema, which is adequate but not enhanced.

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

Purpose5/5

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

The description clearly states the action ('launch a .NET program under the debugger') and the outcome ('returns the resulting session state'), distinguishing it from sibling tools like breakpoint or stepping tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like debug_attach or when prerequisites (e.g., debugger initialization) are needed. The description omits context for selection.

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

debug_pauseA

Pause the debuggee. Requires a thread id; defaults to the last-stopped thread if known.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadIdNoThread id to pause. If omitted, uses the last thread that stopped.

TDQS

A4.2/5.0
Behavior3/5

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

Without annotations, the description carries full burden. It discloses the defaulting mechanism but omits details like what happens with invalid thread IDs or if the call is blocking. Minimal transparency.

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

Conciseness5/5

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

Two concise sentences with no fluff. Front-loaded with the main action.

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

Completeness4/5

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

Given the simplicity (one optional param, no output schema), the description is adequately complete. It covers purpose and parameter behavior.

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

Parameters4/5

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

Schema coverage is 100%, but the description adds context about defaulting to the last-stopped thread. This provides meaning beyond the schema's description.

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

Purpose5/5

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

The description clearly states the tool's action ('Pause the debuggee') and specifies the resource. It distinguishes from siblings like 'debug_continue' and 'debug_step' by focusing on pausing.

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

Usage Guidelines4/5

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

The description mentions that a thread id is required but defaults to the last-stopped thread. While it doesn't explicitly state when not to use or provide alternatives, the context of sibling tools suggests appropriate use.

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

debug_stateA

Return the current debug session state, including process id and last stop info.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations, but the description discloses return contents (process id, last stop info). It is a read operation with no side effects, though could mention requirement of an active session.

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

Conciseness5/5

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

Single sentence, front-loaded, no redundant words.

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

Completeness5/5

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

No output schema, but description adequately specifies return values (process id, last stop info). Complete for a simple state retrieval tool.

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

Parameters4/5

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

No parameters exist; schema coverage is 100%. Description adds no extra param info, but none needed.

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

Purpose5/5

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

The description clearly states the tool returns the current debug session state with process id and last stop info. It is distinct from sibling tools like breakpoint_list, debug_launch, etc., which perform actions.

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

Usage Guidelines4/5

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

The description implies usage for reading state, not modifying. While no explicit when-to-use or alternatives, the context makes it clear compared to siblings.

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

debug_stepA

Single-step the debuggee. Kind: "in" (step into), "over" (step over), "out" (step out). Pass waitTimeoutSeconds > 0 to also block on the next stop and return the same one-shot snapshot as breakpoint_wait (top frame, snippet, top-frame locals, recent debuggee output). Without it the call returns immediately after issuing the step — today's behavior.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesStep kind: "in", "over", or "out".
threadIdNoThread id to step. If omitted, uses the last thread that stopped.
maxLocalsPerScopeNoCap on locals returned per scope on the top frame after the post-step stop. Default 30. Pass 0 to omit locals. Only used when waitTimeoutSeconds > 0.
waitTimeoutSecondsNoSeconds to wait for the resulting stop. 0 (default) returns immediately after issuing the step. > 0 blocks and returns the full enriched stop snapshot.
maxRecentOutputLinesNoCap on recent debuggee output lines included with the post-step stop (peeked, not drained). Default 50. Pass 0 to omit output. Only used when waitTimeoutSeconds > 0.

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: it can block and return a snapshot (top frame, locals, output) similar to breakpoint_wait when waitTimeoutSeconds > 0, otherwise returns immediately. No contradictions.

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

Conciseness5/5

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

The description is two sentences, no unnecessary words, and front-loads the core purpose. It packs significant information efficiently.

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

Completeness5/5

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

Despite no output schema, the description covers the return value for the blocking mode. All parameters are explained with their conditional use. The tool's behavior is completely described for its complexity.

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

Parameters4/5

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

Schema coverage is 100% (baseline 3). The description adds value by explaining that maxLocalsPerScope and maxRecentOutputLines are only used when waitTimeoutSeconds > 0, and clarifies the effect of waitTimeoutSeconds. This goes beyond the schema descriptions.

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

Purpose5/5

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

The description clearly states the tool's function: single-step the debuggee with three step kinds (in, over, out). It distinguishes itself from siblings like breakpoint_wait by noting it can return the same snapshot when waitTimeoutSeconds > 0.

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

Usage Guidelines4/5

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

The description explains the two modes of operation: immediate return vs. blocking wait with enriched snapshot. It implicitly guides the agent on when to use each mode, though it does not explicitly contrast with other stepping tools like debug_continue.

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

evaluateA

Evaluate a C# expression in the context of a stack frame. Returns the result as a string plus a variablesReference if the result is a compound value.

ParametersJSON Schema
NameRequiredDescriptionDefault
frameIdNoFrame id from stacktrace_get. Defaults to the global (no-frame) context.
expressionYesExpression to evaluate (e.g. "user.Id", "items.Count").

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description provides some behavioral detail (returns string + optional variablesReference) but lacks mention of side effects, safety, or dependencies on debugger state.

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

Conciseness5/5

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

Two concise sentences: one for purpose, one for return format. No unnecessary words or redundancy.

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

Completeness4/5

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

The description adequately covers the tool's function and return format. However, it could mention constraints like requiring an active debug session or relationship to stacktrace_get for frameId.

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

Parameters3/5

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

The input schema already has good descriptions for both parameters (100% coverage). The description does not add significant new meaning beyond what the schema provides.

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

Purpose5/5

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

The description clearly states it evaluates a C# expression in a stack frame context, with a specific return format. This distinguishes it from sibling tools like variables_get or stacktrace_get.

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

Usage Guidelines3/5

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

The description implies usage for evaluating expressions during debugging but does not explicitly contrast with alternatives or mention prerequisites like a paused debugger.

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

exception_autopsyA

Full exception context in one call: exception type + inner-exception chain + top stack frames + top frame's locals + source snippet around the throw + a peek of recent debuggee stdout/stderr (non-destructive — process_read_output still drains the full buffer). Call this when state.lastStop.reason == "exception".

ParametersJSON Schema
NameRequiredDescriptionDefault
threadIdNoThread id. Defaults to the last-stopped thread.
frameCountNoHow many top stack frames to include. Default 20.
maxRecentOutputLinesNoCap on recent debuggee output lines included with the autopsy (peeked, not drained). Default 50. Pass 0 to omit output.

TDQS

A4.7/5.0
Behavior5/5

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

No annotations provided, so description fully shoulders transparency. It declares non-destructive behavior ('peeked, not drained'), clarifies defaults, and describes what the tool collects. No contradiction.

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

Conciseness5/5

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

Two sentences: first lists capabilities concisely, second provides usage condition. Every word earns its place. No fluff.

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

Completeness4/5

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

Given 3 optional parameters and no output schema or annotations, description covers purpose, parameters, usage guidance, and behavior. Lacks explicit return format, but the list of included context is sufficient for an agent.

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

Parameters5/5

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

Schema already describes parameters (100% coverage). Description adds context: defaults (threadId to last-stopped thread, frameCount to 20, maxRecentOutputLines to 50), and explains the 'peek' behavior for output lines. Adds value beyond schema.

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

Purpose5/5

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

Description clearly states 'Full exception context in one call' and enumerates specific components (exception type, inner-exception chain, stack frames, locals, source snippet, output peek). This distinguishes it from sibling tools like stacktrace_get or process_read_output.

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

Usage Guidelines4/5

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

Explicit condition 'Call this when state.lastStop.reason == "exception"' guides when to invoke. Also notes non-destructive nature relative to process_read_output, but could further differentiate from other debugging tools.

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

hang_analyzeA

Diagnose why an application appears stuck. Auto-pauses if running, lists all threads, fetches the top frames of each, and classifies each thread's blocking pattern (Monitor / WaitHandle / Semaphore / Task / Thread.Join / Thread.Sleep / async await). Leaves the session paused so you can inspect further.

ParametersJSON Schema
NameRequiredDescriptionDefault
topFramesPerThreadNoTop frames per thread to fetch. Default 10.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses key behaviors: auto-pauses if running, lists threads, fetches top frames, classifies blocking patterns, and leaves the session paused for further inspection. It does not mention potential side effects like performance impact or state modification, but given the diagnostic nature, the disclosure 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.

Conciseness4/5

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

The description is three sentences long, front-loading the purpose and listing actions clearly. It is efficient but could benefit from bullet points or more structured formatting for easier parsing. Still, every sentence adds value.

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

Completeness4/5

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

Given one parameter, no output schema, and no annotations, the description provides a complete overview: what the tool does, its actions, and the resulting state (paused). It does not specify return format or output details, but for a diagnostic tool this is acceptable. The description is sufficient for an agent to understand the tool's purpose and behavior.

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

Parameters3/5

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

Schema coverage is 100% (1 parameter with description). The description mentions 'fetches the top frames of each', reinforcing the parameter's purpose. However, it adds no additional meaning beyond the schema's description ('Top frames per thread to fetch. Default 10.'). Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool's purpose ('Diagnose why an application appears stuck') and lists specific actions (auto-pauses, lists threads, fetches top frames, classifies blocking patterns). This distinguishes it from sibling tools like debug_pause (generic pause) and threads_list (list only without diagnosis).

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

Usage Guidelines3/5

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

The description implies when to use it ('when an application appears stuck'), but lacks explicit guidance on when not to use it or alternatives. For instance, it doesn't mention using breakpoint_set or stacktrace_get for other debugging scenarios. The context is clear but without exclusions.

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

process_read_outputA

Drain buffered output (stdout/stderr) from the debuggee since the previous call. Returns the lines collected and removes them from the buffer.

ParametersJSON Schema
NameRequiredDescriptionDefault
categoryNoFilter by category: "stdout", "stderr", "console", or omit for all.
maxLinesNoMaximum lines to drain in this call.

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description fully covers behavioral traits: it drains and removes lines from the buffer, making it a destructive read. This is sufficient for understanding side effects, though it could mention concurrency or idempotency.

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

Conciseness5/5

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

Two concise sentences front-load the core action and result. Every word is necessary; no redundant or vague phrasing.

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

Completeness5/5

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

Despite no output schema, the description explains return value (lines collected). With only two optional parameters and low complexity, the description fully covers what an agent needs to use the tool correctly.

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

Parameters4/5

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

Schema coverage is 100% with clear descriptions for both parameters. The description adds value by explaining the 'since previous call' context, which clarifies that it drains accumulated output. This goes beyond the schema's static definitions.

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

Purpose5/5

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

The description clearly states the tool drains buffered output (stdout/stderr) from the debuggee since the previous call, specifying both the action (drain and remove) and the resource (buffered output). It distinguishes itself from sibling tools like breakpoint_set or evaluate by focusing on output collection.

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

Usage Guidelines4/5

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

The description implies usage after debuggee execution ('since the previous call') and gives clear context for repeated calls. However, it does not explicitly state when to use this tool versus alternatives like evaluate or stacktrace_get, leaving some ambiguity.

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

stack_exploreA

In one call: full stack + locals at every frame + a pre-rendered ASCII tree showing caller → callee with arrows. Use this instead of stacktrace_get + variables_get per frame when you want to see the whole picture at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
threadIdNoThread id. Defaults to the last-stopped thread.
maxFramesNoMaximum frames to include. Default 10.
maxLocalsPerFrameNoMaximum locals per frame. Default 10.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so the description carries the full burden. It clearly states the tool returns stack frames, locals, and an ASCII tree, implying a read-only operation. However, it does not cover error handling or performance implications.

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

Conciseness5/5

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

Two concise sentences: first explains what the tool does, second provides usage guidance. No wasted words.

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

Completeness4/5

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

Given no output schema, the description adequately summarizes the return content (full stack, locals, ASCII tree). It could specify the exact format of the tree or locals, but it is sufficient for an experienced debugger user.

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

Parameters3/5

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

Schema coverage is 100% with existing descriptions for each parameter. The description adds no new semantic information beyond repeating defaults already in the schema.

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

Purpose5/5

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

The description clearly states the tool provides a full stack dump including local variables at each frame and an ASCII tree of caller-callee relationships. It distinguishes itself from sibling tools like stacktrace_get and variables_get.

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

Usage Guidelines5/5

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

Explicitly advises using this tool instead of combining stacktrace_get and variables_get per frame when a complete picture is needed, providing a clear alternative and context.

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

stacktrace_getA

Get the call stack of a thread. By default async state-machine frames are flattened back to their original method names (e.g. UserService.d__3.MoveNext → UserService.GetAsync) and BCL async infrastructure frames are hidden. Pass raw=true for the unmodified DAP frames.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoIf true, return raw DAP frames (no async flattening, no infrastructure filtering).
levelsNoMaximum frames to return.
threadIdNoThread id. Defaults to the last-stopped thread.
startFrameNoSkip this many top frames (0 = include the topmost).

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations provided, the description fully explains key behaviors: async state-machine flattening and hiding of BCL infrastructure frames by default, and the raw option for unmodified frames. It lacks details on error handling or auth, but covers the main 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.

Conciseness5/5

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

The description is two sentences long, with the first stating the core purpose and the second detailing the key behavioral nuance (async flattening and raw option). Every word earns its place.

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

Completeness3/5

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

While the description covers the most important behavioral aspect (async flattening), it does not describe the output structure or format. Given no output schema, the agent might need more context on what a stack frame contains. It is sufficient for a simple retrieval but not fully complete.

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

Parameters3/5

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

All 4 parameters are documented in the schema with descriptions and defaults. The description adds little beyond restating defaults (threadId, raw) and does not elaborate on startFrame or levels meaningfully. With 100% schema coverage, the description adds minimal value.

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

Purpose4/5

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

The description clearly states the verb (Get) and resource (call stack of a thread), and explains the default flattening behavior. While it doesn't explicitly distinguish from sibling tools like stack_explore, the purpose is specific and unambiguous.

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

Usage Guidelines3/5

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

The description explains when to use the raw parameter but provides no explicit guidance on when to use this tool versus alternatives. The usage context is implied but not thorough.

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

threads_listB

List all threads in the debuggee.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

Without annotations, the description carries the full burden. It only states the action, with no disclosure of side effects, permissions, or return characteristics. For a list operation, read-only behavior is implied but not explicitly stated.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without any superfluous words. It is appropriately front-loaded.

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

Completeness2/5

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

Given the absence of an output schema and annotations, the description should provide more context about the returned information or behavior. It is minimal and lacks completeness for an agent to fully understand the tool's behavior.

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

Parameters4/5

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

There are zero parameters, so the schema coverage is 100%. The description adds no parameter-specific meaning, but baseline 4 is appropriate since no parameters exist to document.

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

Purpose5/5

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

The description uses the specific verb 'List' and clearly identifies the resource 'threads' in the debuggee. It is unambiguous and distinct from sibling tools, which focus on breakpoints, debugging actions, or variables.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. The description does not mention context, prerequisites, or exclusions, leaving the agent without decision support.

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

trace_getA

Read events captured since trace_start, plus a pre-rendered ASCII timeline with → for method entries and ⚠ for exceptions. Does NOT clear the buffer — call trace_stop when done.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxEventsNoReturn only the most recent N events.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description adds key behavioral context: buffer is not cleared, and output includes ASCII timeline with symbols for entries and exceptions.

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

Conciseness5/5

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

Two sentences, no wasted words, purpose first, buffer behavior second.

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

Completeness4/5

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

For a simple tool with one optional parameter and no output schema, the description adequately covers purpose, output format, and critical buffer behavior.

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

Parameters3/5

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

Schema coverage is 100%, and the description adds no extra meaning beyond the schema's parameter description for maxEvents.

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

Purpose5/5

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

The description clearly states it reads events captured since trace_start and provides a pre-rendered ASCII timeline. It implicitly distinguishes itself from siblings like trace_start and trace_stop.

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

Usage Guidelines4/5

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

The description implies usage after trace_start and notes buffer behavior, but could explicitly state not to use if you want to clear the buffer without calling trace_stop.

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

trace_startA

Begin tracing a set of methods. Each named method gets a server-side trace breakpoint that captures the call (top stack + locals) and auto-continues — the request flows through at near-normal speed and your debug state is unaffected. If includeExceptions=true, unhandled exceptions are also captured. Use trace_get to read the captured events and trace_stop to remove the trace. One trace active at a time.

ParametersJSON Schema
NameRequiredDescriptionDefault
methodsYesFunction names to trace (e.g. "Namespace.Class.Method"). Same format as breakpoint_set_function.
captureStackNoCapture top stack at each hit. Default true.
captureLocalsNoCapture top-frame locals at each hit. Default true.
includeExceptionsNoAlso capture unhandled exceptions during the trace. Default true.
maxFramesPerEventNoMaximum stack frames per captured event. Default 10.
maxLocalsPerFrameNoMaximum locals per captured event. Default 10.

TDQS

A4/5.0
Behavior4/5

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

No annotations are provided, so the description bears full responsibility. It discloses that tracing auto-continues, runs at near-normal speed, does not affect debug state, and that includeExceptions captures unhandled exceptions. This is thorough behavioral coverage.

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

Conciseness5/5

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

The description is three sentences long, front-loads the core purpose, and contains no redundant information. Every sentence adds value: what the tool does, how to read/stop, and a key constraint (one active trace).

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

Completeness4/5

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

The description covers the tool's lifecycle, constraints, and key parameters. It lacks explicit mention of the return value (if any), but the tool likely returns a confirmation, which could be inferred. Overall, it is complete for a tool with 6 parameters and no output schema.

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

Parameters3/5

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

Schema coverage is 100%, meaning every parameter has a description in the schema. The tool description adds general context (e.g., the purpose of includeExceptions) but does not provide additional semantic details beyond what the schema already gives. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool begins tracing a set of methods with specific behavior (captures top stack and locals, auto-continues). It distinguishes itself from siblings like trace_get and trace_stop by mentioning them as complementary tools.

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

Usage Guidelines3/5

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

The description mentions using trace_get to read events and trace_stop to remove the trace, and notes that only one trace can be active at a time. However, it does not explicitly compare to alternatives like breakpoint_set_function or provide 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.

trace_stopA

Stop the active trace and remove its breakpoints. Captured events are discarded — call trace_get first if you want to keep them.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Without annotations, the description carries full behavioral transparency burden. It discloses that breakpoints are removed and captured events are discarded. This is good for a simple tool, though it could mention error cases (e.g., no active trace) for completeness.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the main action, and every word adds value. No redundancy or unnecessary details.

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

Completeness5/5

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

For a low-complexity tool with no parameters and no output schema, the description covers all essential aspects: action, side effects, and a critical prerequisite. It is complete and sufficient for an AI agent.

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

Parameters4/5

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

The input schema has no parameters, so schema coverage is 100%. The description does not need to add parameter information. Baseline for 0 parameters is 4, and the description meets this.

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

Purpose5/5

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

The description clearly states the tool stops the active trace and removes breakpoints, distinguishing it from sibling tools like trace_get and trace_start. It uses specific verb 'stop' and resource 'active trace', and the warning about discarding events adds clarity.

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

Usage Guidelines4/5

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

The description provides explicit guidance to call trace_get first if events are needed, indicating when to use this tool and when to avoid it. It does not explicitly list alternative tools, but the advice 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.

variables_getA

Get variables for a stack frame. Defaults to the topmost frame of the last-stopped thread. Recursively expands compound values up to depth levels and truncates each level at maxChildren.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoRecursive expansion depth. 1 = just the top-level variables (default). 2 = expand one level into compound types. Higher = deeper.
frameIdNoFrame id from stacktrace_get. Defaults to the topmost frame of the last-stopped thread.
maxChildrenNoMaximum children to return at each level. Default 50.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, description explains recursive expansion, depth truncation, and topmost frame default, but does not disclose any side effects or auth requirements. Sufficient for a read-only tool.

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

Conciseness5/5

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

Two sentences, front-loaded with core action, no superfluous words, well-structured.

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

Completeness4/5

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

Description covers core behavior and parameter defaults, but lacks information about return format. However, given standard debug adapter protocol expectations, it is fairly complete.

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

Parameters4/5

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

Schema coverage is 100% with descriptions, but the tool description adds valuable context about defaults (depth=1, maxChildren=50) and frame selection behavior beyond what the schema provides.

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

Purpose5/5

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

The description clearly states it gets variables for a stack frame, specifies defaults (topmost frame, last-stopped thread), and distinguishes from siblings like variables_set and stacktrace_get.

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

Usage Guidelines4/5

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

Describes defaults and parameter behavior (depth, maxChildren) but doesn't explicitly state when not to use or suggest alternatives, though 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.

variables_setB

Set the value of a variable or any lvalue expression (e.g. "userId" or "user.Name"). The agent can use this to test fixes by mutating state mid-run.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesThe new value as a C# expression (e.g. "42", "\"hello\"").
frameIdNoFrame id from stacktrace_get. Defaults to the global (no-frame) context.
expressionYesThe lvalue expression to assign to (e.g. "userId", "user.Name").

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It states it sets a value and mutates state, but omits details on side effects, error handling, permissions required, or consequences of invalid expressions. This leaves the agent without critical behavioral cues.

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

Conciseness5/5

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

The description is two sentences, efficient and front-loaded. The first sentence defines the action, the second provides a practical use case. No unnecessary words.

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

Completeness2/5

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

For a mutation tool with no annotations, the description is incomplete. It does not explain the behavior when the expression is invalid, the role of frameId, or what the tool returns (no output schema). This leaves the agent with significant gaps.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all three parameters. The description adds marginal value by clarifying 'lvalue expression' and 'C# expression,' but largely restates the schema descriptions. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Set the value of a variable or any lvalue expression') and provides concrete examples ('userId' or 'user.Name'). It distinguishes the tool from siblings (e.g., variables_get, evaluate) by focusing on mutation.

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

Usage Guidelines3/5

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

The description mentions a use case ('test fixes by mutating state mid-run'), offering context for when to use the tool. However, it lacks explicit guidance on when not to use it or alternatives (e.g., when to use variables_get or evaluate first).

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. Dates show when Glama detected each change.

  1. 2 tool updatesv1.2.0
    • Changeddebug_step3 fields changed
      • addedInput schema / properties / maxLocalsPerScope
        {
          "default": null,
          "description": "Cap on locals returned per scope on the top frame after the post-step stop. Default 30. Pass 0 to omit locals. Only used when waitTimeoutSeconds > 0.",
          "type": [
            "integer",
            "null"
          ]
        }
      • addedInput schema / properties / maxRecentOutputLines
        {
          "default": null,
          "description": "Cap on recent debuggee output lines included with the post-step stop (peeked, not drained). Default 50. Pass 0 to omit output. Only used when waitTimeoutSeconds > 0.",
          "type": [
            "integer",
            "null"
          ]
        }
      • addedInput schema / properties / waitTimeoutSeconds
        {
          "default": null,
          "description": "Seconds to wait for the resulting stop. 0 (default) returns immediately after issuing the step. > 0 blocks and returns the full enriched stop snapshot.",
          "type": [
            "integer",
            "null"
          ]
        }
    • Changedexception_autopsy1 field changed
      • addedInput schema / properties / maxRecentOutputLines
        {
          "default": null,
          "description": "Cap on recent debuggee output lines included with the autopsy (peeked, not drained). Default 50. Pass 0 to omit output.",
          "type": [
            "integer",
            "null"
          ]
        }
  2. 1 tool updatev1.1.1
    • Changedbreakpoint_wait2 fields changed
      • addedInput schema / properties / maxLocalsPerScope
        {
          "default": null,
          "description": "Cap on locals returned per scope on the top frame. Default 30. Pass 0 to omit locals entirely.",
          "type": [
            "integer",
            "null"
          ]
        }
      • addedInput schema / properties / maxRecentOutputLines
        {
          "default": null,
          "description": "Cap on recent debuggee output lines included with the stop (peeked, not drained). Default 50. Pass 0 to omit output.",
          "type": [
            "integer",
            "null"
          ]
        }
  3. 27 tool updatesv0.1.0
    • First observedbreakpoint_list
    • First observedbreakpoint_remove
    • First observedbreakpoint_set
    • First observedbreakpoint_set_data
    • First observedbreakpoint_set_exception
    • First observedbreakpoint_set_function
    • First observedbreakpoint_wait
    • First observeddebug_attach
    • First observeddebug_continue
    • First observeddebug_disconnect
    • First observeddebug_launch
    • First observeddebug_pause
    • First observeddebug_state
    • First observeddebug_step
    • First observeddebugger_health
    • First observedevaluate
    • First observedexception_autopsy
    • First observedhang_analyze
    • First observedprocess_read_output
    • First observedstack_explore
    • First observedstacktrace_get
    • First observedthreads_list
    • First observedtrace_get
    • First observedtrace_start
    • First observedtrace_stop
    • First observedvariables_get
    • First observedvariables_set

TDQS

A3.9/5.0
Disambiguation4/5

Tools are mostly distinct with clear purposes, though breakpoint_wait and debug_step with waitTimeoutSeconds have overlapping functionality. The detailed descriptions help differentiate them.

Naming Consistency5/5

All tools follow a consistent {domain}_{action} naming pattern using snake_case, making it predictable and easy for an agent to infer functionality.

Tool Count4/5

27 tools is high but justified by the complexity of debugging. Each tool covers a specific operation, though some consolidation might be possible without loss of clarity.

Completeness5/5

The tool surface is comprehensive, covering breakpoints, stepping, evaluation, stack inspection, variable manipulation, threading, output, tracing, and hang analysis – all essential for a debugging workflow.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/magna-nz/aspnetcore-debugger-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server