Embedded hardware debugging workflow for probe-rs targets using embedded-debugger-mcp. Use when Codex or Claude Code needs to inspect debug probes, validate embedded debugger setup, start the MCP server, guide a user through ARM Cortex-M/RISC-V flashing/debugging/RTT workflows, or operate without installing an MCP client by using the CLI plus prompts.
npx skills add https://github.com/Adancurusul/embedded-debugger-mcp --skill embedded-debugger
Use the local embedded-debugger-mcp binary as the source of truth. Prefer CLI
checks first, then MCP tools when an MCP client is available.
embedded-debugger-mcp serve
embedded-debugger-mcp doctor, embedded-debugger-mcp probes list, and
embedded-debugger-mcp skill print-prompt.
before destructive actions such as flash erase or program.
Run these in order and report the exact outcome:
embedded-debugger-mcp doctor
embedded-debugger-mcp probes list
embedded-debugger-mcp config show
Use JSON for automation:
embedded-debugger-mcp doctor --json
embedded-debugger-mcp probes list --json
One tool set runs over two interchangeable engines, chosen at connect:
backend: "probe-rs" (default) — native probe-rs; supports flash and RTT.backend: "openocd" (experimental) — talks to an already-running openocdover its GDB port via openocd_address (default 127.0.0.1:3333). Use for
chips probe-rs does not cover well (e.g. Xtensa ESP32 via openocd-esp32).
Memory access and halt/run/step/reset are validated on real ESP32-S3; flash
and RTT are not available on this backend. Register reads currently use ARM
gdb register numbers, so PC/SP are wrong on Xtensa (known limitation).
diagnose_fault and unwind_exception are Cortex-M specific and do not
apply to Xtensa targets.
gdb_memory_map disable, otherwise it probes flash onthe GDB connect, fails, and REJECTS the connection. Example:
openocd -f board/esp32s3-builtin.cfg -c "gdb_memory_map disable".
The AI uses the same tools regardless of backend; only connect differs.
Use MCP tools for session-based operations:
list_probesconnect (add backend: "openocd" and openocd_address to use OpenOCD)probe_info, get_status, and read_memorydiagnose_fault: it reads the Cortex-M SCB faultregisters (CFSR/HFSR/MMFAR/BFAR/SHCSR/CPUID) plus PC/SP/LR and returns a
compact structured evidence bundle in one call. Halt the target first for
meaningful values; reason over the set fault bits yourself. Then call
unwind_exception with elf_path to map the crash to a source line
(full DWARF backtrace on probe-rs; faulting PC/LR on OpenOCD).
write_memory, flash_erase, flash_program, run_firmware (probe-rs)
rtt_attach, rtt_channels,rtt_read, rtt_write, rtt_detach (probe-rs)
disconnectYou are a capable model: prefer fetching ground truth over relying on memorized
or hardcoded chip data. This skill points you to sources; it does not embed
register tables. In order of authority:
registers are self-described by the GDB target description; memory is read
with read_memory; core identity from CPUID / the connected target.
from DWARF — use unwind_exception (pass elf_path) to map addresses to
file:line.
or fault register, find the peripheral's base in the memory-map chapter, add
the register offset, then read_memory. Search the vendor document for the
exact value; do not guess addresses from memory. CMSIS-SVD files are a
machine-readable source for register maps.
ARM architecture and identical across vendors — diagnose_fault reads them.
They do not exist on non-Cortex-M targets (e.g. Xtensa ESP32).
Do not hardcode or invent register/peripheral addresses. If a value is not
recoverable from the target, the ELF, or a cited datasheet, say so.
Behavior and target support depend on tool versions — check them before
concluding something is unsupported or broken:
(e.g. Xtensa support is comparatively new). Check embedded-debugger-mcp doctor.
for Xtensa ESP32, and some targets need flags like gdb_memory_map disable.
Check openocd --version.
probes listreports the connected probe.
mutating hardware operations.
ranges, and flash erase permissions.
tool result that produced the evidence.
For a reusable CLI+Skill prompt, read
references/default-prompt.md.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.
Build agentic applications with GitHub Copilot SDK. Use when embedding AI agents in apps, creating custom tools, implementing streaming responses, managing sessions, connecting to MCP servers, or creating custom agents. Triggers on Copilot SDK, GitHub SDK, agentic app, embed Copilot, programmable agent, MCP server, custom agent.
Coding Agent Session Search - unified CLI/TUI to index and search local coding agent history from Claude Code, Codex, Gemini, Cursor, Aider, ChatGPT, Pi-Agent, Factory, and more. Purpose-built for AI agent consumption with robot mode.
Destructive Command Guard - High-performance Rust hook for Claude Code that blocks dangerous commands before execution. SIMD-accelerated, modular pack system, whitelist-first architecture. Essential safety layer for agent workflows.
Makepad UI development skills for Rust apps: setup, patterns, shaders, packaging, and troubleshooting.
Secure environment variable management ensuring secrets are never exposed in Claude sessions, terminals, logs, or git commits
Prompt for generating an AGENTS.md file for a repository
Take adancurusul/embedded-debugger from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.