Skip to main content
Glama
es617

dbgprobe-mcp-server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
DBGPROBE_BACKENDNoDebug probe backend. Future: openocd, pyocd.jlink
DBGPROBE_GDB_TRACENoLog all GDB RSP packets to file. Set to 1, true, or yes to enable.disabled
DBGPROBE_INTERFACENoDebug interface: SWD or JTAG.SWD
DBGPROBE_MCP_TRACENoJSONL tracing of every tool call. Set to 0, false, or no to disable.enabled
DBGPROBE_SPEED_KHZNoInterface clock speed in kHz.4000
DBGPROBE_JLINK_PATHNoExplicit path to JLinkExe (or JLink.exe on Windows).auto-detect
DBGPROBE_MCP_PLUGINSNoPlugin policy: all or comma-separated plugin names.disabled
DBGPROBE_JLINK_DEVICENoDefault target device string (e.g. nRF52840_xxAA). Can be overridden per-session.
DBGPROBE_MCP_LOG_LEVELNoPython log level (DEBUG, INFO, WARNING, ERROR). Logs go to stderr.WARNING
DBGPROBE_GDB_TRACE_FILENoPath for GDB RSP trace log (only when GDB_TRACE is on)./tmp/gdb_trace.log
DBGPROBE_MCP_TOOL_SEPARATORNoCharacter used to separate tool name segments. Set to _ for MCP clients that reject dots (e.g. Cursor)..
DBGPROBE_MCP_TRACE_PAYLOADSNoInclude memory data payloads in traced args (stripped by default).disabled
DBGPROBE_MCP_TRACE_MAX_BYTESNoMax payload chars before truncation (only when TRACE_PAYLOADS is on).16384
DBGPROBE_JLINK_GDBSERVER_PATHNoExplicit path to JLinkGDBServerCLExe.auto-detect

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
dbgprobe.probes.listA

List attached debug probes. Returns vendor/backend-specific info (serial number, description). For J-Link, enumerates via JLinkExe.

dbgprobe.connectA

Establish a debug probe session. Returns a session_id and the resolved configuration (backend, executable paths, defaults applied). The target is halted after connecting — this is inherent to the debug probe connection. Use dbgprobe.go to resume execution if needed. For symbol-aware debugging, attach an ELF file with dbgprobe.elf.attach after connecting — this enables breakpoints by function name and address-to-symbol resolution in status/step/halt responses. For register-level peripheral access, attach an SVD file with dbgprobe.svd.attach.

dbgprobe.eraseA

Erase target flash. With no address params: full chip erase (unlocks secured/read-protected devices like Nordic APPROTECT). With start_addr and end_addr: erase only that range. If session_id is provided, erases through the active GDB session (preferred — no USB contention). Without session_id, uses JLinkExe directly (for session-less erase, e.g. unlocking a secured device before connect).

dbgprobe.disconnectC

Close a debug probe session and release resources.

dbgprobe.resetA

Reset the target. Modes: 'soft' (default) — software reset and resume, 'hard' — hardware reset, 'halt' — reset and halt at first instruction.

dbgprobe.haltC

Halt the target CPU.

dbgprobe.goC

Resume target execution (run/go).

dbgprobe.flashA

Program a firmware image to the target. Supports .hex, .elf (address auto-detected) and raw .bin (requires explicit addr). Optionally verify and reset after flashing. If session_id is provided, tears down GDB, flashes, and restarts (preferred). Without session_id, uses JLinkExe directly (session-less, no debug session needed).

dbgprobe.mem.readA

Read memory from the target. Returns data in the requested format: 'hex' (hex string), 'base64', or 'u32' (array of 32-bit words, little-endian). If an SVD file is attached and the read is exactly one register wide, the response includes decoded SVD field names and values.

dbgprobe.mem.writeB

Write data to target memory. Provide data in one of: 'hex' (hex string), 'base64', or 'u32' (array of 32-bit words, little-endian).

dbgprobe.stepA

Single-step one instruction. Target must be halted first. Returns the new PC and stop reason.

dbgprobe.statusA

Query target state. Returns whether the target is running or halted, and if halted, the current PC and stop reason (e.g. breakpoint hit).

dbgprobe.breakpoint.setA

Set a breakpoint at a target address or symbol name. Software breakpoints (default) are handled by the debug probe and work on both flash and RAM. Hardware breakpoints use the CPU's FPB and are limited in number (typically 4-6). If 'symbol' is provided and an ELF is attached, resolves the symbol to an address.

dbgprobe.breakpoint.clearC

Clear a breakpoint at a target address.

dbgprobe.breakpoint.listB

List all active breakpoints for a session.

dbgprobe.connections.listA

List all open probe sessions with their status, backend, device, and config. Useful for recovering session IDs after context loss.

dbgprobe.elf.attachA

Parse an ELF file and attach it to a session. Enables symbol-based breakpoints (by function name), address-to-symbol resolution in status/step/halt responses, and symbol search. Re-attaching replaces the previous ELF.

dbgprobe.elf.infoA

Get ELF metadata for a session: file path, symbol count, entry point, sections. Returns null if no ELF is attached.

dbgprobe.elf.lookupA

Bidirectional symbol lookup. Provide 'symbol' for name-to-address, or 'address' for address-to-name+offset. Exactly one is required.

dbgprobe.elf.symbolsB

Search or list ELF symbols. Optional substring filter, optional type filter (FUNC, OBJECT, NOTYPE, etc.), default limit 50.

dbgprobe.svd.attachA

Parse an SVD file and attach it to a session. Enables named register reads/writes, field-level access, and auto-decode on mem.read. Re-attaching replaces the previous SVD.

dbgprobe.svd.infoB

Get SVD metadata for a session: device name, peripheral count. Returns null if no SVD is attached.

dbgprobe.svd.readB

Read a register or field by name. For registers (e.g. 'GPIO.OUT'), returns the raw value and all decoded fields. For fields (e.g. 'GPIO.PIN_CNF[3].PULL'), returns just the field value and enum name.

dbgprobe.svd.writeA

Write a raw value to a full register. No read-modify-write — the entire register is overwritten. For field-level writes, use svd.set_field.

dbgprobe.svd.set_fieldA

Read-modify-write a single register field. Reads the current register value, modifies the specified field, and writes back. Accepts enum names (e.g. 'PullUp') or integer values.

dbgprobe.svd.update_fieldsA

Batch read-modify-write: update multiple fields in one register with a single read and write. Accepts a dict of field names to values (enum names or integers).

dbgprobe.svd.list_peripheralsC

List all peripherals defined in the attached SVD.

dbgprobe.svd.list_registersB

List all registers for a peripheral.

dbgprobe.svd.list_fieldsB

List all fields for a register.

dbgprobe.svd.describeB

Detailed description of a peripheral, register, or field. Includes description, access type, reset value, and enum values as appropriate.

dbgprobe.rtt.startA

Start RTT (Real-Time Transfer) on a connected session. Connects to the JLinkGDBServer RTT telnet port and begins buffering target output (channel 0). Optional address hint for the RTT control block in target RAM.

dbgprobe.rtt.stopC

Stop RTT and disconnect from the telnet port.

dbgprobe.rtt.readA

Read buffered RTT data from the target. Returns data as text (UTF-8 by default) or hex. Non-blocking — returns whatever is buffered, waiting up to timeout seconds for initial data.

dbgprobe.rtt.writeA

Write data to the target via RTT channel 0. Input is text (UTF-8 by default) or hex-encoded bytes.

dbgprobe.rtt.statusA

Return RTT status: active, bytes buffered, total read/written.

dbgprobe.trace.statusB

Return tracing config and event count.

dbgprobe.trace.tailB

Return last N trace events (default 50).

dbgprobe.plugin.listA

List loaded plugins with their tool names and metadata. Each plugin may include a 'meta' dict with matching hints like device_name_contains or description — use these to determine which plugin fits the connected device. Also returns whether plugins are enabled and the current policy. Plugins require DBGPROBE_MCP_PLUGINS env var — set to 'all' for all or 'name1,name2' to allow specific plugins. If disabled, tell the user to set this variable when adding the MCP server.

dbgprobe.plugin.reloadA

Hot-reload a plugin by name. Re-imports the module and refreshes tools. Requires DBGPROBE_MCP_PLUGINS env var to be set.

dbgprobe.plugin.templateA

Return a Python plugin template. Use this when creating a new plugin. Optionally pre-fill with a device name. Save the result to .dbgprobe_mcp/plugins/.py, fill in the tools and handlers, then load with dbgprobe.plugin.load.

dbgprobe.plugin.loadB

Load a new plugin from a file or directory path. Requires DBGPROBE_MCP_PLUGINS env var to be set.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/es617/dbgprobe-mcp-server'

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