使用说明
PDB MCP服务器
使用pdb进行Python调试的模型上下文协议(MCP)服务器,捆绑为 Claude代码插件 使用调试最佳实践。
特性
- 启动调试会话:使用pdb在调试模式下启动Python脚本
- 启动Pytest调试会话:在测试失败时使用自动pdb运行pytest
- 执行PDB命令:发送命令以控制调试会话
- 自动检测Python解释器:自动使用虚拟环境Python
- 模块化架构:会话和服务器模块的关注点完全分离
- Claude代码插件:包括教授Claude结构化调试工作流程和最佳实践的技能
安装
从PyPI安装
pip install pdb-mcp
使用紫外线进行安装(推荐)⚡️
uvx 将自动安装软件包并运行命令。
uvx pdb-mcp
开发安装
pip install -e .
用法
作为MCP服务器
运行服务器:
pdb-mcp
服务器公开了三个工具:
1. start_debug
启动Python脚本的调试会话。
参数:
script_path(必填):要调试的Python脚本的路径python_path(必填):正在调试的项目的Python解释器的路径working_directory(必填):运行命令的目录(应该是项目目录)args(可选):传递给脚本的命令行参数timeout(可选):在没有新输出的情况下等待返回的时间(默认值:5.0)。只要有新的输出,就会一直等待。env(可选):为调试会话设置的环境变量(例如,{“DEBUG”:“1”})
例子:
{
"script_path": "test_script.py",
"python_path": "/path/to/python",
"working_directory": "/path/to/project",
"env": {"DEBUG": "1"}
}
2. start_pytest_debug
启动pytest调试会话,该会话在测试失败时自动进入pdb。
参数:
args(必需):在“pytest--pdb”之后传递的参数。可以包括测试路径、过滤器和pytest选项(例如,“tests/test_example.py-v”、“-k test_login”、“-x test_auth.py”)python_path(必填):正在调试的项目的Python解释器的路径working_directory(必填):运行命令的目录(应该是项目目录)timeout(可选):在没有新输出的情况下等待返回的时间(默认值:10.0秒)。只要有新的输出,就会一直等待。env(可选):为调试会话设置的环境变量(例如,{“DEBUG”:“1”})
例子:
{
"args": "tests/test_example.py -v",
"python_path": "/path/to/python",
"working_directory": "/path/to/project",
"env": {"DEBUG": "1"}
}
3. execute_pdb_command
在活动调试会话中执行pdb命令。
参数:
command(必填):要执行的pdb命令timeout(可选):返回前等待无新输出的时间(秒)(默认值:5.0)
可用命令:
n(next):执行下一行(不要进入函数)s(step):执行下一行(进入函数)b <line>:在第行设置断点(例如。,b 10)b <file>:<line>:在另一个文件中设置断点(例如。,b utils.py:5)l(列表):显示当前行周围的代码p <var>:打印变量值(例如。,p user_name)c(continue):继续执行,直到下一个断点q(退出):退出调试会话h(help):显示所有命令的帮助r(return):执行直到当前函数返回w(where):显示调用堆栈cl <breakpoint>:清除断点a(args):打印当前函数的参数
例子:
{
"command": "n"
}
测试
基本脚本调试
提供了一个示例测试脚本: test_script.py
运行自动测试:
uv run python test_mcp_client.py
调试工作流程示例:
- 开始调试:
start_debug随着script_path = "test_script.py" - 步骤代码:
execute_pdb_command随着command = "n" - 查看代码:
execute_pdb_command随着command = "l" - 打印变量:
execute_pdb_command随着command = "p num" - 继续:
execute_pdb_command随着command = "c" - 退出:
execute_pdb_command随着command = "q"
Pytest调试
提供了一个示例测试文件: test_example.py
运行pytest调试测试:
uv run python test_pytest_client.py
测试将:
- 使用运行pytest
-x --pdb旗帜 - 在第一次测试失败时停止
- 断言失败时掉入pdb
- 允许您检查变量和调试
配置
要与Claude Desktop或其他MCP客户端一起使用,请添加到您的配置文件中(例如。, claude_desktop_config.json):
使用uvx(推荐)
{
"mcpServers": {
"pdb-debugger": {
"command": "uvx",
"args": ["--from", "pdb-mcp", "pdb-mcp"]
}
}
}
使用本地开发版本
{
"mcpServers": {
"pdb-debugger": {
"command": "uv",
"args": [
"--directory",
"/path/to/pdb-mcp",
"run",
"pdb-mcp"
]
}
}
}
替换 /path/to/pdb-mcp 与这个项目的实际路径。
建筑
项目结构
src/pdb_mcp/
├── __init__.py # Entry point and main function
├── session.py # PdbSession class for managing pdb processes
└── server.py # MCP server and tool definitions
会话管理
这 PdbSession 类维护一个持久的pdb进程:
- 用途
subprocess.Popen使用目标脚本启动pdb - 通过stdin/stdout管道进行通信
- 后台线程异步读取输出
- 在命令执行之间维护调试会话状态
- 自动从虚拟环境中检测Python解释器
Python解释器配置
这 python_path 参数指定Python解释器 客户项目 (不是服务器的环境):
- 必需参数:代理应提供项目的Python解释器路径
- 典型值:
.venv/bin/python或venv/bin/python用于虚拟环境/usr/bin/python3系统Python- conda或其他环境的自定义路径
- 后备方案:如果未提供或为空,则返回
"python"命令(使用系统PATH)
注: 服务器不使用自己的Python(sys.executable)因为MCP服务器可能在与正在调试的客户端项目不同的环境中运行。
工作目录配置
两者 start_debug 和 start_pytest_debug 要求a working_directory 参数:
- 必需参数:应该是项目的根目录或包含脚本的目录
- 目的:确保脚本在正确的目录上下文中运行
- 用例:
- 使用相对文件路径的脚本
- 具有特定目录结构要求的项目
- 从项目根目录加载配置文件
- 代理集成:代理(如Claude)通常知道项目目录,应该提供它
例子:
{
"script_path": "src/main.py",
"working_directory": "/home/user/myproject"
}
这相当于运行:
cd /home/user/myproject && python -m pdb src/main.py
智能输出等待
服务器使用智能输出等待机制:
- 单个超时参数:返回前等待没有新输出的时间
- 没有总时间限制:只要有新的输出,服务器就会一直等待
- 自适应:快速命令返回速度快,慢速命令获得所需的时间
- 用户可配置:所有工具都接受
timeout参数
它是如何工作的:
- 服务器每0.1秒连续检查一次输出
- 每次有新的输出到达时,空闲定时器都会重置
- 当没有新的输出时
timeout秒,它返回 - 无论脚本运行多长时间,如果它继续产生输出,服务器都会等待
默认超时值:
start_debug:5.0秒(pdb通常快速启动)start_pytest_debug:10.0秒(测试可能会缓慢产生输出)execute_pdb_command:5.0秒(大多数命令都很快)
例子: 运行10秒但每0.5秒打印一次的脚本可以很好地使用 timeout=3.0,因为空闲时间从不超过3秒。
Claude代码插件
这个项目也是 Claude代码插件 它提供调试最佳实践作为技能。当作为插件安装时,Claude会自动收到结构化的调试指导。
插件安装
# Install as a Claude Code plugin
claude plugin add /path/to/pdb-mcp
或在本地进行测试:
claude --plugin-dir /path/to/pdb-mcp
包含的技能
PDB调试最佳实践
调试Python脚本时自动激活。指导克劳德:
- 分析代码并规划断点 之前 启动调试会话
- 根据问题类型在战略位置设置断点
- 在每个断点处遵循系统调查模式
- 针对不同的调试场景使用高效的pdb命令
Pytest调试最佳实践
调试测试失败时自动激活。指导克劳德:
- 选择正确的调试模式(
--pdbvs--trace)根据故障类型 - 调试前缩小到特定的失败测试
- 浏览调用堆栈以查找应用程序代码中的根本原因
- 处理常见的pytest模式(夹具、参数化测试、模拟)
插件结构
pdb-mcp/
├── .claude-plugin/
│ └── plugin.json # Plugin manifest
├── .mcp.json # MCP server configuration
├── skills/
│ ├── pdb-debugging/
│ │ ├── SKILL.md # Core debugging best practices
│ │ └── references/
│ │ ├── debugging-workflows.md # Detailed workflows
│ │ └── pdb-commands-cheatsheet.md # Command reference
│ └── pytest-debugging/
│ ├── SKILL.md # Pytest debugging best practices
│ └── references/
│ └── pytest-debug-patterns.md # Advanced patterns
└── src/pdb_mcp/ # MCP server source code
许可证
有关详细信息,请参阅LICENSE文件。