# jlink-mcp

MCP server for SEGGER J-Link debug probes — LLM-driven embedded debugging with RTT, GDB server, and Trice/Pigweed support

- **Type:** MCP server
- **Trust:** 60/100 (B), scored on the package rubric
- **Verification:** community-indexed — nobody has claimed this listing
- **Version:** 0.7.0
- **Author:** Unknown
- **License:** MIT
- **npm:** jlink-mcp
- **Source:** https://github.com/Klievan/jlink-mcp
- **Compatible clients:** claude-code, cursor, copilot, gemini (basis: transport)

## Trust

60/100 (B), scored on the package rubric
- Publisher verified: no
- Install scripts: nothing suspicious found
- Prompt-injection scan: not run
- Obfuscation scan: not run
- Evidence age: 0 days

## Security scan

- **Status:** clean
- **Scanned:** 2026-08-30T00:17:29.947Z
- **Version scanned:** 0.7.0
- **CVEs:** none found by OSV at scan time

## Tools

40 declared. Statically extracted from the shipped source — a floor on the surface, not a census.
- `list_devices` — Scan for connected PROBES — the debuggers plugged into this machine, not target chips. Despite the name it does not list target devices; use search_devices for 
- `check_setup` — Check that everything needed to debug is in place: the probe software, a connected probe, a target
- `set_svd_path` — Point the server at a CMSIS-SVD file for the target at runtime, so peripheral reads come back
- `set_rtt_address` — Tell the server where the firmware's RTT control block is (its _SEGGER_RTT symbol), at runtime.
- `search_devices` — Search the device names this J-Link installation accepts, by part number, manufacturer, or core.
- `set_device` — Set the target device name at runtime. Required before any debugging commands will work.
- `start_debug_session`
- `snapshot` — Capture complete device state: CPU registers (compact), fault status, recent RTT output, and stack dump.
- `diagnose_crash` — Auto-read and decode ARM Cortex-M fault registers (CFSR, HFSR, MMFAR, BFAR), exception stack frame, and recent errors.
- `device_info`
- `halt` — Halt the target CPU
- `resume` — Resume the target CPU
- `reset` — Reset the target device. Halting leaves the core stopped at the reset vector,
- `step` — Step one CPU instruction
- `read_memory` — Read memory from the target. Returns clean hex dump.
- `write_memory` — Write a 32-bit value to memory
- `read_registers` — Read all CPU registers (compact format, FP only if non-zero).
- `read_register` — Read a specific CPU register by name
- `flash` — Flash firmware to the target device
- `erase` — Erase target flash memory
- `list_peripherals` — List the target's peripherals and base addresses, from its CMSIS-SVD description. Requires an SVD file to be configured.
- `read_peripheral` — Read every register of a peripheral from the target and decode each one's bit fields by name. This is read_memory plus the meaning of what was read.
- `decode_register` — Decode a value into named bit fields using the target's SVD. Reads from the device unless a value is supplied — useful for interpreting a number you already hav
- `set_breakpoint` — Set a hardware breakpoint
- `clear_breakpoints` — Clear all breakpoints, including any left armed in the debug hardware by an earlier session
- `gdb_server_start`
- `gdb_server_stop`
- `gdb_server_status` — Get GDB server, RTT, and telnet proxy status
- `gdb_connect` — Connect a GDB client to the running GDB server. Enables source-level debugging: backtraces, variable inspection, conditional breakpoints, stepping by source lin
- `gdb_command` — Send any GDB command and get the response. For execution commands (continue, step, next, finish, until), blocks until the target stops or times out. If the targ
- `gdb_wait` — Poll for target stop after a continue/step that timed out. Returns the stop reason (breakpoint hit, signal, finished stepping, etc.) when the target halts.
- `gdb_load` — Load an ELF file into GDB. By default loads symbols only (for source-level debugging: backtraces with file:line, variable names). Set flash=true to also program
- `gdb_backtrace` — Get a stack backtrace. With debug symbols loaded, shows function names, file paths, and line numbers.
- `gdb_disconnect` — Disconnect the GDB client (does not stop the GDB server)
- `rtt_connect`
- `rtt_disconnect` — Disconnect from RTT
- `rtt_read` — Read RTT log lines (clean, parsed Zephyr format). Non-destructive — reading does not consume
- `rtt_search` — Search/filter RTT logs by level, module, or regex
- `rtt_send` — Send data to device via RTT down-channel
- `rtt_status` — Read SEGGER's RTT control block on the target: is it initialised, how much has the firmware

## Install

**Verdict: review** — Installable, but 1 thing to check first: No publisher has proved control of this listing; it is indexed, not vouched for.
**Cautions** (coverage gaps and advisories — never blocking)
- No publisher has proved control of this listing; it is indexed, not vouched for.
**Config** (claude-code):
```json
"{\n  \"mcpServers\": {\n    \"jlink\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"jlink-mcp\"\n      ]\n    }\n  }\n}"
```

## Blast radius

Extensive to critical — no credential declaration found, from the publisher, the upstream registry, or the README. Known so far: runs commands; runs on your machine.
- Floor 45, ceiling 73 (tier: unknown)
- `unknown` means the floor and ceiling land in different bands — not measured enough to name one. It does not mean low.
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/jlink-mcp
- Install plan: https://forgeregistry.com/api/v1/packages/jlink-mcp/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/jlink-mcp
- HTML page: https://forgeregistry.com/registry/jlink-mcp
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
