Skip to main content
Glama

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_PATH

OpenOCD 可执行文件路径

openocd

GDB_PATH

GDB 可执行文件路径

arm-none-eabi-gdb

OPENOCD_SCRIPTS

OpenOCD 脚本搜索路径

""

RTT_PORT

RTT 服务器端口

8888

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 工具列表

项目与配置

工具

描述

set_project(project_dir)

加载项目 .vscode/launch.json,解析所有调试配置

refresh_debug_targets()

重新加载 launch.json 配置(修改后刷新)

get_runtime_config()

查看当前 OpenOCD/GDB 路径及其来源

烧录与调试

工具

描述

flash_download(config_name, firmware_path?)

一次性烧录固件(不启动调试会话)

debug_start(config_name, firmware_path?)

启动 OpenOCD + GDB 调试会话,加载固件,可选运行到入口点

debug_attach(config_name, firmware_path?)

附加到运行中的目标,不下载固件、不复位(Attach 模式)

debug_stop()

终止当前调试会话

debug_command(command)

执行任意 GDB 命令

debug_continue()

继续目标执行(异步,立即返回)

debug_interrupt()

中断/暂停运行中的目标

状态与日志

工具

描述

debug_status()

获取调试会话状态(JSON)

debug_state()

获取目标执行状态和停止原因

read_rtt(max_lines)

读取 RTT 实时日志(默认 10 行)

shutdown()

优雅关闭 MCP 服务器

架构

AI 客户端 → MCP 协议 → openocd-mcp
                           ├── ProjectConfigManager (解析 launch.json)
                           ├── OpenOCDController (启动/停止 OpenOCD 进程)
                           ├── GDBMISession (MI2 异步协议通信)
                           ├── RTTClient (实时日志读取)
                           └── DebugSessionManager (协调生命周期)

模块

职责

ProjectConfigManager

解析 .vscode/launch.json,替换 ${workspaceFolder},缓存配置

OpenOCDController

启动 OpenOCD 进行烧录(program)或作为 GDB 服务器(:3333

GDBMISession

GDB/MI 异步会话,协议解析、事件驱动、无需轮询提示符

RTTClient

TCP 连接 RTT 端口,后台线程按行缓冲读取日志

DebugSessionManager

单会话模型,协调 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 halt

  • RTT 非致命:固件不支持 RTT 时,调试会话照常运行,RTT 功能不可用但不影响其他操作

  • 超时控制:普通 GDB 命令 30 秒超时,load 120 秒,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 tools
debug_commandC

Execute one GDB command in current active debug session.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
config_nameYes
firmware_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
config_nameYes
firmware_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_dirYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

A3.8/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    An 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.
  • A
    license
    Not graded
    quality
    C
    maintenance
    An 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.
    20
    4
    Apache 2.0
  • A
    license
    A
    quality
    B
    maintenance
    Stateful 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.
    41
    10
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP 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.
    2
    MIT

Latest Blog Posts

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