Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

架构说明

cmsis-dap-mcp 是单个 Rust 进程,通过 stdio 使用 MCP 协议。它是纯服务器: 由 MCP 客户端(Codex、Claude Code、opencode 或任意兼容 MCP 的主机)驱动, 自身不提供界面。

仓库是包含三个 crate 的 Cargo workspace:cmsis-dap-core(两个工具共用的 MCP 无关引擎)、cmsis-dap-mcp(本服务器)与 cmsis-dap-cli(基于同一 引擎的独立命令行工具)。下图展示的是该 workspace 中服务器一侧的构成。

系统总览

MCP 客户端(Codex / Claude Code / opencode / 任意 MCP 主机)
    |
    |  MCP stdio:JSON-RPC 2.0,换行分隔,运行在 stdout
    v
+--------------------------------------------------------------+
|  cmsis-dap-mcp(单个 Rust 进程,日志只写 stderr)              |
|                                                              |
|  +--------------------------------------------------------+  |
|  | MCP 工具层(rmcp)                                       |  |
|  |  probe | memory | core | dap | svd | flash | file | script | |
|  +--------------------------------------------------------+  |
|  | 安全策略:只读 / 写 / 破坏性                              |  |
|  +--------------------------------------------------------+  |
|  | 会话管理:探针选择、会话与 SVD 状态                       |  |
|  +--------------------------------------------------------+  |
|  | 后端接口(Backend trait)                                |  |
|  |  ProbeRsBackend(真实)         MockBackend(测试)      |  |
|  +--------------------------------------------------------+  |
|  | probe-rs 库(SWD/JTAG、Flash、ELF/HEX/BIN 解析)          |  |
|  +--------------------------------------------------------+  |
+--------------------------------------------------------------+
    |
    |  USB(HID / WinUSB)
    v
CMSIS-DAP 探针 ---- SWD / JTAG ----> Cortex-M 目标

模块职责

模块职责
cli解析启动参数、配置日志、启动 stdio 服务器
mcp用 rmcp 注册工具、MCP 注解、server instructions
mcp/tools_*各领域参数与处理器(probe、memory、core、dap、svd、flash、script)
script线性 J-Link Commander / OpenOCD 风格脚本解析与执行
hex内存导出用的 Intel HEX 编码器
security三级策略;破坏性工具需要 --allow-destructive
session单个活动会话;持有探针/会话与 SVD 状态
backendBackend trait 及 ProbeRsBackendMockBackend 实现,含 RTT 附着/读取与 Event Recorder 附着/轮询
gdbGDB Remote Serial Protocol stub(移植自 probe-rs-tools,基于 gdbstub);非侵入附着,支持寄存器/内存/运行/单步/硬件断点
remote远程 TCP JSON-RPC 服务器,复用同一会话;方法名与 MCP 工具一致(read_memorywrite_memoryhaltresumestepresetstatusdump_cpu_state 等)
evrCMSIS-View Event Recorder 解码(官方 16 字节记录布局),供 CLI 的 evr 命令使用
svdSVD 解析与外设/寄存器/位域命名解析
error错误码与结构化 McpError

工具调用流程

MCP 客户端          服务器                  后端                目标
   |  tools/call      |                        |                      |
   |----------------->|  安全检查               |                      |
   |                  |  锁定会话               |                      |
   |                  |  backend.read_memory() |-- SWD/JTAG 读取 ---->|
   |                  |<-----------------------|                      |
   |<-----------------|  结构化 JSON            |                      |

每次工具调用都走同一条路径:解析并校验参数 → 检查安全等级 → 获取会话 → 在后端执行操作 → 返回结构化 JSON(或分类错误)。

文件与脚本路径

program_flash {data: [...]}  ->  backend.program_flash  ->  FlashLoader(原始数据)
program_flash {path, format} ->  backend.program_file   ->  BIN:读取 + add_data
                                                             ELF/AXF/HEX:probe-rs build_loader
read_memory {path, format}   ->  backend.export_memory  ->  BIN:原始字节
                                                             HEX:hex::encode_ihex
run_script {path | script}   ->  script::run           ->  逐命令分派到后端
                                                             (破坏性命令由策略门禁)

构建与发布流程

特性分支 -> develop -> main -> tag vX.Y.Z
                                  |
                                  v
             CI:三平台 fmt / clippy / test / build
                                  |
             +--------------------+--------------------+
             |                                         |
             v                                         v
 GitHub Release 二进制                        npm 平台包
 (win32/linux/darwin × x64/arm64)           (元包 cmsis-dap-mcp + 平台包)
             |
             v
 GitHub Pages 文档(英文 /,中文 /zh/)