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.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม 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": "ใส่ค่าของคุณ",
"JLINK_SERIAL": "ใส่ค่าของคุณ",
"SVD_PATH": "ใส่ค่าของคุณ",
"JLINK_RTT_ADDR": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add jlink --env JLINK_DEVICE='ใส่ค่าของคุณ' --env JLINK_SERIAL='ใส่ค่าของคุณ' --env SVD_PATH='ใส่ค่าของคุณ' --env JLINK_RTT_ADDR='ใส่ค่าของคุณ' -- npx -y jlink-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"jlink": {
"command": "npx",
"args": [
"-y",
"jlink-mcp"
],
"env": {
"JLINK_DEVICE": "ใส่ค่าของคุณ",
"JLINK_SERIAL": "ใส่ค่าของคุณ",
"SVD_PATH": "ใส่ค่าของคุณ",
"JLINK_RTT_ADDR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"jlink": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"jlink-mcp"
],
"env": {
"JLINK_DEVICE": "ใส่ค่าของคุณ",
"JLINK_SERIAL": "ใส่ค่าของคุณ",
"SVD_PATH": "ใส่ค่าของคุณ",
"JLINK_RTT_ADDR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
JLINK_SERIAL envSVD_PATH envJLINK_RTT_ADDR envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub Klievan ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: JLINK_DEVICE
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.8.0) เข้า registry 11 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Rystic
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
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.
Start, seed, clock, inspect and diff Rystic API simulators from your agent.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ 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
ตัดมาแค่ช่วงต้น อ่านต่อใน repo