ASPNET Core Debugging MCP Server
The ASP.NET Core Debugging MCP Server lets an AI agent interactively debug .NET/ASP.NET Core applications across Linux, macOS, and Windows using netcoredbg via the Debug Adapter Protocol — enabling real runtime inspection, mutation, and analysis instead of guesswork.
Session Management
Launch (
debug_launch), attach to (debug_attach), and disconnect from (debug_disconnect) a .NET debuggeeInspect current session state (
debug_state) and verify debugger health/platform info (debugger_health)
Execution Control
Continue (
debug_continue), pause (debug_pause), and single-step into/over/out of code (debug_step)Wait for a breakpoint hit with automatic context (
breakpoint_wait)
Breakpoints
Set line (
breakpoint_set), function (breakpoint_set_function), exception (breakpoint_set_exception), and data/watch (breakpoint_set_data) breakpoints — with optional conditions, hit counts, and logpointsList (
breakpoint_list) and remove (breakpoint_remove) breakpoints
State Inspection & Mutation
List threads (
threads_list), get call stacks (stacktrace_get), and inspect variables (variables_get) with recursive expansionMutate variable values at runtime (
variables_set) and evaluate C# expressions in a stack frame context (evaluate)Explore the full stack in one call — all frames, locals, and an ASCII tree (
stack_explore)
Composite Diagnostics
Exception autopsy: full exception chain + stack frames + locals + source snippet in one call (
exception_autopsy)Hang/deadlock analysis: auto-pause and classify every thread's blocking pattern (Monitor, Task, Semaphore, async, etc.) (
hang_analyze)Request tracing: auto-instrument methods to capture arguments and call chains at near-normal speed without manual breakpoints (
trace_start,trace_get,trace_stop)
Process I/O
Read buffered stdout/stderr output from the debuggee (
process_read_output)
Provides tools for debugging .NET and ASP.NET Core applications, including launching, breakpoints, stepping, inspection, expression evaluation, exception analysis, hang analysis, and request tracing.
ASP.NET Core Debugging MCP Server
The cross-platform .NET debugging MCP — runs on Linux, macOS, and Windows.
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
See it in action — 5 conversations showing the agent at work
How it works — architecture diagram
Use it in 3 steps — install + register with Claude
Platforms — supported OS / architecture matrix
Tools (27) — full tool surface grouped by purpose
How this compares — vs. other .NET / DAP MCPs
Docs — install, examples, tool reference, limits
Related MCP server: mcp-netcoredbg
See it in action
Why is my EF Core query returning empty?
You
GET /users/activereturns[], but I know there are active users in the DB. What's the query actually doing?
Claude
I'll pause inside
UserRepository.GetActiveAsyncand read what EF Core actually sent.SELECT u.* FROM Users AS u WHERE u.IsActive = 1 AND u.TenantId = @__tenantId_0 @__tenantId_0 = 0The SQL is correct; the parameter is wrong.
TenantId = 0, but your tenants start at 1.ICurrentUser.TenantIdis being read in the repository constructor — before the request scope resolves it. Fix: read the tenant inside the query (or apply it viaHasQueryFilterwithIHttpContextAccessor) instead of capturing it at construction.
Why is my JWT auth returning 401?
You
/admin/usersis 401-ing for Anna, but her token looks valid to me. What does the auth handler actually see?
Claude
I'll break inside
JwtBearerHandler.HandleAuthenticateAsyncafter 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
discountat 100 fixes the bug. Test that hypothesis without me touching the code.
Claude
I'll pause inside
ApplyDiscounton the next checkout and mutatediscountin place.Paused at PricingService.cs:47 discount = 250 ← bug: two promos stacked Set discount = 100, resumed. Result: subtotal = $400 final = $300 refund-service complaints: 0Capping at 100 unblocks the flow downstream. Hypothesis confirmed — time to make the edit for real and decide where the cap belongs (
ApplyDiscountitself, or upstream inPromoEngine).
My app is hung — what's actually blocking?
You
/reportshangs 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 anotherSqlConnectionfrom 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:awaitall the way down inReportService, or don't hold a connection across the awaited call.
Where is a slow request actually spending its time?
You
GET /order/42takes 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 cachingEnrichmentService.Enrichor moving it off the request path.
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 processA 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
Install the tool — needs the .NET 10 SDK.
dotnet tool install -g AspNetCoreDebuggerMcp --prereleaseThe package bundles prebuilt
netcoredbgforlinux-x64,linux-arm64,win-x64,osx-x64, andosx-arm64— no separate install needed.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" } } }Just chat with Claude.
/mcpconfirms 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 |
| Start, attach to, or stop a debug session |
Execution |
| Drive the debuggee and wait for it to stop |
Breakpoints |
| Line, function, exception, and data breakpoints |
Inspection |
| Examine and mutate program state |
Exception Autopsy |
| One call: exception chain + top frames + locals + source snippet |
Hang / Deadlock |
| Auto-pause, classify each thread's blocking pattern (Monitor / Task / Semaphore / async / …) |
Request Tracing |
| Server-side request tracing — auto-instrument a call chain and capture arguments at every entry |
Process I/O |
| Drain the debuggee's stdout/stderr |
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 |
AGPL-3.0 | Linux only (Win/macOS planned) | ICorDebug direct, Roslyn code nav | Native, .NET 10 | |
— | Cross-platform | DAP | Via external debugger | |
— | Cross-platform | DAP | Via external debugger | |
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
Install & configure — 3 steps, both Claude Code & Desktop, troubleshooting
What you can do with it — 7 things you can ask Claude to do for you
Full tool reference — every parameter on every tool
Known limits — when not to use this tool, adapter & tracing limits
Contributing — repo layout, tests, dev loop
License
MIT — see LICENSE. Built on netcoredbg (MIT) and the ModelContextProtocol SDK (MIT).
Available Tools
27 toolsbreakpoint_listA
List all currently set breakpoints (line, function, and exception filters).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Breakpoint id returned from breakpoint_set or breakpoint_set_function. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | Line number (1-based) to break on. | |
| condition | No | Optional expression — break only when this evaluates to true. | |
| logMessage | No | If set, makes this a logpoint (tracepoint): the message is logged and execution continues without pausing. Use {expr} interpolation. | |
| sourcePath | Yes | Absolute path to the source file. | |
| hitCondition | No | Optional hit count expression (e.g. ">5") — break only on the Nth+ hit. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the variable to watch. | |
| accessType | No | Access type: "write" (default), "read", or "readWrite". | write |
| variablesReference | Yes | variablesReference of the container holding the variable (from variables_get). |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| filters | Yes | Filter names. Empty array clears exception breakpoints. |
TDQS
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.
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.
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.
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.
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.
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").
| Name | Required | Description | Default |
|---|---|---|---|
| condition | No | Optional condition expression. | |
| functionName | Yes | Fully-qualified function name to break on. | |
| hitCondition | No | Optional hit count expression. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| timeoutSeconds | No | Maximum seconds to wait. Defaults to 30. | |
| maxLocalsPerScope | No | Cap on locals returned per scope on the top frame. Default 30. Pass 0 to omit locals entirely. | |
| maxRecentOutputLines | No | Cap on recent debuggee output lines included with the stop (peeked, not drained). Default 50. Pass 0 to omit output. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| processId | Yes | System process id (PID) of the .NET process to attach to. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| threadId | No | Thread id to continue. If omitted, uses the last thread that stopped. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | No | Working directory for the program (defaults to the program's directory). | |
| env | No | Environment 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. | |
| args | No | Command-line arguments to pass to the program. | |
| program | Yes | Path to the .NET program to debug (.dll or apphost executable). | |
| stopAtEntry | No | If true, the program pauses at entry instead of running until the first breakpoint. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| threadId | No | Thread id to pause. If omitted, uses the last thread that stopped. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Step kind: "in", "over", or "out". | |
| threadId | No | Thread id to step. If omitted, uses the last thread that stopped. | |
| maxLocalsPerScope | No | 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. | |
| waitTimeoutSeconds | No | Seconds to wait for the resulting stop. 0 (default) returns immediately after issuing the step. > 0 blocks and returns the full enriched stop snapshot. | |
| maxRecentOutputLines | No | 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. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| frameId | No | Frame id from stacktrace_get. Defaults to the global (no-frame) context. | |
| expression | Yes | Expression to evaluate (e.g. "user.Id", "items.Count"). |
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| threadId | No | Thread id. Defaults to the last-stopped thread. | |
| frameCount | No | How many top stack frames to include. Default 20. | |
| maxRecentOutputLines | No | Cap on recent debuggee output lines included with the autopsy (peeked, not drained). Default 50. Pass 0 to omit output. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topFramesPerThread | No | Top frames per thread to fetch. Default 10. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Filter by category: "stdout", "stderr", "console", or omit for all. | |
| maxLines | No | Maximum lines to drain in this call. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| threadId | No | Thread id. Defaults to the last-stopped thread. | |
| maxFrames | No | Maximum frames to include. Default 10. | |
| maxLocalsPerFrame | No | Maximum locals per frame. Default 10. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| raw | No | If true, return raw DAP frames (no async flattening, no infrastructure filtering). | |
| levels | No | Maximum frames to return. | |
| threadId | No | Thread id. Defaults to the last-stopped thread. | |
| startFrame | No | Skip this many top frames (0 = include the topmost). |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| maxEvents | No | Return only the most recent N events. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| methods | Yes | Function names to trace (e.g. "Namespace.Class.Method"). Same format as breakpoint_set_function. | |
| captureStack | No | Capture top stack at each hit. Default true. | |
| captureLocals | No | Capture top-frame locals at each hit. Default true. | |
| includeExceptions | No | Also capture unhandled exceptions during the trace. Default true. | |
| maxFramesPerEvent | No | Maximum stack frames per captured event. Default 10. | |
| maxLocalsPerFrame | No | Maximum locals per captured event. Default 10. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Recursive expansion depth. 1 = just the top-level variables (default). 2 = expand one level into compound types. Higher = deeper. | |
| frameId | No | Frame id from stacktrace_get. Defaults to the topmost frame of the last-stopped thread. | |
| maxChildren | No | Maximum children to return at each level. Default 50. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | The new value as a C# expression (e.g. "42", "\"hello\""). | |
| frameId | No | Frame id from stacktrace_get. Defaults to the global (no-frame) context. | |
| expression | Yes | The lvalue expression to assign to (e.g. "userId", "user.Name"). |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v1.2.0- Changed
debug_step3 fields changed- added
Input 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" ] } - added
Input 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" ] } - added
Input 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" ] }
- Changed
exception_autopsy1 field changed- added
Input 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" ] }
1 tool update
v1.1.1- Changed
breakpoint_wait2 fields changed- added
Input 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" ] } - added
Input 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" ] }
27 tool updates
v0.1.0- First observed
breakpoint_list - First observed
breakpoint_remove - First observed
breakpoint_set - First observed
breakpoint_set_data - First observed
breakpoint_set_exception - First observed
breakpoint_set_function - First observed
breakpoint_wait - First observed
debug_attach - First observed
debug_continue - First observed
debug_disconnect - First observed
debug_launch - First observed
debug_pause - First observed
debug_state - First observed
debug_step - First observed
debugger_health - First observed
evaluate - First observed
exception_autopsy - First observed
hang_analyze - First observed
process_read_output - First observed
stack_explore - First observed
stacktrace_get - First observed
threads_list - First observed
trace_get - First observed
trace_start - First observed
trace_stop - First observed
variables_get - First observed
variables_set
TDQS
Tools are mostly distinct with clear purposes, though breakpoint_wait and debug_step with waitTimeoutSeconds have overlapping functionality. The detailed descriptions help differentiate them.
All tools follow a consistent {domain}_{action} naming pattern using snake_case, making it predictable and easy for an agent to infer functionality.
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.
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
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
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
MCP server for AI dialogue using various LLM models via AceDataCloud
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server to expose VS Code editing features to an LLM for AI coding998391MIT
- AlicenseBqualityDmaintenanceAn MCP server that enables AI agents to debug .NET applications using netcoredbg. It supports core debugging tasks like setting breakpoints, stepping through code, and inspecting variables or stack traces.1MIT
- FlicenseAqualityDmaintenanceMinimal MCP server bridging a Roslyn C# language server to AI agents, exposing tools for diagnostics, call hierarchy, and type hierarchy.1-
- AlicenseNot gradedqualityAmaintenanceMCP server that lets AI coding tools control and observe a running Node.js process through the chrome devtools protocol (CDP), via a lightweight Debug Adapter Protocol (DAP) bridge.272MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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