项目简介
MCP-PDB 是一个基于 Model Context Protocol (MCP) 构建的服务器端应用,旨在将 Python 的标准调试器 (pdb) 的功能暴露给大型语言模型 (LLM) 客户端,例如 Claude Code 或 Windsurf。它允许 LLM 通过结构化的工具调用来控制 Python 代码的执行、检查变量、设置断点等,从而实现更深入的代码理解和调试能力。
安全警告: 本工具会执行 Python 代码。请仅在您信任的环境中使用。
主要功能点
- 启动调试会话: 能够针对指定的 Python 文件或使用 pytest 启动调试。
- 发送 PDB 命令: 允许直接向运行中的 PDB 实例发送任何标准的 PDB 命令 (如 'n', 's', 'c', 'p var', 'l', 'q' 等)。
- 管理断点: 支持在指定文件的特定行设置、清除和列出断点。
- 重启会话: 使用相同的配置重新启动当前的调试会话。
- 检查变量: 获取变量的类型、值以及属性列表等详细信息。
- 获取状态: 查询当前调试会话的运行状态和位置。
- 结束会话: 终止当前的调试会话。
- 项目和虚拟环境感知: 尝试识别项目根目录并使用项目内的虚拟环境(如通过 'uv' 或标准 'venv')启动调试,确保正确的依赖环境。
- 自动断点跟踪: 记录设置的断点并在会话重启时尝试恢复。
安装步骤
该服务器通常通过 MCP 客户端(如 Claude Code, Windsurf)进行安装和管理。它依赖于 'uv' 包管理器和 Python 环境。
- 确保安装 'uv': 如果您尚未安装 'uv',请按照其官方文档安装。
- 通过 MCP 客户端安装:
- 对于 Claude Code: 打开终端或 Claude Code 的内置终端,执行类似以下命令(请注意 '--' 分隔符):
您也可以指定 Python 版本,例如:claude mcp add mcp-pdb -- uv run --with mcp-pdb mcp-pdbclaude mcp add mcp-pdb -- uv run --python 3.13 --with mcp-pdb mcp-pdb - 对于 Windsurf: 在 Windsurf 的配置文件中,找到 'mcpServers' 部分,添加一个配置条目。
- 对于 Claude Code: 打开终端或 Claude Code 的内置终端,执行类似以下命令(请注意 '--' 分隔符):
完成安装后,MCP 客户端将能够发现并连接到 'mcp-pdb' 服务器。
服务器配置
MCP 服务器通常由 MCP 客户端负责启动和管理。对于 'mcp-pdb' 服务器,您需要在您的 MCP 客户端配置中提供以下关键信息:
- 服务器名称 (server name): 例如 'mcp-pdb'。这是客户端用来识别和连接服务器的名称。
- 启动命令 (command): 用于启动服务器的可执行文件路径。根据推荐安装方式,这通常是 'uv'。
- 启动参数 (args): 传递给启动命令的参数列表。对于使用 'uv' 的情况,典型的参数是 'run --with mcp-pdb mcp-pdb'。
这些信息通常以 JSON 格式配置在 MCP 客户端的设置文件中。MCP 客户端会根据这些配置在需要时自动启动并连接到 'mcp-pdb' 服务器。
基本使用方法
通过 MCP 客户端与 'mcp-pdb' 服务器连接后,LLM 可以通过调用暴露的 Tools 来进行调试操作:
- 调用 'start_debug' 工具: 指定要调试的文件路径,选择是否使用 'pytest' 模式,并提供任何必要的命令行参数。服务器将启动 PDB 进程并在文件开头或第一个断点处停止。
- 调用 'send_pdb_command' 工具: LLM 可以发送标准的 PDB 命令(如 'n' 下一行, 's' 进入函数, 'c' 继续, 'p 变量名' 打印变量值, 'l' 查看代码等)来控制程序执行和检查状态。服务器将返回 PDB 的输出。
- 调用 'set_breakpoint' 和 'clear_breakpoint' 工具: 根据需要设置或移除特定文件和行号的断点。
- 调用 'examine_variable' 工具: 获取关于特定变量的详细信息,包括类型和属性。
- 调用 'list_breakpoints' 工具: 查看当前设置的所有断点。
- 调用 'get_debug_status' 工具: 随时检查调试会话是否仍在运行,以及当前的位置等状态信息。
- 调用 'restart_debug' 工具: 使用与上次相同的配置重新开始调试会话。
- 调用 'end_debug' 工具: 终止调试会话。
LLM 会根据调试的需要,结合代码上下文和 PDB 的输出来决定调用哪个工具以及传递什么参数,从而实现自动化或辅助的 Python 代码调试流程。
信息
分类
开发者工具