[English](TOOL_REFERENCE.md)

# uLoopMCP ツールリファレンス

このドキュメントでは、全uLoopMCPツールの詳細仕様を提供します。

## 共通レスポンス形式

すべてのUnity MCPツールは以下の共通要素を持ちます：

### 共通レスポンスプロパティ
すべてのツールには以下のプロパティが自動的に含まれます：
- `Ver` (string): CLIとの互換性チェック用のuLoopMCPサーバーバージョン

---

## Unity コアツール

### 1. compile
- **説明**: AssetDatabase.Refresh()を実行後、コンパイルを行います。詳細なタイミング情報付きでコンパイル結果を返します。
- **パラメータ**:
  - `ForceRecompile` (boolean): 強制再コンパイルを実行するかどうか（デフォルト: false）
  - `WaitForDomainReload` (boolean): Domain Reload完了まで待機するかどうか（デフォルト: false）
- **レスポンス**:
  - `Success` (boolean | null): コンパイルが成功したかどうか。ForceRecompile=true時はDomain Reload完了まで結果が取得できないためnull
  - `ErrorCount` (number | null): エラーの総数。ForceRecompile=true時はnull
  - `WarningCount` (number | null): 警告の総数。ForceRecompile=true時はnull
  - `Errors` (array | null): コンパイルエラーの配列。ForceRecompile=true時はnull
    - `Message` (string): エラーメッセージ
    - `File` (string): エラーが発生したファイルパス
    - `Line` (number): エラーが発生した行番号
  - `Warnings` (array | null): コンパイル警告の配列。ForceRecompile=true時はnull
    - `Message` (string): 警告メッセージ
    - `File` (string): 警告が発生したファイルパス
    - `Line` (number): 警告が発生した行番号
  - `Message` (string): 追加情報のためのオプションメッセージ
  - `ProjectRoot` (string): Unityプロジェクトのルートパス。WaitForDomainReload=true時のみセットされる

### 2. get-logs
- **説明**: フィルタリングおよび高度な検索機能付きでUnityコンソールからログ情報を取得します
- **パラメータ**:
  - `LogType` (enum): フィルタするログタイプ - "Error", "Warning", "Log", "All"（デフォルト: "All"）
  - `MaxCount` (number): 取得するログの最大数（デフォルト: 100）
  - `SearchText` (string): ログメッセージ内で検索するテキスト（空の場合はすべて取得）（デフォルト: ""）
  - `UseRegex` (boolean): 検索に正規表現を使用するかどうか（デフォルト: false）
  - `SearchInStackTrace` (boolean): スタックトレース内も検索対象に含めるかどうか（デフォルト: false）
  - `IncludeStackTrace` (boolean): スタックトレースを表示するかどうか（デフォルト: false）
- **レスポンス**:
  - `TotalCount` (number): 利用可能なログの総数
  - `DisplayedCount` (number): このレスポンスで表示されるログの数
  - `LogType` (string): 使用されたログタイプフィルタ
  - `MaxCount` (number): 使用された最大数制限
  - `SearchText` (string): 使用された検索テキストフィルタ
  - `IncludeStackTrace` (boolean): スタックトレースが含まれているかどうか
  - `Logs` (array): ログエントリの配列
    - `Type` (string): ログタイプ（Error, Warning, Log）
    - `Message` (string): ログメッセージ
    - `StackTrace` (string): スタックトレース（IncludeStackTraceがtrueの場合）

### 3. run-tests
- **説明**: Unity Test Runnerを実行し、包括的なレポート付きでテスト結果を取得します
- **パラメータ**:
  - `FilterType` (enum): テストフィルタのタイプ - "all"(0), "exact"(1), "regex"(2), "assembly"(3)（デフォルト: "all"）
  - `FilterValue` (string): フィルタ値（FilterTypeがall以外の場合に指定）（デフォルト: ""）
    - `exact`: 個別テストメソッド名（完全一致）（例：io.github.hatayama.uLoopMCP.ConsoleLogRetrieverTests.GetAllLogs_WithMaskAllOff_StillReturnsAllLogs）
    - `regex`: クラス名または名前空間（正規表現パターン）（例：io.github.hatayama.uLoopMCP.ConsoleLogRetrieverTests, io.github.hatayama.uLoopMCP）
    - `assembly`: アセンブリ名（例：uLoopMCP.Tests.Editor）
  - `TestMode` (enum): テストモード - "EditMode"(0), "PlayMode"(1)（デフォルト: "EditMode"）
    - **PlayMode注意**: PlayModeテスト実行時は、一時的にdomain reloadが無効化されます
  - `SaveBeforeRun` (boolean): 未保存のロード済みScene変更と現在のPrefab Stage変更を保存してからテストを実行（デフォルト: false）
- **レスポンス**:
  - `Success` (boolean): テスト実行が成功したかどうか
  - `Message` (string): テスト実行メッセージ
  - `CompletedAt` (string): テスト実行完了タイムスタンプ（ISO形式）
  - `TestCount` (number): 実行されたテストの総数
  - `PassedCount` (number): 合格したテストの数
  - `FailedCount` (number): 失敗したテストの数
  - `SkippedCount` (number): スキップされたテストの数
  - `XmlPath` (string): NUnit XML結果ファイルのパス（テスト失敗時に自動保存）。XMLファイルは `{project_root}/.uloop/outputs/TestResults/` フォルダに保存されます

### 4. clear-console
- **説明**: クリーンな開発ワークフローのためにUnityコンソールログをクリアします
- **パラメータ**:
  - `AddConfirmationMessage` (boolean): クリア後に確認ログメッセージを追加するかどうか（デフォルト: false）
- **レスポンス**:
  - `Success` (boolean): コンソールクリア操作が成功したかどうか
  - `ClearedLogCount` (number): コンソールからクリアされたログの数
  - `ClearedCounts` (object): タイプ別のクリアされたログの内訳
    - `ErrorCount` (number): クリアされたエラーログの数
    - `WarningCount` (number): クリアされた警告ログの数
    - `LogCount` (number): クリアされた情報ログの数
  - `Message` (string): クリア操作結果を説明するメッセージ
  - `ErrorMessage` (string): 操作が失敗した場合のエラーメッセージ

### 5. find-game-objects
- **説明**: 高度な検索条件（コンポーネントタイプ、タグ、レイヤーなど）で複数のGameObjectを検索します
- **パラメータ**:
  - `NamePattern` (string): 検索するGameObject名のパターン（デフォルト: ""）
  - `SearchMode` (enum): 検索モード - "Exact", "Path", "Regex", "Contains", "Selected"（デフォルト: "Exact"）
  - `RequiredComponents` (array): GameObjectが持つ必要のあるコンポーネントタイプ名の配列（デフォルト: []）
  - `Tag` (string): タグフィルター（デフォルト: ""）
  - `Layer` (number): レイヤーフィルター（デフォルト: null）
  - `IncludeInactive` (boolean): 非アクティブなGameObjectを含めるかどうか（デフォルト: false）
  - `MaxResults` (number): 返す結果の最大数（デフォルト: 20）
  - `IncludeInheritedProperties` (boolean): 継承プロパティを含めるかどうか（デフォルト: false）
- **レスポンス**:
  - `results` (array): 見つかったGameObjectの配列
    - `name` (string): GameObject名
    - `path` (string): 完全な階層パス
    - `isActive` (boolean): GameObjectがアクティブかどうか
    - `tag` (string): GameObjectタグ
    - `layer` (number): GameObjectレイヤー
    - `components` (array): GameObject上のコンポーネントの配列
      - `type` (string): コンポーネントタイプ名
      - `fullTypeName` (string): 完全なアセンブリ修飾タイプ名
      - `properties` (array): コンポーネントプロパティ（IncludeInheritedPropertiesがtrueの場合）
  - `totalFound` (number): 見つかったGameObjectの総数
  - `errorMessage` (string): 検索が失敗した場合のエラーメッセージ
  - `resultsFilePath` (string): 結果がファイルにエクスポートされた場合のファイルパス
  - `message` (string): 操作メッセージ
  - `processingErrors` (array): シリアライズに失敗したオブジェクトの配列
    - `gameObjectName` (string): 失敗したGameObjectの名前
    - `gameObjectPath` (string): 失敗したGameObjectのパス
    - `error` (string): エラーの説明

---

## Unity 検索・発見ツール

### 6. get-hierarchy
- **説明**: Unity階層構造をネストされたJSON形式で取得します
- **パラメータ**:
  - `IncludeInactive` (boolean): 階層結果に非アクティブなGameObjectを含めるかどうか（デフォルト: true）
  - `MaxDepth` (number): 階層を探索する最大深度（無制限深度の場合は-1）（デフォルト: -1）
  - `RootPath` (string): 階層探索を開始するルートGameObjectパス（すべてのルートオブジェクトの場合は空/null）（デフォルト: null）
  - `IncludeComponents` (boolean): 階層内の各GameObjectのコンポーネント情報を含めるかどうか（デフォルト: true）
  - `IncludePaths` (boolean): ノードのパス情報を含めるかどうか（デフォルト: false）
  - `UseComponentsLut` (string): コンポーネント用LUTの使用 - "auto", "true", "false"（デフォルト: "auto"）
  - `UseSelection` (boolean): 現在選択中のGameObjectをルートとして使用するかどうか。trueの場合、RootPathは無視されます（デフォルト: false）
- **レスポンス**:
  - `message` (string): クライアントがJSONファイルを参照するための案内メッセージ
  - `hierarchyFilePath` (string): 階層データが保存されたファイルパス（例: "{project_root}/.uloop/outputs/HierarchyResults/hierarchy_2025-07-10_21-30-15.json"）。エクスポートされたJSONファイルには `hierarchy`（GameObjectのネスト配列）と `context`（シーン情報、ノード数、最大深度）が含まれる

### 7. execute-dynamic-code
- **説明**: Unity Editor内で動的C#コードを実行します。セキュリティレベルに応じてAPI利用を制限し、using文の自動処理やエラーメッセージの改善機能を提供します
- **パラメータ**:
  - `Code` (string): 実行するC#コード（デフォルト: ""）
  - `Parameters` (Dictionary<string, object>): 実行時パラメータ（デフォルト: {}）
  - `CompileOnly` (boolean): コンパイルのみ実行（実行はしない）（デフォルト: false）
- **レスポンス**:
  - `Success` (boolean): 実行が成功したかどうか
  - `Result` (string): 実行結果
  - `Logs` (array): ログメッセージの配列
  - `CompilationErrors` (array): コンパイルエラーの配列（存在する場合）
    - `Message` (string): エラーメッセージ
    - `Line` (number): エラーが発生した行番号
    - `Column` (number): エラーが発生した列番号
    - `ErrorCode` (string): コンパイラーエラーコード（CS0103など）
    - `Hint` (string): エラー解決のためのオプションヒント
    - `Suggestions` (array of string): 修正候補（例: usingの追加や完全修飾名の使用）
    - `Context` (string): エラー周辺のコード行とキャレットポインタ
    - `PointerColumn` (number): キャレット描画用のポインタカラム（1-based）
  - `ErrorMessage` (string): エラーメッセージ（失敗時）
  - `SecurityLevel` (string): 現在のセキュリティレベル（"Disabled", "Restricted", "FullAccess"）
  - `UpdatedCode` (string): 更新されたコード（修正適用後）
  - `DiagnosticsSummary` (string): 診断情報のサマリー（ユニークエラー数、総数、最初のエラー概要）
  - `Diagnostics` (array): リッチクライアント向けの構造化された診断情報（CompilationErrorsと同じ構造）

### 8. focus-window
- **説明**: macOSおよびWindowsでUnity Editorウィンドウを前面に表示します
- **パラメータ**: なし
- **レスポンス**:
  - `Success` (boolean): 操作が成功したかどうか
  - `Message` (string): 操作結果メッセージ
  - `ErrorMessage` (string): 操作が失敗した場合のエラーメッセージ

### 9. screenshot
- **説明**: Unity EditorWindowのスクリーンショットを撮影してPNG画像として保存します。名前による柔軟なマッチングモードで任意のEditorWindowをキャプチャ可能です
- **パラメータ**:
  - `WindowName` (string): キャプチャするウィンドウ名（例: "Game", "Scene", "Console", "Inspector", "Project", "Hierarchy"）（デフォルト: "Game"）
  - `ResolutionScale` (number): キャプチャ画像の解像度スケール、0.1〜1.0（デフォルト: 1）
  - `MatchMode` (enum): ウィンドウ名のマッチングモード（すべて大文字小文字を区別しない） - "exact", "prefix", "contains"（デフォルト: "exact"）
    - `exact`: ウィンドウ名が完全に一致する必要があります
    - `prefix`: ウィンドウ名が入力で始まる必要があります
    - `contains`: ウィンドウ名に入力が含まれている必要があります
  - `OutputDirectory` (string): スクリーンショット保存先のディレクトリパス。空の場合はデフォルトパス（.uloop/outputs/Screenshots/）を使用。絶対パスも指定可能（デフォルト: ""）
- **レスポンス**:
  - `ScreenshotCount` (number): キャプチャされたウィンドウの数
  - `Screenshots` (array): スクリーンショット情報の配列
    - `ImagePath` (string): 保存されたPNGファイルの絶対パス
    - `FileSizeBytes` (number): 保存されたファイルのサイズ（バイト）
    - `Width` (number): キャプチャ画像の幅（ピクセル）
    - `Height` (number): キャプチャ画像の高さ（ピクセル）

### 10. control-play-mode
- **説明**: Unity Editorのプレイモードを制御します（再生/停止/一時停止）
- **パラメータ**:
  - `Action` (enum): 実行するアクション - "Play", "Stop", "Pause"（デフォルト: "Play"）
    - `Play`: プレイモードを開始（一時停止からの再開も含む）
    - `Stop`: プレイモードを終了し、エディットモードに戻る
    - `Pause`: プレイモードのまま一時停止する
- **レスポンス**:
  - `IsPlaying` (boolean): Unityが現在プレイモードかどうか
  - `IsPaused` (boolean): プレイモードが一時停止中かどうか
  - `Message` (string): 実行されたアクションの説明

### 11. simulate-mouse-ui
- **説明**: PlayMode中のUI要素に対してマウスクリック・長押し・ドラッグをシミュレーション。EventSystemとExecuteEventsを使ってポインタイベントを直接ディスパッチするため、旧・新Input Systemの両方に依存せず動作。Input Systemを読むゲームロジック（`Mouse.current.leftButton.wasPressedThisFrame`等）には `simulate-mouse-input` を使用
- **パラメータ**:
  - `Action` (enum): マウスアクション - "Click", "Drag", "DragStart", "DragMove", "DragEnd", "LongPress"（デフォルト: "Click"）
    - `Click`: (X, Y)でクリック。PointerDown → PointerUp → PointerClick を発火
    - `LongPress`: (X, Y)でDuration秒間押し続けてからリリース。PointerClickは発火しない
    - `Drag`: (FromX, FromY)から(X, Y)へのワンショットドラッグ
    - `DragStart`: (X, Y)でドラッグを開始しホールド
    - `DragMove`: 現在位置から(X, Y)へ指定速度でアニメーション移動
    - `DragEnd`: (X, Y)へ移動後、ドラッグをリリース
  - `X` (number): ターゲットX座標（スクリーンピクセル、原点: 左上）（デフォルト: 0）
  - `Y` (number): ターゲットY座標（スクリーンピクセル、原点: 左上）（デフォルト: 0）
  - `FromX` (number): Dragアクションの開始X座標（デフォルト: 0）
  - `FromY` (number): Dragアクションの開始Y座標（デフォルト: 0）
  - `DragSpeed` (number): ドラッグ速度（ピクセル/秒）、0で即時移動（デフォルト: 2000）
  - `Duration` (number): LongPressアクションのホールド秒数（デフォルト: 0.5）
  - `Button` (enum): マウスボタン - "Left", "Right", "Middle"（デフォルト: "Left"）
- **レスポンス**:
  - `Success` (boolean): アクションが正常に完了したかどうか
  - `Message` (string): 実行されたアクションの説明
  - `Action` (string): 実行されたアクション
  - `HitGameObjectName` (string): ヒットしたUI要素の名前（ヒットなしの場合null）
  - `PositionX` (number): 使用されたX座標
  - `PositionY` (number): 使用されたY座標
  - `EndPositionX` (number): 終了X座標（Dragアクション用）
  - `EndPositionY` (number): 終了Y座標（Dragアクション用）

### 12. simulate-mouse-input
- **説明**: Input System経由でPlayMode中のマウス入力をシミュレーション。ボタンクリック、マウスデルタ、スクロールホイールを `Mouse.current` に直接注入。`wasPressedThisFrame`や`Mouse.current.delta`等を読むゲームロジック向け。Input Systemパッケージ導入時のみ利用可能で、Player SettingsのActive Input Handlingを `Input System Package (New)` または `Both` に設定する必要がある。IPointerClickHandler等のUI要素には `simulate-mouse-ui` を使用
- **パラメータ**:
  - `Action` (enum): マウス入力アクション - "Click", "LongPress", "MoveDelta", "SmoothDelta", "Scroll"（デフォルト: "Click"）
    - `Click`: ボタンのpress+releaseを注入し、`wasPressedThisFrame`がtrueを返すようにする
    - `LongPress`: Duration秒間ボタンをホールド
    - `MoveDelta`: マウスデルタを注入（ワンショット、FPSカメラ操作等）
    - `SmoothDelta`: Duration秒かけて滑らかにマウスデルタを注入（人間的なカメラ旋回）
    - `Scroll`: スクロールホイールを注入（ホットバー切替、ズーム等）
  - `X` (number): ターゲットX座標（スクリーンピクセル、原点: 左上）。ClickとLongPressで使用（デフォルト: 0）
  - `Y` (number): ターゲットY座標（スクリーンピクセル、原点: 左上）。ClickとLongPressで使用（デフォルト: 0）
  - `Button` (enum): マウスボタン - "Left", "Right", "Middle"（デフォルト: "Left"）。ClickとLongPressで使用
  - `Duration` (number): LongPressのホールド秒数、またはClickの最小ホールド時間。0=ワンショットタップ（デフォルト: 0）
  - `DeltaX` (number): MoveDeltaアクションのデルタX（ピクセル）。正=右（デフォルト: 0）
  - `DeltaY` (number): MoveDeltaアクションのデルタY（ピクセル）。正=上（デフォルト: 0）
  - `ScrollX` (number): Scrollアクションの水平スクロールデルタ（デフォルト: 0）
  - `ScrollY` (number): Scrollアクションの垂直スクロールデルタ。正=上、通常1ノッチ=120（デフォルト: 0）
- **レスポンス**:
  - `Success` (boolean): アクションが正常に完了したかどうか
  - `Message` (string): 実行されたアクションの説明
  - `Action` (string): 実行されたアクション
  - `Button` (string): 使用されたボタン（Click/LongPress用）
  - `PositionX` (number, nullable): 使用されたX座標（位置を使わないアクションではnull）
  - `PositionY` (number, nullable): 使用されたY座標（位置を使わないアクションではnull）

### 13. simulate-keyboard
- **説明**: Input System経由でPlayMode中のキーボード入力をシミュレーション。単発のキータップ、長押し、複数キーの同時押しに対応。Input Systemパッケージ導入時のみ利用可能で、Player SettingsのActive Input Handlingを `Input System Package (New)` または `Both` に設定する必要がある。ゲームコードがInput System API（例: `Keyboard.current[Key.W].isPressed`）で入力を読み取っている必要があり、レガシーの `Input.GetKey()` には非対応
- **パラメータ**:
  - `Action` (enum): キーボードアクション - "Press", "KeyDown", "KeyUp"（デフォルト: "Press"）
    - `Press`: ワンショットキータップ（KeyDown→KeyUp）。`Duration`で長押し時間を指定可能
    - `KeyDown`: KeyUpで明示的に解放するまでキーを押し続ける
    - `KeyUp`: KeyDownで押下中のキーを解放
  - `Key` (string): Input SystemのKey enumに対応するキー名（例: "W", "Space", "LeftShift", "Enter"）。大文字小文字を区別しない
  - `Duration` (number): Pressアクションのホールド秒数、0でワンショットタップ（デフォルト: 0）。KeyDown/KeyUpでは無視される
- **レスポンス**:
  - `Success` (boolean): アクションが正常に完了したかどうか
  - `Message` (string): 実行されたアクションの説明
  - `Action` (string): 実行されたアクション
  - `KeyName` (string, nullable): 操作対象のキー名

---

## 関連ドキュメント

- [メインREADME](README_ja.md) - プロジェクト概要とセットアップ
- [アーキテクチャドキュメント](ARCHITECTURE_ja.md) - 技術アーキテクチャの詳細
- [変更履歴](CHANGELOG.md) - バージョン履歴と更新
