Go调试器MCP服务器

一个允许LLM与Delve Go调试器交互的MCP服务器,用于调试Go应用程序。

  • by xhd2015
  • Go
  • 本地部署
  • 21 星标
  • 更新于
在 GitHub 查看 xhd2015/dlv-mcp

使用说明

Go Delve调试器MCP服务器

允许LLM与Delve Go调试器交互的MCP服务器。

描述

该项目实现了 模型上下文协议(MCP) 与集成的服务器 Delve Go调试器 使AI助手能够调试Go应用程序。服务器公开了一组工具,允许LLM启动、控制调试会话并与之交互。

您可以在以下网址找到一个工作示例 示例.md.

特性

  • 启动Go程序的调试会话
  • 在代码中设置断点
  • 单步执行代码(下一步,介入,退出)
  • 在调试会话的上下文中计算表达式
  • 检查变量和堆栈跟踪
  • 管理多个调试会话

安装

先决条件

  • 达到1.21或更高
  • 已安装Delve调试器(go install github.com/go-delve/delve/cmd/dlv@latest)

安装

go install github.com/xhd2015/dlv-mcp/cmd/dlv-mcp@latest

用法

启动MCP服务器:

dlv-mcp --listen :9097

然后在以下位置配置MCP服务器 http://localhost:9097/sse,在Cursor或任何MCP客户端中。

检查MCP服务器

bunx @modelcontextprotocol/inspector dlv-mcp

可用工具

调试会话管理

  • start_debug:启动新的调试会话

    • program:要调试的Go程序路径
    • args:程序的命令行参数(可选)
    • mode:调试模式(debug, test,或 exec,默认值: debug)
  • terminate_debug:终止调试会话

    • session_id:要终止的调试会话的ID
  • list_debug_sessions:列出活动调试会话

断点管理

  • set_breakpoint:在调试会话中设置断点
    • session_id:调试会话的ID
    • file:要在其中设置断点的源文件(绝对路径)
    • line:设置断点的行号

执行控制

  • continue:在调试会话中继续执行

    • session_id:调试会话的ID
  • next:在调试会话中跳过当前行

    • session_id:调试会话的ID
  • step_in:在调试会话中进入函数

    • session_id:调试会话的ID
  • step_out:在调试会话中退出功能

    • session_id:调试会话的ID

检查

  • evaluate:在调试会话中计算表达式
    • session_id:调试会话的ID
    • expression:要评估的表达式
    • frame_id:堆栈帧ID(可选,默认值:0)

工作流示例

  1. 启动调试会话:

    start_debug program=/path/to/program.go
    
  2. 设置断点:

    set_breakpoint session_id=session-123456 file=/path/to/program.go line=15
    
  3. 继续断点:

    continue session_id=session-123456
    
  4. 计算表达式:

    evaluate session_id=session-123456 expression="myVariable"
    
  5. 跨过一条线:

    next session_id=session-123456
    
  6. 终止会话:

    terminate_debug session_id=session-123456
    

建筑

服务器是使用以下组件构建的:

  • MCP服务器层:使用mark3labs/mcp-go实现模型上下文协议
  • DAP客户端层:与Delve的DAP服务器通信
  • 会话管理:维护和管理调试会话

检查MCP服务器

bunx @modelcontextprotocol/inspector go run ./cmd/dlv-mcp

使用演示客户端

我们创建了一个演示客户端,展示了如何以编程方式使用调试器mcp服务器。演示:

  1. 启动MCP服务器
  2. 启动调试会话 ./testdata/hello.go
  3. 尝试设置断点并执行调试命令
  4. 正确终止会话和服务器

要运行演示:

go run ./demo/main.go

演示客户端展示了如何:

  • 使用JSON-RPC启动并与MCP服务器通信
  • 使用正确的格式发送工具调用
  • 解析和处理响应
  • 优雅地处理错误

结账 demo/main.go 和 demo/README.md 有关实施的更多详细信息。

许可证

MIT许可证