JLink MCP Server — AI-powered microcontroller debugging via Model Context Protocol
Server has 21 tools with consistent naming (verb_noun pattern) and descriptions present for all. However, descriptions are often too long (200-400 chars, exceeding the 10-200 char sweet spot) and lack actionable guidance. Parameter schemas are well-defined with types and descriptions, but output schemas are not documented. Error handling returns structured errors but lacks recovery guidance. Missing tool annotations (readOnlyHint, destructiveHint). No pagination support despite tools that could return large results (list_functions, list_global_variables). Tool composition is sound, each tool has one responsibility.
清除所有已设置的断点。
清除断点。可以通过地址、符号名或断点句柄来指定。
连接 JLink 调试器并连接到目标单片机。 必须在其他调试操作之前调用此工具。
断开 JLink 与目标单片机的连接。 断开前会自动让目标继续运行,避免停在断点。
获取当前调试状态。
查询符号(函数/全局变量)的内存地址。 需要先调用 load_elf() 加载 ELF 文件。
暂停目标 CPU 执行。 暂停后可以读写内存、读写寄存器、单步执行。
列出所有当前活动的断点。
Output schemas not documented. Tools like read_memory, read_registers, list_functions return structured data but LLMs cannot see the response field names, types, or structure. This forces LLMs to guess at field names for downstream tool calls.
Tool descriptions exceed 200 chars (many 250-350 chars). Verbose descriptions waste tokens and bury key decision points for LLM tool selection.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools like write_memory, reset, delete_all_breakpoints are destructive but lack annotations. LLMs cannot distinguish safe reads from dangerous writes without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
列出常用单片机型号供参考。
列出 ELF 文件中所有函数符号。 需要先调用 load_elf() 加载 ELF 文件。
列出 ELF 文件中所有全局变量。 需要先调用 load_elf() 加载 ELF 文件。
加载 ELF/AXF 文件用于符号名解析。 加载后可以使用变量名读写变量、使用函数名设置断点。
读取目标内存。 常用地址范围参考(ARM Cortex-M): - 0x08000000: Flash 起始(STM32) - 0x20000000: SRAM 起始 - 0x40000000: 外设寄存器区域 - 0xE0000000: CoreSight 调试区域
读取 ARM Cortex-M CPU 所有核心寄存器。 目标需处于暂停状态(不暂停会自动暂停)。
按变量名读取全局变量的当前值。 需要先调用 load_elf() 和 connect()。 目标可以处于运行或暂停状态(建议暂停以获得一致读数)。
复位目标单片机。
继续执行目标程序(从当前 PC 位置继续运行)。 如果有断点,目标将在断点处自动停下。
在指定地址或函数名处设置断点。 必须提供 address 或 symbol 之一。
单步执行指令(指令级单步,不是源码级)。 如果目标正在运行会先自动暂停。
向目标内存写入数据。
写入指定 CPU 寄存器。目标必须处于暂停状态。
No pagination for list tools. list_functions and list_global_variables could return hundreds of items, blowing context window. No limit, offset, or cursor parameters documented.
Error responses lack recovery guidance. _fmt_error() returns {success: false, error: str, error_type: str} but does not tell LLM what to do next or whether to retry. No error classification (retryable vs user-fixable vs fatal).