Agent-native stateful control plane for GDB with MCP server interface for debugger automation
GDB-AI presents 18 tools with significant structural issues. While tool names follow verb_noun convention (gdb_session, gdb_run, gdb_inspect), descriptions are extremely dense (200-400+ chars) and lack clarity on WHEN to use each tool vs. alternatives. Critical gap: input schemas are not visible in the provided source code, only action enums are shown. Parameter descriptions are absent for most tools. The gdb_raw tool exposes dangerous MI/console commands with minimal guardrails. No output schemas documented. Error handling guidance is missing. This is a domain-expert tool (GDB debugging) but fails basic LLM-usability patterns.
Probe agent capabilities and protocol compliance.
Execute multiple inspection views in a single bounded request.
Breakpoints/watchpoints; module_offset = load bias + ELF vaddr.
Disassemble code at specified addresses or functions.
Evaluate expressions in the current context; returns typed values with optional children and history.
Wait for and retrieve debugger events.
No input schemas visible in source code. All 18 tools show only action enums; parameter types, constraints, and descriptions are missing. Cannot verify LLM can infer valid inputs.
Descriptions are 200 - 400+ characters, dense with jargon (e.g., 'module_offset = load bias + ELF vaddr'), and lack WHEN/WHY guidance. LLMs cannot distinguish gdb_session (create vs launch vs attach) without clearer intent signals.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 37 | 2026-07-28+ | v2 |
Read one bounded view; stack include_locals=true adds typed locals and aggregate values. threads with stack_depth returns thread identities and their stacks at one stop (limit/offset page threads; include_locals is supported). modules includes main-executable mappings. symbols takes query plus functions|types|variables kind and optional type_layout with field offsets. tracked samples configured tracking; snapshot accepts inspect for extra reads. observation retrieves snapshot_id; diff compares before_snapshot_id and after_snapshot_id without rereading the target.
Manage inferior process I/O: read stdin/stdout, write to stdin, send EOF, resize PTY.
Inspect and monitor kernel state for kernel debugging.
Read, write, search, and compare memory regions; artifact retrieves large read results.
Arm a temporary breakpoint on a stopped or running target; restart=true reruns the current target first, and a stopped target resumes automatically. input is PTY data and trigger.command starts one host process after arming and returns bounded stdout/stderr; resumed policies wait for it within the remaining budget. Skip hits and capture expressions, stack, memory, output, and inspect views; continue_to_stop instead inspects the following stop/exit. kernel_module_offset resolves a loaded kernel module.
Execute raw GDB MI commands or console commands (admin-only).
Read and write CPU registers.
Run with exact input/output; continue and step wait for stop-or-exit. restart relaunches directly; add inspect to await and inspect its stop. inspect combines bounded views, read-only evaluate, memory, disassembly, tracked samples, and historical diff at the resulting stop.
launch without session_id creates a session; keep result.session.session_id. Optional breakpoints install persistent software breakpoint locations before running; with stop omitted, launch runs to their first stop. With inspect it waits and returns those views at the resulting stop. Use create only for other pre-launch setup, or pass an existing session_id. list returns compact session summaries; status reads one session. Programs run unchanged with argument-only argv; patch their runtime first when needed. Relative paths use workspace roots; use first_instruction only for pre-run setup. Remote uses connect_remote with endpoint and optional executable.
Query and update signal handling policies.
Configure expression and memory tracking for continuous monitoring across stops.
Create, inspect, and manage value objects for expression tracking and history.
gdb_raw tool exposes raw MI and console commands with minimal guardrails ('admin-only' noted but no permission gate visible in code). Destructive operations (kill, force_abort) lack confirmation/dry-run patterns.
No output schemas documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., session_id from gdb_session.launch, or thread_id from gdb_inspect.threads).
Error handling guidance absent. No recovery hints (e.g., 'If session not found, call gdb_session list first'). Agents cannot self-correct on failures.