Context7
Up-to-date docs for AI agents
作者提供的说明(英文原文)
Debug microcontrollers via OpenOCD: flash, breakpoints, memory, registers and variables.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
OPENOCD_BIN, OPENOCD_MCP_CONFIG, OPENOCD_MCP_READONLY你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"openocd": {
"command": "uvx",
"args": [
"openocd-mcp"
],
"env": {
"OPENOCD_BIN": "your-value",
"OPENOCD_MCP_CONFIG": "your-value",
"OPENOCD_MCP_READONLY": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add openocd --env OPENOCD_BIN=your-value --env OPENOCD_MCP_CONFIG=your-value --env OPENOCD_MCP_READONLY=your-value -- uvx openocd-mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"openocd": {
"command": "uvx",
"args": [
"openocd-mcp"
],
"env": {
"OPENOCD_BIN": "your-value",
"OPENOCD_MCP_CONFIG": "your-value",
"OPENOCD_MCP_READONLY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"openocd": {
"type": "stdio",
"command": "uvx",
"args": [
"openocd-mcp"
],
"env": {
"OPENOCD_BIN": "your-value",
"OPENOCD_MCP_CONFIG": "your-value",
"OPENOCD_MCP_READONLY": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
OPENOCD_BIN envOPENOCD_MCP_CONFIG envOPENOCD_MCP_READONLY env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 microhenrio 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.4.5)于4个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Context7, Codebase Memory, Exa
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Up-to-date docs for AI agents
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
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.
Once connected to a target through a debug probe (ST-Link, J-Link, CMSIS-DAP, …), your AI assistant can:
.elf / .bin / .hex images.elf symbols (e.g. read_variable uart_rx_count)RCC.CR, GPIOA.MODER)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.
Any MCP-compatible client works. Tested and known to work:
| Client | Platform |
|---|---|
| Claude Code | CLI / IDE |
| Claude Desktop | macOS / Windows |
| Cursor | IDE |
| Windsurf | IDE |
| Cline | VS Code extension |
| Continue | VS Code / JetBrains |
| Zed | Editor |
| VS Code + GitHub Copilot | IDE (agent mode) |
| Gemini CLI | CLI |
Prerequisites: Python 3.10+ and a debug probe connected to your target.
Clone and install the package into a virtual environment:
git clone https://github.com/microhenrio/openocd-mcp
cd openocd-mcp python -m venv .venv
Install it (creates the openocd-mcp command):
# Windows
.venv\Scripts\python -m pip install -e .
.venv/bin/python -m pip install -e .
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.
The server executable is:
# Windows
\.venv\Scripts\openocd-mcp.exe
/.venv/bin/openocd-mcp
Claude Code
# Windows
claude mcp add --scope user openocd -- "%CD%\.venv\Scripts\openocd-mcp.exe"
claude mcp add --scope user openocd -- "$PWD/.venv/bin/openocd-mcp"
Restart Claude Code, then verify with claude mcp list.
Claude Desktop
Add to claude_desktop_config.json (Edit → Settings → Developer → Edit Config):
{
"mcpServers": { "openocd": { "command": "/path/to/.venv/bin/openocd-mcp" } } }
Restart Claude Desktop.
Cursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in your project):
{
"mcpServers": { "openocd": { "command": "/path/to/.venv/bin/openocd-mcp" } } }
Restart Cursor.
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": { "openocd": { "command": "/path/to/.venv/bin/openocd-mcp" } } }
Restart Windsurf.
Cline (VS Code)
Open the Cline panel → MCP Servers → Add Server → Manual, then enter:
{
"openocd": { "command": "/path/to/.venv/bin/openocd-mcp" } }
Continue (VS Code / JetBrains)
Add to ~/.continue/config.json:
{
"mcpServers": [ { "name": "openocd", "command": "/path/to/.venv/bin/openocd-mcp" } ] }
VS Code + GitHub Copilot
Add to .vscode/mcp.json in your workspace (or user settings.json):
{
"servers": { "openocd": { "type": "stdio", "command": "/path/to/.venv/bin/openocd-mcp" } } }
Enable via Chat → Agent mode in VS Code.
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):
pip install -U openocd-mcp
uvx --refresh openocd-mcp
Editable git-clone install (what setup.bat / this repo's instructions set up):
git pull
.venv/bin/python -m pip install -e . # or .venv\Scripts\python on Windows
Check the installed version with pip show openocd-mcp.
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": "target/stm32g0x.cfg", "svd_file": "path/to/STM32G0B0.svd", "elf_file": "path/to/build/firmware.elf" }
target_cfg / interface_cfg — OpenOCD configs (relative to its scripts dir). Defaults to an ST-Link probe; set target_cfg for your chip.transport — "swd" or "jtag". Set "swd" for a J-Link on Cortex-M (with interface_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.
With the board plugged in, describe what you want — the AI picks the right tools:
| You say… | What happens |
|---|---|
| "connect and halt the target" | Starts OpenOCD if needed, attaches, halts the CPU |
| "what's the status?" | Reports running/halted and the current program counter |
"read the variable sensor_value" | Looks it up in the .elf and reads it off the chip |
"set motor_enabled to 1" | Writes the variable by name |
"watch tick_count live for 2 seconds" | Calls watch_variables — samples it repeatedly *without halting* and returns a table of values over time, right in the chat |
"read GPIOA.MODER" | Reads the register and decodes its named bitfields |
"list the RCC registers" | Lists registers from the SVD |
"break at 0x08001234, then reset and run" | Sets a breakpoint and resets |
"break at 0x08001234 when r0 is 42" | Sets a conditional breakpoint (using [get_reg r0] == 42) |
"break at 0x08001234 after 5 hits" | Sets a hit-count breakpoint |
"watch for writes to 0x20000000" | Sets a hardware data watchpoint |
"flash build/firmware.elf and run it" | Programs, verifies, and restarts |
"dump 64 bytes of RAM at 0x20000000" | Reads memory |
You don't call tools by name — describe the goal and the AI maps it to the underlying tools.
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 — a CPU register value (e.g. get_reg r0, get_reg pc)get_mem [width] — a memory value (e.g. get_mem 0x20000000)Just describe the intent; the AI builds the condition:
| You say… | Condition used |
|---|---|
"break at 0x08001234 only when r0 > 100" | expr {[get_reg r0] > 100} |
"break at parse_packet when the byte at 0x20000005 is 0xFF" | expr {[get_mem 0x20000005 8] == 0xFF} |
"stop at 0x08001234 on the 10th time it's hit" | incr ::hits; expr {$::hits >= 10} |
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:
0x20000000"0x20000010 for any read or write"There are two separate ways to watch a variable without halting the CPU — one the AI can trigger, one you run yourself:
watch_variables (MCP tool) | openocd-watch (standalone GUI) | |
|---|---|---|
| Triggered by | Asking the AI in chat | Running the command yourself in a terminal |
| Output | A text table of samples returned to the chat | A live-updating window with a tree view |
| Duration | One-shot: N samples, then it returns | Keeps running until you close it |
| Structs/arrays | Flat values only | Expandable, DWARF-typed |
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:
openocd-watch tick_count se只显示了开头部分;其余内容请在仓库中阅读