调试器桥接服务

一个实现模型上下文协议(MCP)的服务器,作为Windows调试器(CDB)的桥梁,允许MCP兼容客户端(如VS Code扩展)与调试器交互,执行打开崩溃转储、执行调试器命令和附加到进程等操作。

  • by stishkin
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 stishkin/cdb-mcp

使用说明

此代码是100%AI生成的

  • VS Code Github复制品代理Gemini 2.5 Pro(预览版)
  • 它实际上似乎正在发挥作用。...

CDB MCP服务器

此项目实现了一个模型上下文协议(MCP)服务器,该服务器充当Windows调试器(CDB)的桥梁。它允许MCP兼容的客户端(例如VS代码扩展)与调试器交互,以执行打开崩溃转储、执行调试器命令和附加到进程等操作。

此服务器使用TypeScript构建,并利用 @modelcontextprotocol/sdk.

特性

  • 打开崩溃转储文件(.dmp)在CDB。
  • 执行任意CDB命令。
  • 将CDB附加到正在运行的进程。
  • 与MCP客户端进行基于STDIO的通信。

先决条件

  • Node.js (包括npm)-建议使用18.x或更高版本。
  • 独立的CDB安装。确保 cdb.exe 可以访问,最好在系统的PATH中访问,或者在需要时在服务器中配置(当前未实现,假定为PATH)。

安装

  1. 克隆存储库(如果您还没有):
    git clone <repository-url>
    cd CDB-MCP
    
  2. 安装依赖项:
    npm install
    

建筑

要将TypeScript源代码编译为JavaScript,请运行:

npm run build

这将把编译后的文件输出到 build 目录。

运行服务器

有多种方法可以运行MCP服务器:

  1. 使用npm(推荐用于开发):

    npm run start
    

    此命令执行 node ./build/index.js 如所定义 package.json.

  2. 直接使用Node.js:

    node ./build/index.js
    
  3. 使用批处理脚本(主要用于VS Code MCP集成):

    .\run_mcp_server.bat
    

    此脚本将更改到项目目录,然后运行 node ./build/index.js 使用Node.js的绝对路径(在脚本中可配置)。

配置

用于VS代码MCP集成(.vscode/mcp.json)

如果您将此服务器与支持MCP的VS Code扩展一起使用,您通常会在 .vscode/mcp.json 您工作区中的文件。示例配置:

{
  "servers": {
    "cdb-mcp": {
      "type": "stdio",
      "command": "${workspaceFolder}/run_mcp_server.bat",
      "env": {}
    }
  }
}
  • type: "stdio":表示服务器通过标准输入/输出进行通信。
  • command:指定启动服务器的命令。使用 ${workspaceFolder} 使路径相对于VS Code工作区根。

run_mcp_server.bat

此批处理文件是启动服务器的助手。它确保了正确的工作目录,并且可以配置特定的路径 node.exe 如果它不在系统PATH中,或者你需要使用特定的Node.js版本。

使用MCP客户端

服务器运行后,MCP客户端可以连接到它。服务器在stdin上监听JSON-RPC消息,并向stdout发送响应/通知。

可用的MCP方法

服务器公开以下自定义MCP方法(请求):

  • cdb/openCrashDump:打开崩溃转储文件。
    • 参数: { path: string }
    • 例子: {"jsonrpc": "2.0", "method": "cdb/openCrashDump", "params": {"path": "C:\path\to\your\dump.dmp"}, "id": 1}
  • cdb/executeCommand:执行CDB命令。
    • 参数: { command: string }
    • 例子: {"jsonrpc": "2.0", "method": "cdb/executeCommand", "params": {"command": "!analyze -v"}, "id": 2}
  • cdb/attachToProcess:将调试器附加到正在运行的进程。
    • 参数: { processId?: string, processName?: string } (必须至少提供一个)
    • 示例(按ID): {"jsonrpc": "2.0", "method": "cdb/attachToProcess", "params": {"processId": "1234"}, "id": 3}
    • 示例(按名称): {"jsonrpc": "2.0", "method": "cdb/attachToProcess", "params": {"processName": "notepad.exe"}, "id": 4}

(注意:实际方法名称如下 f1e.cdb/open-crash-dump 如果遵循不同的约定,则某些客户端使用的MCP方法名称可能特定于该客户端的映射,而不是此服务器公开的直接MCP方法名称。服务器端处理程序当前已命名 f1e_cdb_open_crash_dump, f1e_cdb_execute_cdb_command这意味着客户端可能正在发送以下请求 f1e/cdb/openCrashDump。如果服务器严格遵守其MCP方法的不同命名约定,则应更新本节。)

可用 package.json 脚本

  • npm run build:从编译TypeScript代码 src 向 build.
  • npm run start:通过运行编译后的命令启动MCP服务器 build/index.js.
  • npm test:当前显示错误消息(“错误:未指定测试”)。

项目结构

  • src/:包含服务器的TypeScript源代码。
    • index.ts:应用程序的主要入口点。
  • build/:包含编译的JavaScript代码(输出 npm run build).
  • node_modules/:包含项目依赖关系。
  • .vscode/:包含VS代码特定的设置。
    • mcp.json:MCP客户端集成的示例配置。
  • package.json:定义项目元数据、依赖关系和脚本。
  • tsconfig.json:TypeScript编译器配置。
  • run_mcp_server.bat:运行服务器的实用程序脚本。
  • README.md:这个文件。

故障排除

  • 客户端日志中的“解析消息失败”: 此服务器使用 console.error 用于自己的日志记录。如果MCP客户端严格要求stdout/stderr上只有JSON-RPC,则这些服务器日志可能会在客户端显示为解析错误。这些通常用于服务器端诊断。
  • 未找到CDB: 确保 cdb.exe 位于系统的PATH中,或者修改服务器逻辑/脚本以指向其显式位置。
  • 找不到Node.js/npm: 确保Node.js安装正确 bin 目录在您的系统PATH中。

许可证

该项目根据ISC许可证获得许可。请参阅 package.json 了解更多详情。