Token导航 LogoToken导航TokenDH.com
Xdebug MCP Server logo
开发工具未说明官方级别未说明来源级核验

Xdebug MCP Server

MCP Server

一个通过Xdebug的DBGp协议提供PHP调试功能的MCP服务器,支持AI助手直接调试PHP应用。

工具数

0

提示词数

0

GitHub Stars

21

资源数

0
TypeScriptClaude开发工具Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

kpanuragh

提供方

kpanuragh

最后核验

2026/5/17 20:21

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

Xdebug MCP服务器

](https://www.npmjs.com/package/xdebug-mcp) ![License: MIT](https://opensource.org/licenses/MIT)

一个MCP(模型上下文协议)服务器,通过Xdebug的DBGp协议提供PHP调试功能。这允许像Claude这样的AI助手直接调试PHP应用程序。

特性

核心调试

  • 完全调试控制:踏入、跨过、走出、继续、停止
  • 断点:行断点、条件断点、异常断点、函数调用断点
  • 计量检验:查看所有变量,获取特定变量,设置变量值
  • 表达式求值:在当前上下文中计算PHP表达式
  • 堆栈跟踪:查看完整的调用堆栈
  • 多个会话:同时调试多个PHP脚本
  • Docker支持:适用于在Docker容器中运行的PHP

高级功能

  • 观察表情:具有变化检测功能的持久手表,可在每次中断时自动评估
  • 日志点:使用日志消息而不停止执行 {$var} 占位符
  • 内存剖析:跟踪断点之间的内存使用情况和执行时间
  • 代码覆盖率:跟踪调试期间执行了哪些行
  • 请求上下文:捕获 $_GET, $_POST, $_SESSION, $_COOKIE,自动标头
  • 步骤筛选器:在步进过程中跳过供应商/库代码
  • 调试配置文件:保存和还原断点配置
  • 会话导出:将调试会话导出为JSON或HTML报告

安装

来自npm(推荐)

npm install -g xdebug-mcp

来自源头

git clone https://github.com/kpanuragh/xdebug-mcp.git
cd xdebug-mcp
npm install
npm run build

MCP服务器配置

克劳德代码

将xdebug mcp服务器添加到mcp配置中(.mcp.json 或克劳德设置):

使用npm全局安装:

{
  "mcpServers": {
    "xdebug": {
      "command": "xdebug-mcp",
      "env": {
        "XDEBUG_PORT": "9003",
        "LOG_LEVEL": "info"
      }
    }
  }
}

使用npx:

{
  "mcpServers": {
    "xdebug": {
      "command": "npx",
      "args": ["-y", "xdebug-mcp"],
      "env": {
        "XDEBUG_PORT": "9003",
        "LOG_LEVEL": "info"
      }
    }
  }
}

使用路径映射(适用于Docker)

在Docker容器中调试PHP时,需要路径映射将容器路径转换为主机路径:

{
  "mcpServers": {
    "xdebug": {
      "command": "xdebug-mcp",
      "env": {
        "XDEBUG_PORT": "9003",
        "PATH_MAPPINGS": "{\"/var/www/html\": \"/home/user/projects/myapp\"}",
        "LOG_LEVEL": "info"
      }
    }
  }
}

使用DBGp代理注册

如果您已经使用了DBGp代理,请保留 mcp-config.example.json 作为默认的直接监听器示例,并从 mcp-config.proxy.example.json 用于代理注册。

代理模式要求:

  • TCP侦听器模式 xdebug-mcp (不是 XDEBUG_SOCKET_PATH)
  • 一个唯一的回调端口,例如 9006, 9007,或 9008 为了 XDEBUG_PORT
  • DBGP_PROXY_HOST, DBGP_PROXY_PORT,以及 DBGP_IDEKEY

请参阅 DBGp代理注册指南 了解完整设置、多代理示例和PHP/Xdebug代理配置。

PHP/Xdebug配置

php.ini(或 xdebug.ini)

[xdebug]
zend_extension=xdebug

; Enable step debugging
xdebug.mode=debug

; Start debugging on every request
xdebug.start_with_request=yes

; Host where MCP server is running
; For Docker: use host.docker.internal
; For local PHP: use 127.0.0.1
xdebug.client_host=host.docker.internal

; Port where MCP server listens
xdebug.client_port=9003

; IDE key (optional, for filtering)
xdebug.idekey=mcp

Docker Compose

version: '3.8'

services:
  php:
    image: php:8.2-apache
    volumes:
      - ./src:/var/www/html
      - ./xdebug.ini:/usr/local/etc/php/conf.d/99-xdebug.ini
    extra_hosts:
      - "host.docker.internal:host-gateway"  # Required for Linux
    environment:
      - XDEBUG_MODE=debug
      - XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003

使用Unix域套接字

为了提高性能和简化本地系统上的设置,您可以使用Unix域套接字而不是TCP。Unix套接字消除了网络堆栈开销,非常适合在同一台机器上进行调试。

优点:

  • ⚡ 更低的延迟(无TCP/IP堆栈开销)
  • 🔒 更好的安全性(文件权限而不是端口绑定)
  • 📦 更简单的设置(无端口管理)
  • 🚀 更快的本地调试通信

MCP配置(Unix套接字):

{
  "mcpServers": {
    "xdebug": {
      "command": "xdebug-mcp",
      "env": {
        "XDEBUG_SOCKET_PATH": "/tmp/xdebug.sock",
        "LOG_LEVEL": "info"
      }
    }
  }
}

PHP/Xdebug配置:

[xdebug]
zend_extension=xdebug
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=unix:///tmp/xdebug.sock

套接字文件权限:

套接字文件是使用默认权限创建的。要限制访问,您可以:

# After MCP server starts
chmod 600 /tmp/xdebug.sock

# Or use a secure directory
mkdir -p ~/.xdebug && chmod 700 ~/.xdebug
# Then set XDEBUG_SOCKET_PATH=$HOME/.xdebug/xdebug.sock

自动清理:

XDEBUG_SOCKET_PATH 设置后,服务器将:

  • 在指定的Unix套接字而不是TCP端口上侦听
  • 启动时自动清理过时的套接字文件(防止“地址正在使用”错误)
  • 关机时自动清理套接字文件
  • 使用与TCP模式相同的调试工具和功能

何时使用Unix套接字:

  • ✅ 本地PHP开发(最佳性能)
  • ✅ 同机调试
  • ✅ 高频断点点击
  • ❌ 远程调试(改用TCP)

可用MCP工具(共41个)

会话管理

工具说明
list_sessions列出所有活动的调试会话
get_session_state获取会话的详细状态
set_active_session设置哪个会话处于活动状态
close_session关闭调试会话

断点

工具说明
set_breakpoint设置行断点或条件断点(支持挂起断点)
set_exception_breakpoint异常中断(支持挂起的断点)
set_call_breakpoint函数调用中断(支持挂起的断点)
remove_breakpoint删除断点(适用于挂起的断点)
update_breakpoint启用/禁用或修改断点
list_breakpoints列出所有断点,包括待定断点

待定断点:您可以在调试会话开始之前设置断点。这些被存储为“挂起的断点”,并在PHP脚本与Xdebug连接时自动应用。这对于在触发页面加载或脚本执行之前设置断点非常有用。

执行控制

工具说明
continue继续到下一个断点
step_into进入函数调用
step_over跳过(跳过函数内部)
step_out退出当前功能
stop停止调试
detach分离并让脚本继续

检查

工具说明
get_stack_trace获取调用堆栈
get_contexts获取可用的变量上下文
get_variables获取作用域中的所有变量
get_variable获取特定变量
set_variable设置变量的值
evaluate计算PHP表达式
get_source获取源代码

观察表情

工具说明
add_watch添加持久监视表达式
remove_watch删除手表表情
evaluate_watches评估所有手表并检测变化
list_watches列出所有活动手表

日志点

工具说明
add_logpoint添加带有消息模板的日志点
remove_logpoint删除日志点
get_logpoint_history查看日志输出和点击统计

分析

工具说明
start_profiling启动内存/时间分析
stop_profiling停止分析并获取结果
get_profile_stats获取当前分析统计信息
get_memory_timeline查看随时间变化的内存使用情况

代码覆盖率

工具说明
start_coverage开始跟踪代码覆盖率
stop_coverage停下来获取报道
get_coverage_report查看覆盖率统计

调试配置文件

工具说明
save_debug_profile将当前配置另存为配置文件
load_debug_profile加载已保存的调试配置文件
list_debug_profiles列出所有已保存的配置文件

附加工具

工具说明
capture_request_context捕获HTTP请求上下文
add_step_filter添加过滤器以在步进过程中跳过文件
list_step_filters列出步骤筛选规则
get_function_history查看函数调用历史记录
export_session将会话导出为JSON/HTML报告
capture_snapshot捕获调试状态快照

用法示例

设置断点

Use set_breakpoint with file="/var/www/html/index.php" and line=25

条件断点

Use set_breakpoint with file="/var/www/html/api.php", line=42, condition="$userId > 100"

监视表达式

Use add_watch with expression="$user->email"
Use add_watch with expression="count($items)"

日志点

Use add_logpoint with file="/var/www/html/api.php", line=50, message="User {$userId} accessed {$endpoint}"

检查变量

Use get_variables to see all local variables
Use get_variable with name="$user" to inspect a specific variable
Use evaluate with expression="count($items)" to evaluate an expression

捕获请求上下文

Use capture_request_context to see $_GET, $_POST, $_SESSION, cookies, and headers

环境变量

变量默认值描述
XDEBUG_PORT9003用于监听Xdebug连接的端口(TCP模式)
XDEBUG_HOST0.0.0.0要绑定的主机(TCP模式)
XDEBUG_SOCKET_PATH-Unix域套接字路径(例如。, /tmp/xdebug.sock).设置时,使用Unix套接字而不是TCP
COMMAND_TIMEOUT30000命令超时(毫秒)
PATH_MAPPINGS-JSON对象映射容器到主机路径
MAX_DEPTH3可变检查的最大深度
MAX_CHILDREN128数组/对象返回的最大子对象数
MAX_DATA2048每个变量的最大数据大小
LOG_LEVELinfo日志级别:调试、信息、警告、错误

连接模式:TCP与Unix套接字

特性TCPUnix套接字
设置简单(默认)简单(一个环境变量)
演出良好优秀(延迟较低)
安全网络可访问的端口基于文件的权限
远程调试✅ 支持❌ 仅限本地
码头工人✅ 与host.docker.internal配合使用❌ 需要卷装载
陈旧插座手动端口清理自动清理
默认XDEBUG_PORT=9003已禁用(使用TCP)

快速决策指南:

  • 🏠 地方发展? → 使用Unix套接字以获得最佳性能
  • 🐳 Docker在同一台机器上? → 使用带卷挂载的Unix套接字
  • 🌐 远程服务器? → 使用TCP
  • 🚀 最大速度? → 使用Unix套接字
  • 📝 不知道? → 从TCP(默认)开始,如果需要,切换到Unix套接字

运作原理

  1. MCP服务器启动 并监听Xdebug连接(TCP端口9003或Unix套接字)
  2. PHP脚本运行 启用Xdebug
  3. Xdebug连接 通过DBGp协议连接到MCP服务器
  4. AI使用MCP工具 控制调试(设置断点、步骤、检查)
  5. DBGp命令 发送到Xdebug,解析并返回响应
┌─────────────┐     MCP/stdio      ┌─────────────┐   DBGp/TCP or    ┌─────────────┐
│   Claude    │ ◄────────────────► │  xdebug-mcp │ ◄─ Unix Socket ──► │   Xdebug    │
│  (AI Agent) │                    │   Server    │                   │  (in PHP)   │
└─────────────┘                    └─────────────┘                   └─────────────┘

连接选项:

  • TCP(默认): xdebug.client_host=127.0.0.1 + XDEBUG_PORT=9003
  • Unix套接字: xdebug.client_host=unix:///tmp/xdebug.sock + XDEBUG_SOCKET_PATH=/tmp/xdebug.sock

故障排除

没有出现调试会话

  1. 检查是否安装了Xdebug: php -v 应显示Xdebug
  2. 验证Xdebug配置: php -i | grep xdebug
  3. 确保 xdebug.client_host 指向MCP服务器
  4. 对于TCP: 检查防火墙是否允许端口9003上的连接
  5. 对于Unix套接字: 验证套接字路径是否存在以及是否具有正确的权限: ls -la /tmp/xdebug.sock
  6. 检查MCP服务器日志: LOG_LEVEL=debug 用于详细输出

Docker连接问题

  1. 对于Linux,添加 extra_hosts: ["host.docker.internal:host-gateway"]
  2. 验证容器是否可以访问主机: curl host.docker.internal:9003
  3. 检查容器中的xdebug日志: docker logs | grep xdebug

Unix套接字问题

  1. “地址已在使用中”:套接字文件未清理

- 手动删除: rm -f /tmp/xdebug.sock - MCP服务器将在下次启动时自动清理

  1. “权限被拒绝”:检查套接字文件权限

- 列表套接字: ls -la /tmp/xdebug.sock - 以与PHP相同的用户身份运行: ps aux | grep php

  1. php.ini中的套接字路径:

- 对的: xdebug.client_host=unix:///tmp/xdebug.sock - 错误: xdebug.client_host=unix:/tmp/xdebug.sock (少了一个 /)

断点未命中

  1. 确保文件路径完全匹配(Docker使用容器路径)
  2. 检查断点是否已解决: list_breakpoints
  3. 验证脚本执行是否达到该行
  4. 检查一下 xdebug.start_with_request=yes 已设置
  5. 尝试一个简单的文件来验证基本设置是否有效

性能问题

  1. 如果步进缓慢,请增加 COMMAND_TIMEOUT:

- 默认值:30000毫秒(30秒) - 尝试: COMMAND_TIMEOUT=60000 对于较慢的系统

  1. 对于Unix套接字,验证套接字是否位于快速文件系统上(而不是网络挂载)
  2. 检查系统负载: top -过度的上下文切换会减慢调试速度

服务器无法启动

  1. 正在使用的端口(TCP):

- 查找过程: lsof -i :9003 - 杀死它: kill -9

  1. 配置错误:

- 验证环境变量: echo $XDEBUG_SOCKET_PATH - 检查路径名中的拼写错误

  1. 权限被拒绝:

- 对于Unix套接字,确保对父目录的写权限 - 例子: mkdir -p ~/.xdebug && chmod 700 ~/.xdebug

贡献

欢迎投稿!请随时提交拉取请求。

许可证

麻省理工学院

目录标签

目录标签

TypeScriptClaude开发工具PHP调试本地部署Xdebug代码调试AI辅助开发

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明none部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP