MCP Servers

模型上下文协议服务器、框架、SDK 和模板的综合目录。

An embedded probe MCP-server

创建于 4/3/2026
更新于 about 5 hours ago
Repository documentation and setup instructions

jlink-mcp logo

jlink-mcp

Give AI hands to touch silicon.
An MCP server that lets LLMs debug embedded devices through SEGGER J-Link probes.

MCP Server TypeScript J-Link ARM Cortex-M

GitHub Stars License npm npm downloads VSCode Marketplace Smithery MCP Compatible


What is this?

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:

  • Read registers and memory to understand device state
  • Flash firmware and reset devices
  • Stream RTT logs and search them by level/module/regex
  • Diagnose crashes by auto-decoding ARM Cortex-M fault registers
  • Control execution — halt, step, resume, breakpoints
  • Start GDB servers for full debugging sessions

Also supports OpenOCD (ST-Link, CMSIS-DAP, FTDI) and Black Magic Probe backends.

Quick Start

Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "jlink": {
      "command": "node",
      "args": ["/path/to/jlink-mcp/out/mcp/standalone.js"],
      "env": {
        "JLINK_DEVICE": "nRF52840_XXAA"
      }
    }
  }
}

Claude Code

Add .mcp.json to your project root:

{
  "mcpServers": {
    "jlink": {
      "command": "node",
      "args": ["out/mcp/standalone.js"],
      "cwd": "/path/to/jlink-mcp",
      "env": {
        "JLINK_DEVICE": "nRF52840_XXAA"
      }
    }
  }
}

VSCode Extension

Install the extension (requires VSCode 1.99+). It auto-registers the MCP server via the native vscode.lm API. Configure the device in settings:

jlinkMcp.jlink.device = "nRF52840_XXAA"

Copilot Chat and Claude in VSCode will automatically discover all 31 tools.

From Source

git clone https://github.com/Klievan/jlink-mcp.git
cd jlink-mcp
npm install
npm run compile
JLINK_DEVICE=nRF52840_XXAA node out/mcp/standalone.js

Tools (31)

Workflow Tools (start here)

| 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. |

Device Control

| Tool | Description | |------|-------------| | device_info | Probe type, target CPU, compact register summary | | halt | Halt CPU | | resume | Resume CPU | | reset | Reset device (optionally halt after reset) | | step | Single-step one instruction |

Memory & Registers

| 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.) |

Flash

| Tool | Description | |------|-------------| | flash | Flash .hex/.bin/.elf firmware to device | | erase | Erase entire flash |

Breakpoints

| Tool | Description | |------|-------------| | set_breakpoint | Set hardware breakpoint at address | | clear_breakpoints | Clear all breakpoints |

GDB Server

| 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 |

RTT (Real-Time Transfer)

| 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 |

Telnet Proxy (Trice / Pigweed)

| 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 | | telnet_proxy_read | Read raw proxy buffer |

Advanced

| Tool | Description | |------|-------------| | probe_command | Execute raw probe commands | | get_config | Current probe and server configuration |

Multi-Probe Support

jlink-mcp supports multiple debug probe backends through a common ProbeBackend abstraction:

| Backend | Probe Hardware | Status | RTT Support | |---------|---------------|--------|-------------| | J-Link | SEGGER J-Link, J-Link OB, J-Link EDU | Production | Yes | | OpenOCD | ST-Link, CMSIS-DAP, FTDI, J-Link (via OpenOCD) | Beta | No | | Black Magic Probe | BMP (built-in GDB server on serial) | Beta | No | | probe-rs | All probe-rs supported probes | Planned | Planned |

Selecting a Backend

# J-Link (default)
PROBE_TYPE=jlink JLINK_DEVICE=nRF52840_XXAA node out/mcp/standalone.js

# OpenOCD with ST-Link
PROBE_TYPE=openocd \
  OPENOCD_INTERFACE=interface/stlink.cfg \
  OPENOCD_TARGET=target/stm32f4x.cfg \
  node out/mcp/standalone.js

# Black Magic Probe
PROBE_TYPE=blackmagic \
  BMP_SERIAL_PORT=/dev/ttyACM0 \
  node out/mcp/standalone.js

Architecture

┌─────────────────────────────────────────────────────┐
│                    MCP Client                        │
│          (Claude, Copilot, any MCP client)           │
└──────────────────────┬──────────────────────────────┘
                       │ JSON-RPC over stdio
┌──────────────────────▼──────────────────────────────┐
│                  jlink-mcp                           │
│                                                      │
│  ┌──────────┐  ┌──────────┐  ┌───────────────────┐  │
│  │ 31 Tools │  │4 Resources│  │    4 Prompts      │  │
│  └────┬─────┘  └────┬─────┘  └───────┬───────────┘  │
│       │              │                │              │
│  ┌────▼──────────────▼────────────────▼───────────┐  │
│  │              ProbeBackend                       │  │
│  │  ┌─────────┐ ┌─────────┐ ┌──────────────────┐  │  │
│  │  │ J-Link  │ │ OpenOCD │ │ Black Magic Probe│  │  │
│  │  └────┬────┘ └────┬────┘ └────────┬─────────┘  │  │
│  └───────┼───────────┼───────────────┼─────────────┘  │
│          │           │               │              │
│  ┌───────▼───┐ ┌─────▼────┐ ┌───────▼──────────┐  │
│  │ RTTClient │ │TelnetProxy│ │  ProcessManager  │  │
│  └───────────┘ └──────────┘ └──────────────────┘  │
└─────────────────────────────────────────────────────┘
                       │
          ┌────────────▼────────────┐
          │    Debug Probe (USB)    │
          │  → Target MCU (SWD/JTAG)│
          └─────────────────────────┘

Source Layout

src/
├── probe/
│   ├── backend.ts      # ProbeBackend abstract class + shared utilities
│   ├── jlink.ts        # SEGGER J-Link implementation
│   ├── openocd.ts      # OpenOCD implementation
│   ├── blackmagic.ts   # Black Magic Probe implementation
│   └── factory.ts      # Probe creation from config
├── mcp/
│   ├── server.ts       # MCP server (31 tools, 4 resources, 4 prompts)
│   └── standalone.ts   # Standalone entry (stdio transport)
├── rtt/
│   └── rtt-client.ts   # RTT client with ANSI stripping + Zephyr log parsing
├── telnet/
│   └── telnet-proxy.ts # TCP proxy for Trice/Pigweed detokenizer
├── utils/
│   ├── config.ts       # VSCode settings / env var config
│   ├── logger.ts       # Logging
│   └── process-manager.ts # Child process lifecycle
└── extension.ts        # VSCode extension + MCP provider registration

Design Decisions (LLM-Optimized)

This server was built by having an AI use it against real hardware, then fixing every friction point:

  • Output parsing strips 40+ lines of J-Link connection banners. Only data comes back.
  • Registers are compact: Core: PC=0xBF54 SP=0x20062880 ... instead of 65 raw lines.
  • FP registers only shown if non-zero (they're usually all zeros).
  • RTT output has ANSI escape codes stripped and Zephyr log format parsed into structured fields.
  • Composite tools (start_debug_session, snapshot, diagnose_crash) replace multi-step workflows with single calls.
  • Fault decoding is automatic — reads CFSR/HFSR/MMFAR/BFAR and explains each bit.
  • rtt_search lets you find errors without reading the entire log.

Environment Variables

J-Link

| Variable | Default | Description | |----------|---------|-------------| | PROBE_TYPE | jlink | Probe backend: jlink, openocd, blackmagic | | JLINK_DEVICE | Unspecified | Target device (e.g., nRF52840_XXAA, STM32F407VG) | | JLINK_INSTALL_DIR | Auto-detect | Path to SEGGER J-Link installation | | JLINK_INTERFACE | SWD | Debug interface: SWD or JTAG | | JLINK_SPEED | 4000 | Connection speed in kHz | | JLINK_SERIAL | | J-Link serial number (multi-probe) | | JLINK_GDB_PORT | 2331 | GDB server port | | JLINK_RTT_PORT | 19021 | RTT telnet port |

OpenOCD

| Variable | Default | Description | |----------|---------|-------------| | OPENOCD_BINARY | openocd | Path to openocd binary | | OPENOCD_INTERFACE | interface/stlink.cfg | Interface config file | | OPENOCD_TARGET | target/stm32f4x.cfg | Target config file | | OPENOCD_GDB_PORT | 3333 | GDB server port | | OPENOCD_TELNET_PORT | 4444 | Telnet command port |

Black Magic Probe

| Variable | Default | Description | |----------|---------|-------------| | BMP_GDB_PATH | arm-none-eabi-gdb | Path to GDB binary | | BMP_SERIAL_PORT | /dev/ttyACM0 | BMP serial port | | BMP_TARGET_INDEX | 1 | Target index after scan |

Prerequisites

  • SEGGER J-Link Software installed (JLinkExe, JLinkGDBServer)
  • A J-Link debug probe connected to an ARM Cortex-M target
  • Node.js 18+

For other backends: OpenOCD or arm-none-eabi-gdb as appropriate.

Contributing

Adding a new probe backend:

  1. Create src/probe/yourprobe.ts implementing ProbeBackend
  2. Add a case to src/probe/factory.ts
  3. That's it — all 31 MCP tools work automatically

License

MIT - see LICENSE


Built by The Sprk Factory

快速设置
此服务器的安装指南

安装包 (如果需要)

npx @modelcontextprotocol/server-jlink-mcp

Cursor 配置 (mcp.json)

{ "mcpServers": { "klievan-jlink-mcp": { "command": "npx", "args": [ "klievan-jlink-mcp" ] } } }