jlink-mcp
Give AI hands to touch silicon.
An MCP server that lets LLMs debug embedded devices through SEGGER J-Link probes.
______________________________________________________________________
这是什么?
jlink mcp 通过以下方式将AI助手(Claude、Copilot等)连接到您的嵌入式硬件 搜索 J-Link 使用调试探测器 模型上下文协议.
您的AI助手可以:
- 读取寄存器和存储器 了解设备状态
- 刷写固件 并重置设备
- 流RTT日志 并按级别/模块/正则表达式搜索它们
- 诊断碰撞 通过自动解码ARM Cortex-M故障寄存器
- 控制执行 --暂停、步进、恢复、断点
- 启动GDB服务器 用于完整调试会话
还支持 OpenCD (ST链路、CMIS-DAP、FTDI)和 黑魔法探测器 后端。
快速开始
克劳德桌面
添加到您的Claude桌面配置(~/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"
}
}
}
}克劳德代码
添加 .mcp.json 到您的项目根目录:
{
"mcpServers": {
"jlink": {
"command": "node",
"args": ["out/mcp/standalone.js"],
"cwd": "/path/to/jlink-mcp",
"env": {
"JLINK_DEVICE": "nRF52840_XXAA"
}
}
}
}VSCode扩展
安装扩展(需要VSCode 1.99+)。它通过本机自动注册MCP服务器 vscode.lm API在设置中配置设备:
jlinkMcp.jlink.device = "nRF52840_XXAA"副驾驶聊天和VSCode中的克劳德将自动发现所有31个工具。
来源
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工具(31)
工作流工具(从这里开始)
| 工具 | 说明 |
|---|---|
start_debug_session | 一次通话设置。 启动GDB服务器+连接RTT+返回启动日志。 |
snapshot | 捕获完整的设备状态:寄存器、故障状态、堆栈转储、RTT输出。 |
diagnose_crash | 自动读取和解码带有异常堆栈帧的ARM Cortex-M故障寄存器(CFSR、HFSR、MMFAR、BFAR)。 |
设备控制
| 工具 | 说明 |
|---|---|
device_info | 探头类型、目标CPU、紧凑型寄存器摘要 |
halt | 停止CPU |
resume | 恢复CPU |
reset | 重置设备(重置后可选择停止) |
step | 单步一指令 |
存储器和寄存器
| 工具 | 说明 |
|---|---|
read_memory | 读取地址处的内存(干净的十六进制转储输出) |
write_memory | 将32位值写入地址 |
read_registers | 所有CPU寄存器均采用紧凑格式 |
read_register | 读取特定寄存器(PC、SP、R0-R12等) |
闪光
| 工具 | 说明 |
|---|---|
flash | Flash.hex/.bin/.elf固件到设备 |
erase | 擦除整个闪存 |
断点
| 工具 | 说明 |
|---|---|
set_breakpoint | 在地址处设置硬件断点 |
clear_breakpoints | 清除所有断点 |
GDB服务器
| 工具 | 说明 |
|---|---|
gdb_server_start | 启动探测器的GDB服务器 |
gdb_server_stop | 停止GDB服务器+断开RTT |
gdb_server_status | GDB服务器、RTT和代理状态 |
RTT(实时传输)
| 工具 | 说明 |
|---|---|
rtt_connect | 连接到RTT telnet端口 |
rtt_disconnect | 断开与RTT的连接 |
rtt_read | 读取最近的日志行(ANSI剥离,Zephyr格式解析) |
rtt_search | 筛选日志 按级别(err/wrn/inf/dbg)、模块或正则表达式 |
rtt_send | 通过RTT下行信道向设备发送数据 |
rtt_clear | 清除RTT缓冲区 |
Telnet代理(Trice/Pigweed)
| 工具 | 说明 |
|---|---|
telnet_proxy_start | 启动TCP代理,为外部解令牌器提供RTT |
telnet_proxy_stop | 停止代理 |
telnet_proxy_status | 代理连接状态 |
telnet_proxy_read | 读取原始代理缓冲区 |
高级
| 工具 | 说明 |
|---|---|
probe_command | 执行原始探测命令 |
get_config | 当前探测器和服务器配置 |
多探头支持
jlink mcp通过一个公共接口支持多个调试探测后端 ProbeBackend 抽象:
| 后端 | 探测硬件 | 状态 | RTT支持 |
|---|---|---|---|
| J-Link | SEGGER J-Link、J-Link OB、J-Link EDU | 生产 | 是 |
| OpenCD | ST链路、CMIS-DAP、FTDI、J-Link(通过OpenCD) | 测试版 | 否 |
| 黑魔法探测器 | BMP(串行内置GDB服务器) | 测试版 | 否 |
| 探头rs | 所有探测器支持的探测器 | 计划中 | 计划中 |
选择后端
# 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建筑
┌─────────────────────────────────────────────────────┐
│ 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)│
└─────────────────────────┘源布局
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设计决策(LLM优化)
这个服务器是通过让人工智能在真实硬件上使用它来构建的,然后修复每个摩擦点:
- 输出解析 带40+行J-Link连接横幅。只有数据会回来。
- 寄存器 结构紧凑:
Core: PC=0xBF54 SP=0x20062880 ...而不是65条原始生产线。 - 浮点寄存器 仅在非零时显示(它们通常都是零)。
- RTT输出 剥离了ANSI转义码,并将Zephyr日志格式解析为结构化字段。
- 复合工具 (
start_debug_session,snapshot,diagnose_crash)用单个调用替换多步骤工作流。 - 故障解码 是自动的——读取CFSR/HFSR/MMFAR/BFAR并解释每个比特。
rtt_search允许您在不读取整个日志的情况下查找错误。
环境变量
J-Link
| 变量 | 默认值 | 描述 |
|---|---|---|
PROBE_TYPE | jlink | 探测后端: jlink, openocd, blackmagic |
JLINK_DEVICE | Unspecified | 目标设备(例如。, nRF52840_XXAA, STM32F407VG) |
JLINK_INSTALL_DIR | 自动检测 | SEGGER J-Link安装路径 |
JLINK_INTERFACE | SWD | 调试界面: SWD 或 JTAG |
JLINK_SPEED | 4000 | 连接速度(kHz) |
JLINK_SERIAL | J-Link序列号(多探头) | |
JLINK_GDB_PORT | 2331 | GDB服务器端口 |
JLINK_RTT_PORT | 19021 | RTT telnet端口 |
OpenCD
| 变量 | 默认值 | 描述 |
|---|---|---|
OPENOCD_BINARY | openocd | openocd二进制文件的路径 |
OPENOCD_INTERFACE | interface/stlink.cfg | 接口配置文件 |
OPENOCD_TARGET | target/stm32f4x.cfg | 目标配置文件 |
OPENOCD_GDB_PORT | 3333 | GDB服务器端口 |
OPENOCD_TELNET_PORT | 4444 | Telnet命令端口 |
黑魔法探测器
| 变量 | 默认值 | 描述 |
|---|---|---|
BMP_GDB_PATH | arm-none-eabi-gdb | GDB二进制文件的路径 |
BMP_SERIAL_PORT | /dev/ttyACM0 | BMP串行端口 |
BMP_TARGET_INDEX | 1 | 扫描后的目标索引 |
先决条件
- 赛格J-Link软件 已安装(JLinkExe、JLinkGDBServer)
- 连接到ARM Cortex-M目标的J-Link调试探针
- Node.js 18+
对于其他后端:OpenCD或arm none eabi gdb(视情况而定)。
贡献
添加新的探测后端:
- 创建
src/probe/yourprobe.ts实施ProbeBackend - 将案例添加到
src/probe/factory.ts - 就是这样——所有31个MCP工具都是自动工作的
许可证
麻省理工学院-见 许可证
______________________________________________________________________
Built by The Sprk Factory
