MCP server providing complete integration with Delve Go debugger, supporting all major debugging commands, program analysis, and execution control features
This MCP server provides 19 debugging tools with explicit schemas and descriptions in server.ts. However, significant quality gaps limit its production readiness. Strengths: all tools have explicit input schemas with JSON Schema format, all tool names follow verb_noun patterns (debug, attach, exec, setBreakpoint, etc.), and descriptions are present for all tools. Critical weaknesses: (1) descriptions are uniformly short (10-25 chars) and lack depth needed for LLM decision-making, e.g., 'Start debugging a Go package' vs. 'Start interactive debugging of a Go package; creates a debug session and returns session_id. Used when you need to inspect code execution, set breakpoints, or examine runtime state'; (2) parameters lack descriptions in many cases (e.g., buildFlags in debug tool has a description, but many tools have minimal parameter docs); (3) no output schemas are documented, tools return responses but LLMs cannot infer the structure, breaking tool composition and limiting chaining; (4) no error handling guidance, failures give no recovery hints to agents; (5) no parameter validation constraints (min/max, patterns, enums where applicable); (6) no tool annotations (readOnlyHint, destructiveHint, idempotentHint) to guide agent safety reasoning. The resource mechanism (ListResourcesRequestSchema, ReadResourceRequestSchema) is implemented to expose debug sessions as resources, which is good practice. However, all 19 tools lack the depth, error guidance, and output schemas required for reliable agent planning. Average per-tool score: 48.
Attach to a running process
Configure logging for Delve components
Continue program execution
Examine a core dump
Start a DAP (Debug Adapter Protocol) server
Start debugging a Go package
Evaluate an expression in current scope
Debug a precompiled binary
Descriptions are uniformly minimal (10-25 chars). LLMs cannot determine when to select a tool vs. alternatives or what context-dependent behavior to expect. Baseline for A-grade tools: 50-200 chars with actionable context.
No output schemas documented. Tools return responses (inferred from context), but LLMs cannot reason about response structure. This breaks tool composition, agents cannot plan multi-step sequences if they do not know what data is available after each call.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 25 | - | v1 |
Step over to next line
Remove a breakpoint
Replay an rr trace
Set the backend for debugging
Set a breakpoint in the debugged program
Step into function call
Step out of current function
Debug tests in a package
Trace program execution
List local variables in current scope
Get Delve version information
No error handling guidance. When a tool fails (e.g., debug session not found, breakpoint out of range), the response lacks recovery hints. LLMs receive errors but cannot determine if they should retry, call a different tool, or ask the user.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Many tools modify state (setBreakpoint, debug, attach) or execute code (continue, next, step), but agents have no machine-readable signal of the safety implications. This invites unintended state changes.
Parameter descriptions are missing or minimal. Example: 'debug' tool has buildFlags param with description 'Build flags to pass to the compiler', but no guidance on valid flag syntax, examples, or constraints. LLMs cannot reliably construct valid inputs.
No validation constraints on numeric/enum parameters. Example: 'line' in setBreakpoint is type number with no min/max; 'backend' in setBackend has an enum (good), but other params lack such constraints. Unbounded inputs risk invalid calls.
Sessionless command tools (continue, next, step, stepout) are stateful by design but lack idempotency guarantees. If an agent retries after a timeout, the tool may step multiple times. No documentation of retry-safety.
No resource chaining hints. For example, setBreakpoint requires a sessionId, but the description does not explain how to discover available sessions. It hints that sessions are exposed as resources (via ListResourcesRequestSchema), but agents may not make that connection.