mcp-windbg
让 AI 直接操控 WinDbg,用自然语言分析 Windows 崩溃转储文件
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
让 AI 直接操控 WinDbg,用自然语言分析 Windows 崩溃转储文件
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
当你打开任务管理器,发现某个进程毫无征兆地消失;当你精心部署的服务器在凌晨 3 点弹出一条「访问违规」错误日志——崩溃转储(Crash Dump)文件就是操作系统为这一刻留下的「黑匣子」。
问题是:打开 WinDbg,输入 .dump /ma C:\dumps\crash.dmp,然后呢?冗长的寄存器状态、十六进制内存地址、调用栈里层层嵌套的动态链接库……这门槛足以让大多数开发者望而却步。
MCP WinDbg(Model Context Protocol for WinDbg)正在做一件事:用自然语言撬开 Windows 崩溃分析的大门。它不是 WinDbg 的替代品,而是一套 MCP 服务器,让 AI 模型能够「说 WinDbg 的语言」,替你解读那些冰冷的调试输出。
MCP WinDbg 让 AI 与 WinDbg/CDB 调试器桥接,实现自然语言驱动的崩溃分析
WinDbg(Windows Debugger)是微软官方调试工具,分为图形界面的 WinDbg Preview(Microsoft Store 可下载)和命令行版本的 CDB(NTSD/KD/WinDbg 四者同源)。它是 Windows 内核及驱动开发、进程崩溃分析、内存 Dump 解读的事实标准。
然而 WinDbg 的学习曲线极为陡峭:
命令体系庞大:基础命令(k、r、x、lm)就有数十个,高级扩展(!analyze -v、!heap)更是需要深厚经验
符号(Symbol)配置繁琐:必须正确配置 _NT_SYMBOL_PATH,否则调用栈就是一堆无法解析的内存偏移量
上下文敏感:同一个命令在不同调试场景(用户态/内核态/实时进程)下行为各异
Model Context Protocol(MCP)是 Anthropic 在 2024 年底开源的 AI 模型上下文协议,目标是让 AI 应用能以标准化方式调用外部工具。MCP 的核心价值在于「一次编写,到处运行」——开发者写一个 MCP 服务器,就能被所有支持 MCP 的客户端(Claude Desktop、GitHub Copilot、Cline、Cursor、Windsurf 等)直接使用。
MCP WinDbg 的作者 svnscha(Sven Scharmentke)正是看准了这一点:崩溃分析本质上是「执行命令→解读结果→执行下一个命令」的循环,天然适合 LLM 介入。
MCP WinDbg 暴露了 8 个 MCP 工具,分为三类:
| 工具 | 功能 | 典型场景 |
|------|------|----------|
| list_windbg_dumps | 扫描指定目录下的 .dmp 文件 | 批量发现服务器上的崩溃 Dump |
| open_windbg_dump | 打开并初步分析崩溃 Dump | 输入 .ecxr(切换异常上下文)执行堆栈回溯 |
| close_windbg_dump | 释放 Dump 会话资源 | 调试完成后清理 cdb.exe 进程 |
| 工具 | 功能 | 典型场景 |
|------|------|----------|
| open_windbg_remote | 建立到远程调试目标的连接 | 连接测试服务器或虚拟机进行实时调试 |
| close_windbg_remote | 断开远程会话 | 调试完毕释放连接 |
| send_ctrl_break | 向实时调试目标发送中断信号 | 中断挂起的进程,执行检查 |
| 工具 | 功能 |
|------|------|
| run_windbg_cmd | 直接执行任意 WinDbg/CDB 命令 |
核心依赖极为精简:
mcp >= 1.26.0:MCP Python SDK,处理协议握手、工具注册、JSON-RPC 传输
pydantic >= 2.12.5:工具参数校验(OpenWindbgDump、OpenWindbgRemote 等 Pydantic 模型)
starlette >= 0.52.1 + uvicorn:HTTP 传输层(--transport streamable-http 模式)
src/mcp_windbg/
├── __init__.py # CLI 入口(argparse)
├── server.py # MCP Server + 8个工具 handler(30KB+)
├── cdb_session.py # CDB 会话管理(进程启动/通信/超时)
├── filter_script.py # PII 脱敏钩子(process_input/process_output)
└── prompts/
└── dump-triage.prompt.md # 批量 Dump 分诊提示词
server.py 是核心:注册全部 8 个 MCP 工具,通过 cdb_session.py 与本机 CDB 进程通信,使用 asyncio 实现异步并发会话管理(active_sessions: Dict[str, CDBSession] 字典)。
cdb_session.py 负责启动和管理 CDB 子进程。其关键设计包括:
进程生命周期:通过 asyncio.create_subprocess_exec 启动 CDB,stdin/stdout 异步管道通信
命令超时控制:全局 timeout 参数(默认 30 秒),防止 CDB 命令卡死
会话隔离:每个 dump_path 对应独立 CDB 进程,active_sessions 字典按路径索引
符号路径自动注入:自动将 Dump 文件所在目录加入符号搜索路径(--no-dump-dir-symbols 可禁用)
WinDbg Preview 支持:通过 winreg 读取系统崩溃 Dump 注册表路径 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps
项目提供了可选的 --filter-script 参数,用于加载自定义 Python 脚本,对工具输入/输出进行文本级处理(典型用途:PII 脱敏)。
def process_input(text: str) -> str:
# 脱敏逻辑
return text
def process_output(text: str) -> str:
return text # 必须返回
安全要点:filter_script 在服务进程内就地执行,作为受信任代码运行,不在独立的沙箱中。
假设我们拿到了一个 Access Violation 类型的 Dump 文件 app.dmp,完整的 AI 协作分析流程如下:
Step 1:启动 MCP 服务器
mcp-windbg --symbols-path "SRV*C:\\Symbols*https://msdl.microsoft.com/download/symbols"
Step 2:让 AI 分析
Analyze the crash dump at C:\dumps\app.dmp
AI 通过 MCP 工具链依次执行:
open_windbg_dump:打开 Dump,AI 发送 .ecxr(切换到异常上下文)+ k(调用栈)
AI 解读输出:识别 Access Violation 发生在 heap-buffer-overflow.cpp 第 47 行
AI 进一步调用 run_windbg_cmd 执行 !heap -p -a <address> 定位堆损坏
AI 给出根因结论:在 buffer_copy() 函数中,memcpy 目标缓冲区长度小于源缓冲区
在实际生产环境中,崩溃 Dump 可能包含用户名、文件路径等敏感信息。通过 filter script 可以在发送给 LLM 之前进行脱敏:
# redaction.py
import re
def process_output(text: str) -> str:
text = re.sub(r'C:\\Users\\[\\w.]+', 'C:\\Users\\[REDACTED]', text)
return text
def process_input(text: str) -> str:
return text # 不处理输入
运行:mcp-windbg --filter-script C:\filters\redaction.py
除了默认的 stdio 模式(适合本地 Claude Desktop、VS Code),MCP WinDbg 还支持 streamable-http 传输,适合容器化部署或远程团队共享:
mcp-windbg --transport streamable-http --host 0.0.0.0 --port 8000
项目的测试策略非常值得借鉴:使用 YAML 文件驱动端到端场景测试。
测试文件结构(src/mcp_windbg/tests/scenarios/):
analyze_dump.yaml:Dump 分析核心流程
remote_debugging.yaml:远程调试场景
symbols_combine.yaml + symbols_reuse.yaml:符号路径组合/复用
filter_*.yaml(7个):PII 脱敏相关各边界情况
http_transport.yaml:HTTP 传输验证
测试框架(harness.py + runner.py)通过 subprocess 启动真实的 CDB 进程(测试标记 @pytest.mark.live),当 CDB 不存在时自动跳过(skips cleanly when absent),不污染 CI 环境。
作者在 README 中明确声明:"Not a magical auto-fix solution"(不是自动修复方案)。这是非常重要的自我定位。
当前局限性包括:
平台绑定:仅支持 Windows(MCP WinDbg 名字本身已说明),Linux/macOS 调试场景不适用
符号依赖:没有正确的微软符号服务器配置,调用栈解析质量大幅下降
实时调试风险:send_ctrl_break 向生产环境发送中断信号是高风险操作,需严格评估
LLM 幻觉风险:AI 可能错误解读寄存器状态或内存地址,需要有经验的工程师复核
企业防火墙限制:MCP 客户端访问远程 MCP 服务器可能被企业安全策略拦截
截至分析时,项目已获得 1,348 Stars(fork 127),在 MCP Server 细分领域属头部项目。Topics 覆盖 copilot、copilot-chat、mcp、mcp-server,说明其核心受众是 AI 辅助编程工具的深度用户。
从技术演进角度看,MCP WinDbg 代表了一个重要趋势:AI 正在从「对话生成」向「工具调用」延伸。大模型具备强大的指令理解能力,但要真正辅助专业工作,必须能够操控真实世界的专业工具——调试器、IDE、数据库、操作系统 API。MCP 协议为这种「AI + 专业工具」的桥接提供了标准化路径。
作者在博客文章(https://svnscha.de/posts/ai-meets-windbg/)中提到,这一项目的动机来自于日常工作中频繁遇到崩溃分析需求,而 WinDbg 命令的繁琐让他意识到 AI 可以扮演「翻译层」的角色,将自然语言转换为精确的调试命令序列。
随着 MCP 生态的持续壮大,预计会有更多垂直领域的 MCP 服务器涌现:数据库诊断、容器编排、网络抓包分析……MCP WinDbg 作为最早期的专业调试类 MCP 服务器之一,其设计模式值得参考。