Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Debug embedded firmware on real hardware: J-Link probes, Cortex-M faults, RTT logs, GDB.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
JLINK_DEVICE, JLINK_SERIAL, SVD_PATH, JLINK_RTT_ADDRNecesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"jlink": {
"command": "npx",
"args": [
"-y",
"jlink-mcp"
],
"env": {
"JLINK_DEVICE": "your-value",
"JLINK_SERIAL": "your-value",
"SVD_PATH": "your-value",
"JLINK_RTT_ADDR": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add jlink --env JLINK_DEVICE=your-value --env JLINK_SERIAL=your-value --env SVD_PATH=your-value --env JLINK_RTT_ADDR=your-value -- npx -y jlink-mcpCompleta los valores vacíos antes de ejecutarlo.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"jlink": {
"command": "npx",
"args": [
"-y",
"jlink-mcp"
],
"env": {
"JLINK_DEVICE": "your-value",
"JLINK_SERIAL": "your-value",
"SVD_PATH": "your-value",
"JLINK_RTT_ADDR": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"jlink": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"jlink-mcp"
],
"env": {
"JLINK_DEVICE": "your-value",
"JLINK_SERIAL": "your-value",
"SVD_PATH": "your-value",
"JLINK_RTT_ADDR": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
JLINK_SERIAL envSVD_PATH envJLINK_RTT_ADDR envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub Klievan, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
Debes completar: JLINK_DEVICE
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.8.0) llegó al registro hace 11 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Node.js en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, sync. labs
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Lipsync videos, dub them into other languages, make talking videos and open sync. Studio.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
jlink-mcp
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:
> diagnose_crash
Core: PC=0x000000B8 SP=0x2003FFA8 R0=0x0000000A R1=0x000007FF R2=0x00000001 ... Status: XPSR=0x21000003 CONTROL=0x00000000 PRIMASK=0x00000000 ... Stack: MSP=0x2003FFA8 PSP=0x00000000
⚠ CPU is in exception handler (IPSR=0x00000003)
CFSR=0x01000000 HFSR=0x40000000 DFSR=0x00000000 MMFAR=0xe000edf8 BFAR=0xe000edf8
R0 = 0x0000000A R1 = 0x000007FF R12 = 0x00000000 LR = 0x000001F5 PC = 0x00000254 xPSR = 0x21000000
→ Faulting instruction at PC=0x00000254
[WRN] sensor_drv: sample out of range, clamping seq=2
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:
> read_peripheral FICR
FICR @ 0x10000000 INFO.PART @ 0x10000100 = 0x00052840 (read-only) [31:0] PART 0x52840 → N52840 INFO.RAM @ 0x1000010C = 0x00000100 (read-only) [31:0] RAM 0x100 → K256 INFO.FLASH @ 0x10000110 = 0x00000400 (read-only) [31:0] FLASH 0x400 → K1024
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:
/plugin marketplace add Klievan/jlink-mcp
/plugin install jlink-mcp
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.
Nix / NixOS — run directly from the flake without installing:
# Run standalone MCP server
nix run github:Klievan/jlink-mcp
Or add jlink-mcp and jlink-mcp-skills to your system configuration or flake:
# flake.nix inputs
inputs.jlink-mcp.url = "github:Klievan/jlink-mcp";
inputs.jlink-mcp.packages.''${system}.jlink-mcp inputs.jlink-mcp.packages.''${system}.jlink-mcp-skills
Note for NixOS users: Add your preferred probe tools (
segger-jlink/segger-jlink-headless,openocd, orgdb) toenvironment.systemPackagesor yourdevShell.segger-jlinkrequiresnixpkgs.config.allowUnfree = true;andservices.udev.packages = [ pkgs.segger-jlink ];for probe USB permissions.
Ask for check_setup. One call, and it says what is missing and what to do:
Not ready to debug yet.
OK probe software — J-Link software found at /Applications/SEGGER/JLink BLOCK probe — none detected (Connecting to J-Link via USB...FAILED). Check the USB cable. BLOCK target device — not set. Find the exact name with search_devices, then set_device. note SVD — not loaded, so peripheral reads stay raw hex. Set SVD_PATH to a CMSIS-SVD file.
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 |
set_serial_number | Change the probe serial number at runtime (for multi-probe setups) |
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.
| Tool | Description |
|---|---|
gdb_connect | Attach a GDB client (auto-starts the server; optional ELF for symbols) |
gdb_load | Load an ELF for debug symbols, optionally flashing it too |
gdb_backtrace | Call stack, optionally with locals in each frame |
gdb_command | Run any GDB command — print sensor_state, info threads, break main |
gdb_wait | Wait for the target to stop (after a continue or a breakpoint) |
gdb_disconnect | Detach the client, clearing breakpoints and debug hardware |
| Tool | Description |
|---|---|
rtt_connect | Connect to RTT telnet port |
rtt_disconnect | Disconnect from RTT |
rtt_read | Read recent log lines (ANSI stripped, Zephyr format parsed) |
rtt_search | Filter logs by level (err/wrn/inf/dbg), module, or regex |
rtt_send | Send data to device via RTT down-channel |
rtt_clear | Clear RTT buffer |
| Tool | Description |
|---|---|
telnet_proxy_start | Start TCP proxy that tees RTT for external detokenizers |
telnet_proxy_stop | Stop proxy |
telnet_proxy_status | Proxy connection status |
| `te
Solo se muestra el principio; lee el resto en el repo