はじめに
AIエージェント(Claude、Cursor、Codex CLIなど)にコードを書かせる場面が増えてきました。しかし、デバッグはまだ人間が手動で行うことがほとんどです。
「ブレークポイントを貼って、変数を確認して、ステップ実行して……」という作業をAIにもやらせたい。そう思って VS Code Debug Bridge を作りました。
この拡張機能は、VS Codeのデバッガを MCP (Model Context Protocol) サーバーとして公開し、AIエージェントがHTTP経由でデバッグセッションを制御できるようにするものです。
何ができるのか
一言でいうと、AIエージェントがVS Codeのデバッガをプログラム的に操作できるようになります。
具体的には:
- デバッグセッションの開始・停止
- ブレークポイントの設定
- ステップ実行(ステップオーバー、ステップイン、ステップアウト)
- コールスタックの取得
- 変数の参照
- 式の評価(evaluate)
これらすべてが、AIエージェントからのMCPツール呼び出しで実行できます。
アーキテクチャ
AIエージェント (Claude, Cursor, Codex CLI など)
│
│ HTTP (Streamable HTTP MCP)
▼
VS Code Debug Bridge (この拡張機能)
│
│ VS Code Debug API → DAP (Debug Adapter Protocol)
▼
デバッグアダプタ (Python / Node.js / Go / Rust / ...)
│
▼
デバッグ対象プロセス
ポイントは以下の3つです。
- MCPプロトコルを使っているので、MCP対応のAIツールならどれでも接続できる
- DAPを中継しているので、VS Codeで使えるデバッガなら何でも対応(Python, JavaScript, Go, Rust, C++, ...)
- VS Code拡張機能として動くので、別プロセスのCLIツールを起動する必要がない
セットアップ
1. 拡張機能のインストール
マケプレに公開するのは面倒なのでやっていません。クローンしてvsixをビルドしてください。
2. AIツール側のMCP設定
プロジェクトの .mcp.json に以下を追加します。
{
"mcpServers": {
"vscode-debug": {
"type": "http",
"url": "http://127.0.0.1:6589/mcp"
}
}
}
VS Codeを開くと拡張機能が自動で起動し、MCPサーバーが http://127.0.0.1:6589/mcp で待ち受けます。
提供するMCPツール
拡張機能は3つのMCPツールを公開します。
| ツール | 説明 |
|---|---|
start_debug |
デバッグセッションを開始する。launch.json の設定名、またはインラインの設定オブジェクトを指定 |
execute_command |
アクティブなデバッグセッションにDAPリクエストを送信する |
stop_debug |
デバッグセッションを停止する |
execute_command が中核で、DAP (Debug Adapter Protocol) のあらゆるコマンドをそのまま実行し、生のJSONレスポンスを返します。近頃のエージェントならDAPコマンドを余裕で扱える、という前提で、コマンドを中継するだけのシンプルな思想にしています。
よく使うDAPコマンド
| コマンド | 説明 | 引数 |
|---|---|---|
threads |
スレッド一覧を取得 | - |
stackTrace |
コールスタックを取得 | threadId |
scopes |
スコープ一覧(Local, Globalなど)を取得 | frameId |
variables |
変数の値を取得 | variablesReference |
evaluate |
式を評価 |
expression, frameId
|
next |
ステップオーバー | threadId |
stepIn |
ステップイン | threadId |
stepOut |
ステップアウト | threadId |
continue |
実行を再開 | threadId |
pause |
実行を一時停止 | threadId |
setBreakpoints |
ブレークポイントを設定 |
source, breakpoints
|
実際の使い方:AIエージェントによるデバッグフロー
以下は、AIエージェントがPythonファイルをデバッグする典型的な流れです。
ステップ1:デバッグセッションを開始
start_debug({ configName: "Python: main.py" })
// → "Debug session started."
launch.json に定義済みの設定名を指定するか、インライン設定を渡します。
// インライン設定の例
start_debug({
config: {
type: "debugpy",
request: "launch",
program: "${workspaceFolder}/main.py",
stopOnEntry: true
}
})
ステップ2:スレッドとスタックを確認
execute_command({ command: "threads" })
// → { threads: [{ id: 1, name: "MainThread" }] }
execute_command({ command: "stackTrace", args: { threadId: 1 } })
// → { stackFrames: [{ id: 0, name: "main", source: {...}, line: 42, ... }] }
ステップ3:変数を調べる
execute_command({ command: "scopes", args: { frameId: 0 } })
// → { scopes: [{ name: "Locals", variablesReference: 1, ... }] }
execute_command({ command: "variables", args: { variablesReference: 1 } })
// → { variables: [{ name: "fib", value: "[0, 1, 1, 2, 3, ...]", ... }] }
ステップ4:式を評価する
execute_command({
command: "evaluate",
args: { expression: "len(fib)", frameId: 0 }
})
// → { result: "10", type: "int" }
ステップ5:ステップ実行
execute_command({ command: "next", args: { threadId: 1 } }) // ステップオーバー
execute_command({ command: "stepIn", args: { threadId: 1 } }) // ステップイン
execute_command({ command: "continue", args: { threadId: 1 } }) // 続行
ステップ6:デバッグ終了
stop_debug()
// → "Debug session stopped."
ユースケース
1. AIエージェントによる自律的バグ修正
AIがテスト失敗を検知 → ブレークポイントを設定 → 変数の状態を確認 → 原因を特定 → 修正コードを生成、という流れを自動化できます。
2. 対話的デバッグアシスタント
「この変数の中身を見て」「次の行まで進めて」といった自然言語の指示で、AIがデバッガを操作してくれます。
3. デバッグログの自動収集
特定の条件でブレークポイントを設定し、変数の値を網羅的に収集して、問題の再現条件を自動で絞り込むといった使い方も考えられます。
おわりに
VS Code Debug Bridgeは、AIエージェントとデバッガの間のギャップを埋める拡張機能です。
AIにコードを書かせるだけでなく、デバッグまで任せられるようになれば、開発の自動化がもう一段階進むと考えています。