openocd-mcp
The openocd-mcp server provides an AI-callable interface for embedded firmware flashing and GDB debugging via OpenOCD, reusing existing .vscode/launch.json configurations with no extra setup required.
Project & Configuration Management: Set the project directory to load and parse
.vscode/launch.jsondebug targets; refresh targets after changes; view the currently effective OpenOCD/GDB runtime configuration and its sources.Flashing: Download firmware to a target microcontroller using a specified launch configuration without starting a full debug session.
Debugging: Start a debug session (launch OpenOCD + GDB, load firmware, optionally halt at entry point); attach to a running target without downloading firmware or resetting; stop the active session, terminating OpenOCD and GDB processes; execute arbitrary GDB commands; continue execution asynchronously; interrupt/pause the running target.
Status & Logging: Retrieve current debug session status and available configuration names (JSON); query target execution state and stop reason; read real-time RTT logs from the MCU.
Lifecycle: Gracefully shut down the MCP server.
Supports stdio (VS Code MCP) and SSE/HTTP modes across Windows, Linux, and macOS.
Provides tools for debugging and flashing firmware on Arm-based microcontrollers by integrating with OpenOCD and GDB, allowing for project management and real-time status monitoring.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@openocd-mcpflash the firmware using the STM32 configuration"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
openocd-mcp
基于 fastmcp 的 OpenOCD 调试 MCP 服务器,将嵌入式烧录与 GDB 调试工作流封装为 AI 可调用的工具。复用项目已有的 .vscode/launch.json 作为调试目标来源,无需额外配置。
特性
🔧 零配置 — 直接复用 VS Code 的
launch.json,无需维护额外配置文件⚡ GDB/MI 异步协议 — 基于 MI2 事件驱动,
continue不阻塞,interrupt即时生效📡 RTT 实时日志 — 自动连接 SEGGER RTT,读取 MCU 运行时输出
🖥️ 跨平台 — 支持 Windows / Linux / macOS,Windows 上自动回退 OpenOCD telnet halt
🔄 双模式运行 — stdio(VS Code MCP)和 SSE/HTTP(本地 AI 客户端)
Related MCP server: commands-mcp
快速开始
安装
# 克隆仓库
git clone https://github.com/luiox/openocd-mcp.git
cd openocd-mcp
# 安装依赖
uv sync运行
# stdio 模式(VS Code MCP 默认)
uv run openocd-mcp
# 自定义工具路径
uv run openocd-mcp --openocd-path /usr/bin/openocd --gdb-path /usr/bin/arm-none-eabi-gdb
# SSE/HTTP 模式(给本地其他 AI 客户端)
uv run openocd-mcp -sse --host 127.0.0.1 --port 9000参数优先级:命令行参数 > 环境变量 > config.json > 内置默认值。
环境变量
变量 | 说明 | 默认值 |
| OpenOCD 可执行文件路径 |
|
| GDB 可执行文件路径 |
|
| OpenOCD 脚本搜索路径 |
|
| RTT 服务器端口 |
|
config.json 配置
在项目根目录创建 config.json(已被 .gitignore 忽略):
{
"openocd_path": "D:/sdk/OpenOCD/bin/openocd.exe",
"gdb_path": "D:/sdk/Arm GNU Toolchain/bin/arm-none-eabi-gdb.exe",
"openocd_scripts": "D:/sdk/OpenOCD/share/openocd/scripts",
"rtt_port": 8888,
"adapter_speed": 0
}VS Code 集成
项目已包含 .vscode/mcp.json,使用 stdio 模式启动:
{
"servers": {
"openocd-mcp": {
"type": "stdio",
"command": "uv",
"args": ["run", "openocd-mcp"],
"cwd": "${workspaceFolder}"
}
}
}如需 SSE 模式:
{
"servers": {
"openocd-mcp": {
"type": "sse",
"url": "http://127.0.0.1:9000/sse"
}
}
}MCP 工具列表
项目与配置
工具 | 描述 |
| 加载项目 |
| 重新加载 launch.json 配置(修改后刷新) |
| 查看当前 OpenOCD/GDB 路径及其来源 |
烧录与调试
工具 | 描述 |
| 一次性烧录固件(不启动调试会话) |
| 启动 OpenOCD + GDB 调试会话,加载固件,可选运行到入口点 |
| 附加到运行中的目标,不下载固件、不复位(Attach 模式) |
| 终止当前调试会话 |
| 执行任意 GDB 命令 |
| 继续目标执行(异步,立即返回) |
| 中断/暂停运行中的目标 |
状态与日志
工具 | 描述 |
| 获取调试会话状态(JSON) |
| 获取目标执行状态和停止原因 |
| 读取 RTT 实时日志(默认 10 行) |
| 优雅关闭 MCP 服务器 |
架构
AI 客户端 → MCP 协议 → openocd-mcp
├── ProjectConfigManager (解析 launch.json)
├── OpenOCDController (启动/停止 OpenOCD 进程)
├── GDBMISession (MI2 异步协议通信)
├── RTTClient (实时日志读取)
└── DebugSessionManager (协调生命周期)模块 | 职责 |
| 解析 |
| 启动 OpenOCD 进行烧录( |
| GDB/MI 异步会话,协议解析、事件驱动、无需轮询提示符 |
| TCP 连接 RTT 端口,后台线程按行缓冲读取日志 |
| 单会话模型,协调 OpenOCD + GDB + RTT 生命周期 |
launch.json 要求
目标项目必须包含 .vscode/launch.json,每个配置需包含:
name— 配置名称(唯一标识)configFiles— OpenOCD 脚本列表(如["interface/cmsis-dap.cfg", "target/stm32f1x.cfg"])executable— 固件 ELF 文件路径(支持${workspaceFolder}变量)runToEntryPoint(可选)— 入口点断点(如"main")
示例:
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug STM32",
"type": "cortex-debug",
"request": "launch",
"configFiles": [
"interface/cmsis-dap.cfg",
"target/stm32f1x.cfg"
],
"executable": "${workspaceFolder}/build/firmware.elf",
"runToEntryPoint": "main"
}
]
}支持 JSON 中的 C 风格注释和尾随逗号(自定义解析器自动清理)。
关键设计
单会话模型:同时最多一个调试会话,
debug_start自动停止之前的会话异步继续:
debug_continue()通过 MI^running立即返回,不阻塞等待目标停止中断机制:优先使用 GDB/MI
-exec-interrupt;Windows 上自动回退到 OpenOCD telnet haltRTT 非致命:固件不支持 RTT 时,调试会话照常运行,RTT 功能不可用但不影响其他操作
超时控制:普通 GDB 命令 30 秒超时,
load120 秒,flash 180 秒路径处理:Windows 路径自动转换为正斜杠(OpenOCD 兼容)
项目结构
openocd_mcp/
├── __init__.py # 包入口
├── __main__.py # python -m 入口
├── server.py # MCP 工具定义 + main() 入口
├── config.py # GlobalConfig, ProjectConfigManager
├── openocd.py # OpenOCDController
├── gdb_mi.py # GDBMISession (MI2 异步协议)
├── rtt.py # RTTClient (TCP 日志读取)
└── session.py # DebugSessionManager文档
License
MIT
Available Tools
8 toolsdebug_commandC
Execute one GDB command in current active debug session.
| Name | Required | Description | Default |
|---|---|---|---|
| command | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. While it states this executes a GDB command, it doesn't describe what happens if there's no active session, what types of commands are supported, whether this is a read-only or mutating operation, or what happens to the debug state after execution. For a tool that presumably interacts with a debugger, this leaves significant behavioral questions unanswered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that gets straight to the point with zero wasted words. It's appropriately sized for a single-parameter tool and front-loads the essential information about what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there's an output schema (which should document return values), the description doesn't need to explain outputs. However, for a debug command execution tool with no annotations and minimal parameter documentation, the description should provide more context about behavioral expectations, error conditions, and relationship to sibling debug tools. The current description is adequate but leaves important gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for its single parameter 'command', and the tool description provides no additional information about what this parameter should contain. While the description mentions 'GDB command', it doesn't explain what format is expected, provide examples, or clarify whether this is a single GDB command string or something more structured. The description adds minimal value beyond what's implied by the tool name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Execute') and resource ('one GDB command in current active debug session'), making the purpose immediately understandable. It doesn't explicitly differentiate from sibling tools like debug_start or debug_stop, but the specificity of 'GDB command' and 'current active debug session' provides inherent distinction from those other debug operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool should be used when there's an active debug session, but provides no explicit guidance on when to use it versus alternatives like debug_start or debug_status. There's no mention of prerequisites, error conditions, or when this tool would be inappropriate compared to other debugging operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_startC
Start debug session using specified launch configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| config_name | Yes | ||
| firmware_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Start debug session' implies an initialization action, it doesn't describe what happens during the session, whether it's blocking/non-blocking, what permissions are required, or what the expected outcome is. The description lacks crucial behavioral context for a tool that likely initiates a complex debugging process.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at just 7 words, front-loading the core purpose immediately. Every word earns its place with no redundancy or unnecessary elaboration, making it efficient for quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a debug session initialization tool with 2 parameters (one optional), no annotations, but with an output schema, the description provides the absolute minimum. While the output schema will document return values, the description doesn't address the tool's behavior, parameter meanings, or usage context sufficiently for what appears to be a potentially complex debugging operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage for both parameters, the description provides minimal help. It mentions 'specified launch configuration' which hints at the 'config_name' parameter, but doesn't explain what a launch configuration is, what format it expects, or what 'firmware_path' represents. The description fails to compensate for the complete lack of schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start debug session') and the resource ('using specified launch configuration'), providing a specific verb+resource combination. However, it doesn't differentiate this tool from its sibling 'debug_command' which might also initiate debugging, leaving room for ambiguity about when to choose one over the other.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'debug_command' or 'debug_status'. There's no mention of prerequisites, expected state before invocation, or what distinguishes this from other debugging-related tools in the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_statusA
Get current debug session status and available configuration names in JSON string format.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the return format ('JSON string format') which is helpful, but doesn't address other important aspects like whether this requires active debug sessions, what happens if none exist, or any rate limits. It provides basic transparency but misses key operational details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise - a single sentence that communicates the core functionality and return format with zero wasted words. It's front-loaded with the main purpose and efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given this is a zero-parameter tool with an output schema (which handles return value documentation), the description provides adequate context about what information is retrieved. However, it could be more complete by mentioning relationships to sibling tools or typical use cases within debugging workflows.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't waste space discussing parameters that don't exist, focusing instead on what the tool returns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Get current debug session status') and resources ('available configuration names'), making it immediately understandable. However, it doesn't explicitly distinguish this from sibling tools like debug_start or debug_stop, which would require a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like debug_command or get_runtime_config. It lacks any context about appropriate use cases or exclusions, leaving the agent to infer usage patterns from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
debug_stopA
Stop current active debug session and terminate OpenOCD/GDB processes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates a destructive action ('Stop... and terminate') that ends processes, which is valuable context. However, it lacks details on permissions needed, error handling, or what happens if no session is active, leaving some behavioral aspects unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It is front-loaded with the core action and resource, making it easy to understand quickly without any redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (simple destructive action with no parameters) and the presence of an output schema (which handles return values), the description is mostly complete. It covers the purpose and behavioral impact well, though it could benefit from more context on prerequisites or error cases to be fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters, and the schema description coverage is 100%, so no parameter documentation is needed. The description appropriately does not discuss parameters, earning a baseline high score for not adding unnecessary information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Stop') and target resource ('current active debug session'), and distinguishes it from sibling tools like debug_start, debug_status, and debug_command. It provides a precise verb+resource combination that leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying 'current active debug session,' suggesting it should be used when a debug session is running. However, it does not explicitly state when not to use it or name alternatives (e.g., debug_status for checking status instead of stopping), which prevents a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flash_downloadB
Flash firmware once using specified launch configuration without starting debug session.
| Name | Required | Description | Default |
|---|---|---|---|
| config_name | Yes | ||
| firmware_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions 'flash firmware once' (implying a one-time write operation) and 'without starting debug session', but lacks details on permissions needed, whether it's destructive to existing firmware, error handling, or rate limits. For a firmware tool with zero annotation coverage, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and includes a key constraint ('without starting debug session') in a compact form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (firmware flashing), lack of annotations, and 0% schema coverage, the description is incomplete. However, the presence of an output schema reduces the need to explain return values. It covers the basic purpose but misses critical behavioral and parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'specified launch configuration' and 'firmware_path' implicitly, but doesn't explain what config_name represents, what firmware_path is for, or their formats. With 2 parameters and no schema descriptions, this adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('flash firmware once') and resource ('using specified launch configuration'), distinguishing it from sibling tools like debug_start or debug_stop. However, it doesn't explicitly differentiate from all siblings (e.g., debug_command might also involve firmware operations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying 'without starting debug session', suggesting this is for firmware loading only, not debugging. However, it doesn't provide explicit guidance on when to use this versus alternatives like debug_start (which might combine download and debug) or other siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_runtime_configA
Return currently effective OpenOCD/GDB runtime configuration and value sources for troubleshooting.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns configuration and value sources, which is useful, but lacks details on behavioral traits such as performance, error handling, or data format. It does not contradict any annotations, but offers only basic operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core action ('Return') and purpose. Every word earns its place, with no redundant or vague phrasing, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 parameters, no annotations, but with an output schema), the description is complete enough for a read-only configuration tool. It specifies the resource and context, and the output schema will handle return values, so no additional details are necessary. However, it could slightly enhance completeness by mentioning the output format or usage scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately does not discuss parameters, focusing instead on the tool's purpose. This meets the baseline for zero parameters, as it avoids unnecessary details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Return') and resource ('currently effective OpenOCD/GDB runtime configuration and value sources'), specifying both what is returned and the troubleshooting context. It distinguishes from sibling tools like debug_command or set_project by focusing on configuration inspection rather than execution or modification.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for 'troubleshooting,' which provides some context, but does not explicitly state when to use this tool versus alternatives like debug_status or refresh_debug_targets. No exclusions or specific prerequisites are mentioned, leaving the agent to infer based on the troubleshooting hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_debug_targetsA
Reload launch.json from current project and return available debug configurations.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses the tool reloads a file and returns data, but lacks details on permissions needed, error handling, or side effects (e.g., whether it interrupts active debugging). It adds basic context but misses behavioral nuances for a file operation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the tool's purpose and outcome with zero wasted words. It avoids unnecessary elaboration while being fully informative for its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, an output schema exists, and complexity is low, the description is reasonably complete. It explains what the tool does and what it returns, though it could benefit from more behavioral context (e.g., error cases) since annotations are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description appropriately focuses on the tool's action and output without redundant parameter details, meeting the baseline for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Reload launch.json') and the resource ('from current project'), with a distinct outcome ('return available debug configurations'). It differentiates from siblings like debug_start or debug_stop by focusing on configuration reloading rather than execution control.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when needing updated debug configurations, but provides no explicit guidance on when to use this tool versus alternatives like get_runtime_config or set_project. It lacks clear exclusions or prerequisites, leaving usage context to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_projectB
Set current project directory and load debug configurations from .vscode/launch.json.
| Name | Required | Description | Default |
|---|---|---|---|
| project_dir | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the tool's actions ('set', 'load') but lacks critical details: it doesn't specify if this is a read-only or destructive operation, what happens if the directory is invalid, whether changes persist, or any permission requirements. The mention of loading configurations hints at side effects, but this is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core functionality. Every word earns its place by specifying the tool's actions and resources without redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (a mutation operation with 1 parameter) and the presence of an output schema (which reduces the need to describe return values), the description is minimally adequate. However, with no annotations and low schema coverage, it should do more to explain behavioral aspects like error handling or side effects to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It implies that 'project_dir' is used to set the current project directory, adding some meaning beyond the bare schema. However, it doesn't clarify the parameter's format (e.g., absolute path, relative path) or constraints, leaving gaps in understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('set', 'load') and resources ('project directory', 'debug configurations from .vscode/launch.json'). It distinguishes itself from sibling tools by focusing on project setup rather than debugging operations, though it doesn't explicitly contrast with siblings like 'get_runtime_config' or 'refresh_debug_targets'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a valid project directory), exclusions, or how it relates to sibling tools like 'get_runtime_config' or 'refresh_debug_targets', leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose with no ambiguity: debug_start initiates a session, debug_stop terminates it, debug_command executes a command, debug_status checks status, flash_download flashes firmware, get_runtime_config retrieves configuration, refresh_debug_targets reloads targets, and set_project sets the project directory. The tools cover different aspects of debugging and flashing workflows without overlap.
All tool names follow a consistent verb_noun pattern (e.g., debug_start, debug_status, flash_download, get_runtime_config) using snake_case throughout. This predictability makes it easy for agents to understand and select the appropriate tool based on its name.
With 8 tools, the server is well-scoped for its purpose of debugging and flashing firmware via OpenOCD/GDB. Each tool earns its place by covering essential operations like starting/stopping sessions, executing commands, checking status, flashing, and managing configurations, without being overly sparse or bloated.
The tool set provides complete coverage for the debugging and flashing domain: it supports session lifecycle (start, stop, status), command execution, firmware flashing, configuration management (get, refresh, set), and project setup. There are no obvious gaps, enabling agents to handle typical workflows without dead ends.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
The OpenRouter MCP server plugs OpenRouter into the AI tools you already use. Once connected, your assistant can pull live OpenRouter data (models, prices, your credits, rankings, and docs) and send quick test messages, all without leaving your editor.
The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.
A MCP server built for developers enabling Git based project management with project and personal…
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceAn MCP server and VS Code extension that enables AI clients to interactively debug code using breakpoints, execution control, and state inspection. It is language-agnostic and works with any debugger that supports VS Code's launch.json configurations.
- AlicenseNot gradedqualityCmaintenanceAn MCP server that lets you define and run custom shell commands via YAML templates, with built-in tools for flashing and serial communication in embedded development.204Apache 2.0
- AlicenseAqualityBmaintenanceStateful MCP server for driving debug probes (J-Link) to flash, debug, and inspect embedded targets. Enables AI agents to perform flash, memory, breakpoint, and ELF/SVD-aware operations conversationally.4110MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for embedded debugging based on probe-rs, providing 22 tools for ARM Cortex-M and RISC-V microcontrollers, including connection, memory operations, breakpoints, flash programming, and RTT communication.2MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/luiox/openocd-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server