Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Debug embedded firmware on real hardware: J-Link probes, Cortex-M faults, RTT logs, GDB.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
JLINK_DEVICE, JLINK_SERIAL, SVD_PATH, JLINK_RTT_ADDR必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、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"
}
}
}
}ターミナルでこれを実行します
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-mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"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"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
JLINK_SERIAL envSVD_PATH envJLINK_RTT_ADDR envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント Klievan で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:JLINK_DEVICE
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.8.0)がレジストリに届いたのは11 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, FlyDocs
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
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.
Spec-driven development workflow: your agent works issues, sessions and the status lifecycle.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
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
冒頭だけを表示しています。続きはリポジトリで読めます