
OpenOCD Debugger
io.github.microhenrio由 GitHub 帳號 microhenrio 發布v0.4.5更新於 Oct 24, 2026
Debug microcontrollers via OpenOCD: flash, breakpoints, memory, registers and variables.
概覽
讓 AI 助理透過 OpenOCD 燒錄、暫停、單步與檢查微控制器韌體,並依名稱讀寫變數與周邊暫存器。
- 可以做什麼
- 燒錄並驗證韌體映像,控制執行:暫停、繼續、單步、重置
- 讀寫 CPU 暫存器與記憶體,傾印記憶體區段
- 設定硬體與軟體中斷點(含條件式中斷點與命中次數中斷點),以及資料監看點
- 依 ELF 符號以名稱讀寫韌體變數,並在不暫停 CPU 的情況下隨時間取樣
- 依 CMSIS-SVD 檔以名稱讀取周邊暫存器,並解碼為具名位元欄位
- 檢視並變更工作階段設定與權限設定
- 適用情境
- 適合透過除錯探針在實際開發板上除錯嵌入式韌體時使用,讓助理直接連接目標、檢查狀態、設定中斷點並燒錄建置產物,不必切換到獨立的除錯器介面。適用於 OpenOCD 支援晶片的反覆除錯與問題追查。
- 執行需求
- 以 stdio 本機程序執行(需 Python 3.10+,可從 PyPI 安裝或以 uvx 執行)。需要連接目標的除錯探針(ST-Link、J-Link、CMSIS-DAP 等),以及 OpenOCD,可自動下載並快取,或透過 OPENOCD_BIN 指定既有安裝。選用 OPENOCD_MCP_CONFIG 指向含目標設定、SVD 與 ELF 的專案設定;OPENOCD_MCP_READONLY 可強制唯讀模式。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 OpenOCD Debugger,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
[Last Commit] [License] [MCP Server] [AI Ready] [uvx compatible] [PyPI Version] [PyPI Downloads] [Python Versions]
OpenOCD MCP Server
Debug microcontrollers directly from your AI assistant. This is an MCP server that drives OpenOCD, letting any MCP-compatible AI flash firmware, control execution, and inspect a running target — and read your variables and peripheral registers by name instead of raw addresses.
Description
Once connected to a target through a debug probe (ST-Link, J-Link, CMSIS-DAP, …), your AI assistant can:
- Flash firmware — program and verify
.elf/.bin/.heximages - Control execution — halt, resume, single-step, reset
- Inspect state — read/write CPU registers and memory
- Set breakpoints — hardware & software, including conditional breakpoints (halt only when an expression is true) and hit-count breakpoints
- Watch memory — hardware watchpoints that halt on read/write/access to an address
- Read variables by name — from your firmware's
.elfsymbols (e.g.read_variable uart_rx_count) - Live-watch variables — a window that samples variables over time without halting the CPU, with expandable structs/arrays auto-typed from DWARF (signed/float/pointer/enum)
- Read peripheral registers by name — from a CMSIS-SVD file, decoded into named bitfields (e.g.
RCC.CR,GPIOA.MODER) - Safety gates — permission layer (read-only mode, gated flash-erase, flash path/size limits) so the agent can't damage a target unexpectedly
The server is chip-agnostic — it works with any target OpenOCD supports; you point it at your chip's config and (optionally) SVD/ELF. It can also start OpenOCD for you and download OpenOCD automatically for your platform, so there's nothing else to install by hand.
Supported AI clients
Any MCP-compatible client works. Tested and known to work:
Installation
Prerequisites: Python 3.10+ and a debug probe connected to your target.
Clone and install the package into a virtual environment:
Install it (creates the openocd-mcp command):
Windows shortcut: run
setup.bat— it creates the environment, installs the package, and registers it with Claude Code automatically.
OpenOCD is obtained automatically: a build for your OS/architecture is
downloaded and cached on first connect (checksum-verified). You can also fetch it
ahead of time with openocd-mcp install-openocd, or use an existing install by
setting the OPENOCD_BIN environment variable.
Registering with your AI client
The server executable is:
Claude Code
Restart Claude Code, then verify with claude mcp list.
Claude Desktop
Add to claude_desktop_config.json (Edit → Settings → Developer → Edit Config):
Restart Claude Desktop.
Cursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in your project):
Restart Cursor.
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
Restart Windsurf.
Cline (VS Code)
Open the Cline panel → MCP Servers → Add Server → Manual, then enter:
Continue (VS Code / JetBrains)
Add to ~/.continue/config.json:
VS Code + GitHub Copilot
Add to .vscode/mcp.json in your workspace (or user settings.json):
Enable via Chat → Agent mode in VS Code.
Updating
There's no self-update tool exposed over MCP — updating means running commands in
a terminal, either yourself or by asking an AI that has shell access (e.g. Claude
Code). After updating, restart your AI client so it loads the new server;
if it was mid-session, it may need to stop the old openocd-mcp process first
(a file lock can block the reinstall while it's running).
PyPI install (pip install openocd-mcp or uvx):
Editable git-clone install (what setup.bat / this repo's instructions set up):
Check the installed version with pip show openocd-mcp.
How to work with it
1. Point it at your chip
Each firmware project tells the server which target it's debugging. Create an
openocd-mcp.json in your project root (a template is in
openocd-mcp.example.json):
target_cfg/interface_cfg— OpenOCD configs (relative to its scripts dir). Defaults to an ST-Link probe; settarget_cfgfor your chip.transport—"swd"or"jtag". Set"swd"for a J-Link on Cortex-M (withinterface_cfg: "interface/jlink.cfg"); leave empty for ST-Link.svd_file— CMSIS-SVD file for the chip (enables peripheral registers by name).elf_file— your firmware build output (enables variables by name).
J-Link on Windows: OpenOCD reaches J-Links via libusb, so bind the J-Link's debug interface to libusbK (or WinUSB) with Zadig once (Interface 2 / MI_02). Newer SEGGER software (v7.x+) is compatible with libusbK, so both OpenOCD and SEGGER tools can coexist. ST-Link works without that step.
Or simply tell the AI the chip you're using and it will configure the session for
you. show_config reports the active settings at any time.
2. Describe what you want
With the board plugged in, describe what you want — the AI picks the right tools:
You don't call tools by name — describe the goal and the AI maps it to the underlying tools.
3. Conditional breakpoints & watchpoints
Conditional breakpoints halt only when a condition holds — useful for catching one specific case in code that runs constantly. Conditions are TCL expressions and can use two helpers:
get_reg <name>— a CPU register value (e.g.get_reg r0,get_reg pc)get_mem <addr> [width]— a memory value (e.g.get_mem 0x20000000)
Just describe the intent; the AI builds the condition:
When the condition is false the server resumes automatically and keeps going until it's true (or you stop it).
Watchpoints halt the CPU when it accesses a memory location — ideal for finding what corrupts a variable:
- "watch for writes to
0x20000000" - "watch address
0x20000010for any read or write"
Live-watching variables
There are two separate ways to watch a variable without halting the CPU — one the AI can trigger, one you run yourself:
Ask the AI for a quick, bounded look at a value over time — "watch tick_count
for 10 samples", "sample sensor_value every 200ms for 2 seconds". This calls the
watch_variables tool directly; no extra setup needed beyond an ELF loaded.
Run the GUI yourself for an open-ended live view, especially of structs/arrays. It's a standalone app that opens its own connection to OpenOCD, so it works fine alongside any AI session driving the same target — but it is not an MCP tool, so the AI cannot open it for you; run it directly:
It samples the variables without halting the CPU and refreshes a tree in a window. Add entries with the box (press Enter or Add) and remove a selected row with Remove (or the Delete key). Each entry is resolved automatically and can be:
- a variable name (
uwTick,commsService) → looked up in the ELF; if it's a struct, union, or array it gets an expand triangle, and its members/elements are shown auto-typed from DWARF (signed, float, pointer, enum, bitfields, nested structs). Enums show the symbolic name (STATE_HEATING (1)), and C bitfields show just their own bit(s) rather than the whole storage word; - a hex address with optional size (
0x20000000,0x20000000:2) → read directly.
A Format dropdown switches how values are shown — Auto (by C type) / Hex /
Decimal / Signed / Float (f32) / Binary — and re-renders instantly. Use
--interval to change the poll rate, --format to set the initial format, or
--samples N for a headless printout. Requires Tkinter (ships with standard Python)
and a debug build (-g) for the type info.
If OpenOCD isn't already running, add --autostart and the window launches it
for you (and stops it on close) — fully standalone, no AI client or .bat needed:
CPU core registers (
r0,pc,sp, …) require the target to be halted — the AI halts first when needed. Memory, variables, and peripheral registers are memory-mapped and can be read while the CPU is running (as the live-watch window does). The firstconnectof a session starts OpenOCD automatically.
Safety / permissions
Mutating operations are gated so the agent can't damage a target unexpectedly. Reads are always allowed; the gates apply to writes, flashing, erasing, and the raw-command escape hatch.
Set them three ways (later wins):
- A
permissionsobject inopenocd-mcp.json(seeopenocd-mcp.example.json). - The
set_permissionstool at runtime — e.g. ask the AI to "make the target read-only" or "allow flash erase for this session". - The
OPENOCD_MCP_READONLY=1environment variable (forces read-only).
A blocked call returns a clear BLOCKED: … message explaining which permission to
enable. show_config lists the active permissions.
來源:README.md,提交 2e3307f
工具
0版本歷史
1- v0.4.5最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分