Debug embedded firmware on real hardware: J-Link probes, Cortex-M faults, RTT logs, GDB.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Give AI hands to touch silicon.
An MCP server that lets LLMs debug embedded devices through SEGGER J-Link probes.
Real MCP tool calls against a real nRF52840-DK. Reproduce it yourself: npm run demo
Your firmware just crashed. One tool call:
Fault decoded, exception frame unwound, faulting instruction named, and the device's own log correlated β from one call, without a human reading a datasheet to find out what bit 24 of CFSR means.
Point it at your target's CMSIS-SVD file and peripheral registers stop being hex:
0x400 means 1024 KB of flash β but only if you know that, and an LLM guessing
at bit layouts is exactly the failure this avoids. The addresses come from the
vendor's own description, and the meanings from its enumerations.
Both transcripts are verbatim output from an nRF52840-DK in this project's hardware test suite.
jlink-mcp connects AI assistants (Claude, Copilot, etc.) to your embedded hardware via SEGGER J-Link debug probes using the Model Context Protocol.
Instead of manually typing J-Link commands, your AI assistant can:
Also supports OpenOCD (ST-Link, CMSIS-DAP, FTDI) and Black Magic Probe backends.
You need the SEGGER J-Link software
β that is what this server drives β a probe connected to an ARM Cortex-M
target, and Node 18+. For the other backends, OpenOCD or arm-none-eabi-gdb
instead.
Claude Code β from the plugin marketplace. This brings the
embedded-debugging skill along with the server, which is what stops an
assistant guessing at your hardware:
Any other agent β point it at this repository and ask it to set itself up:
Install the MCP server at https://github.com/Klievan/jlink-mcp and configure it for my board.
It will find what it needs here. If you would rather do it by hand, the server
is on npm and needs no build step: npx -y jlink-mcp, with JLINK_DEVICE set
to your target. mcp-config.json is a config you can paste.
VS Code β install the extension. It registers the server for Copilot Chat, Claude, and any MCP-aware client, so there is nothing to configure.
Ask for check_setup. One call, and it says what is missing and what to do:
You do not need your device's exact part number up front. search_devices
searches all 9800 that J-Link supports, by part number, manufacturer, or core.
| Tool | Description |
|---|---|
start_debug_session | One-call setup. Starts GDB server + connects RTT + returns boot log. |
snapshot | Captures full device state: registers, fault status, stack dump, RTT output. |
diagnose_crash | Auto-reads and decodes ARM Cortex-M fault registers (CFSR, HFSR, MMFAR, BFAR) with exception stack frame. |
| Tool | Description |
|---|---|
list_devices | Scan for connected probes and show the configured target |
set_device | Change the target device at runtime β no restart needed |
get_config | Current probe, target device, and GDB server state |
| Tool | Description |
|---|---|
device_info | Probe type, target CPU, compact register summary |
halt | Halt CPU |
resume | Resume CPU |
reset | Reset device. halt stops it at the reset vector; strategy picks a J-Link reset type, or omit it and let J-Link choose |
step | Single-step one instruction |
Set jlinkMcp.svdPath to your target's SVD β the same file Cortex-Debug takes
as svdFile. Vendors publish one per part.
| Tool | Description |
|---|---|
list_peripherals | Every peripheral and base address on the chip |
read_peripheral | Read a peripheral's registers and decode each one's bit fields by name |
decode_register | Decode one register β read from the device, or interpret a value you already have |
| Tool | Description |
|---|---|
read_memory | Read memory at address (clean hex dump output) |
write_memory | Write 32-bit value to address |
read_registers | All CPU registers in compact format |
read_register | Read specific register (PC, SP, R0-R12, etc.) |
| Tool | Description |
|---|---|
flash | Flash .hex/.bin/.elf firmware to device |
erase | Erase entire flash |
| Tool | Description |
|---|---|
set_breakpoint | Set hardware breakpoint at address |
clear_breakpoints | Clear all breakpoints |
| Tool | Description |
|---|---|
gdb_server_start | Start probe's GDB server |
gdb_server_stop | Stop GDB server + disconnect RTT |
gdb_server_status | GDB server, RTT, and proxy status |
Attach a real GDB client for symbol-aware work β backtraces, variable inspection, and stepping by source line rather than by instruction.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/j-link-mcp)<a href="https://allmcps.com/mcp/j-link-mcp"><img src="https://allmcps.com/api/badge/j-link-mcp?style=directory" alt="J Link MCP on AllMCPs" /></a>