mcpField
X
xdebug

xdebug

ローカル
github.com/kpanuragh開発ツール284 週間前に更新

xdebug について

xdebug-mcp は、Xdebug の DBGp プロトコルを通じて PHP アプリケーションのデバッグを AI アシスタントから操作できるようにする MCP サーバーです。TCP と Unix ドメインソケットの両方に対応し、Docker コンテナ内で動作する PHP にも利用できます。

主な機能

  1. 01行・条件・例外・関数呼び出しのブレークポイント
  2. 02ステップイン、ステップオーバー、ステップアウト、継続実行
  3. 03変数の参照・変更と PHP 式の評価
  4. 04スタックトレースと永続的な Watch 式
  5. 05複数デバッグセッションの同時利用
  6. 06TCP と Unix ドメインソケットの接続モード

活用シーン

  1. 01PHP アプリケーションの実行時エラーの原因調査をアシスタントに任せる
  2. 02パスマッピングを用いて Docker コンテナ内の PHP をデバッグする
  3. 03ログポイントで実行を止めずに変数の出力を記録する

MCP 対応

MCP クライアント(Claude など)に対して、セッション管理、ブレークポイント、実行制御、変数の検査、プロファイリング、コードカバレッジなど約 41 個のデバッグ用ツールを公開する MCP サーバーです。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"kpanuragh-xdebug": {
"command": "npx",
"args": [
"-y",
"xdebug-mcp"
]
}
}
}
起動コマンドnpx -y xdebug-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmxdebug-mcp1.2.1

ツール

46

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

Xdebug MCP サーバー

npm version License: MIT

Xdebug の DBGp プロトコルを通じて PHP のデバッグ機能を提供する MCP (Model Context Protocol) サーバーです。これにより、Claude などの AI アシスタントが PHP アプリケーションを直接デバッグできるようになります。

機能

コアデバッグ
  • 完全なデバッグ制御: ステップイン、ステップオーバー、ステップアウト、続行、停止
  • ブレークポイント: 行ブレークポイント、条件付きブレークポイント、例外ブレークポイント、関数呼び出しブレークポイント
  • 変数の検査: すべての変数の表示、特定の変数の取得、変数値の設定
  • 式の評価: 現在のコンテキストで PHP 式を評価
  • スタックトレース: 完全なコールスタックの表示
  • 複数セッション: 複数の PHP スクリプトを同時にデバッグ
  • Docker サポート: Docker コンテナ内で動作する PHP でも利用可能
高度な機能
  • ウォッチ式: 各ブレーク時に自動評価され、変更を検出する永続的なウォッチ
  • ログポイント: {$var} プレースホルダーを使用して、実行を停止せずにメッセージをログ出力
  • メモリプロファイリング: ブレークポイント間のメモリ使用量と実行時間を追跡
  • コードカバレッジ: デバッグ中に実行された行を追跡
  • リクエストコンテキスト: $_GET、$_POST、$_SESSION、$_COOKIE、ヘッダーを自動的にキャプチャ
  • ステップフィルター: ステップ実行中に vendor/ライブラリのコードをスキップ
  • デバッグプロファイル: ブレークポイント設定の保存と復元
  • セッションのエクスポート: デバッグセッションを 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 サーバーの設定

Claude Code の場合

xdebug-mcp サーバーを MCP 設定 (.mcp.json または Claude の設定) に追加します:

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 から始めてください。

プロキシモードには以下が必要です:

  • xdebug-mcp の TCP リスナーモード (XDEBUG_SOCKET_PATH ではない)
  • XDEBUG_PORT 用の 9006、9007、9008 などの一意のコールバックポート
  • DBGP_PROXY_HOST、DBGP_PROXY_PORT、DBGP_IDEKEY

完全なセットアップ、マルチエージェントの例、PHP/Xdebug プロキシの設定については、DBGp プロキシ登録ガイドを参照してください。

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 ドメインソケットの使用

ローカルシステムでのパフォーマンス向上とセットアップの簡素化のために、TCP の代わりに Unix ドメインソケットを使用できます。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 が設定されている場合、サーバーは次のように動作します:

  • TCP ポートの代わりに指定された Unix ソケットでリッスンします
  • 起動時に古いソケットファイルを自動的にクリーンアップします (「address in use」エラーを防ぎます)
  • シャットダウン時にソケットファイルを自動的にクリーンアップします
  • TCP モードと同じデバッグツールと機能を使用します

Unix ソケットを使用すべき場合:

  • ✅ ローカルの PHP 開発 (最高のパフォーマンス)
  • ✅ 同一マシン上でのデバッグ
  • ✅ 高頻度のブレークポイントヒット
  • ❌ リモートデバッグ (代わりに TCP を使用してください)

Unix ソケットのサポートは @dkd-kaehm による Issue #1 でリクエストされました

利用可能な 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変数の値を設定します
evaluatePHP 式を評価します
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_contextHTTP リクエストコンテキストをキャプチャします
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_PORT9003Xdebug 接続を待ち受けるポート(TCP モード)
XDEBUG_HOST0.0.0.0バインドするホスト(TCP モード)
XDEBUG_SOCKET_PATH-Unix ドメインソケットのパス(例: /tmp/xdebug.sock)。設定すると、TCP ではなく Unix ソケットを使用します
COMMAND_TIMEOUT30000コマンドのタイムアウト(ミリ秒)
PATH_MAPPINGS-コンテナからホストへのパスをマッピングする JSON オブジェクト
MAX_DEPTH3変数検査の最大深度
MAX_CHILDREN128配列/オブジェクトに対して返す子要素の最大数
MAX_DATA2048変数ごとの最大データサイズ
LOG_LEVELinfoログレベル: debug、info、warn、error

接続モード: TCP と Unix ソケット

機能TCPUnix ソケット
セットアップ簡単(デフォルト)シンプル(環境変数を1つ設定するだけ)
パフォーマンス良好優秀(低レイテンシ)
セキュリティネットワークからポートにアクセス可能ファイルベースのパーミッション
リモートデバッグ✅ 対応❌ ローカルのみ
Docker✅ 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 <container-id> | grep xdebug
Unix ソケットの問題
  1. 「Address already in use」: ソケットファイルがクリーンアップされていません
    • 手動で削除: rm -f /tmp/xdebug.sock
    • MCP サーバーは次回の起動時に自動的にクリーンアップします
  2. 「Permission denied」: ソケットファイルのパーミッションを確認してください
    • ソケットを一覧表示: ls -la /tmp/xdebug.sock
    • PHP と同じユーザーで実行: ps aux | grep php
  3. php.ini のソケットパス:
    • 正しい: xdebug.client_host=unix:///tmp/xdebug.sock
    • 誤り: xdebug.client_host=unix:/tmp/xdebug.sock (/ が 1 つ足りません)
ブレークポイントに到達しない
  1. ファイルパスが完全に一致していることを確認してください (Docker の場合はコンテナのパスを使用)
  2. ブレークポイントが解決されているか確認: list_breakpoints
  3. スクリプトの実行がその行に到達しているか検証してください
  4. xdebug.start_with_request=yes が設定されているか確認してください
  5. 基本的な設定が機能するか、簡単なファイルで試してください
パフォーマンスの問題
  1. ステップ実行が遅い場合は、COMMAND_TIMEOUT を増やしてください:
    • デフォルト: 30000ms (30 秒)
    • 低速なシステムでは試してください: COMMAND_TIMEOUT=60000
  2. Unix ソケットの場合、ソケットが高速なファイルシステム上にあることを確認してください (ネットワークマウントではないこと)
  3. システム負荷を確認: top - 過剰なコンテキストスイッチングはデバッグを遅くします
サーバーが起動しない
  1. ポートが使用中 (TCP):
    • プロセスを検索: lsof -i :9003
    • 強制終了: kill -9 <pid>
  2. 設定が不正:
    • 環境変数を検証: echo $XDEBUG_SOCKET_PATH
    • パス名のタイプミスを確認してください
  3. Permission denied:
    • Unix ソケットの場合、親ディレクトリへの書き込み権限を確認してください
    • 例: mkdir -p ~/.xdebug && chmod 700 ~/.xdebug

コントリビューション

コントリビューションを歓迎します! お気軽に Pull Request を送ってください。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。