diff --git a/MCPForUnity/Editor/Resources/Editor/GetPrefabStage.cs b/MCPForUnity/Editor/Resources/Editor/GetPrefabStage.cs new file mode 100644 index 000000000..28bd0a06e --- /dev/null +++ b/MCPForUnity/Editor/Resources/Editor/GetPrefabStage.cs @@ -0,0 +1,43 @@ +using System; +using MCPForUnity.Editor.Helpers; +using Newtonsoft.Json.Linq; +using UnityEditor.SceneManagement; + +namespace MCPForUnity.Editor.Resources.Editor +{ + /// + /// Returns information about the currently open Prefab Stage (Isolation or + /// In-Context mode), or { isOpen = false } when no prefab is being edited. + /// + /// Wires up the existing mcpforunity://editor/prefab-stage resource + /// (Server/src/services/resources/prefab_stage.py) which dispatches the + /// get_prefab_stage command name expected by this handler. + /// + [McpForUnityResource("get_prefab_stage")] + public static class GetPrefabStage + { + public static object HandleCommand(JObject @params) + { + try + { + var stage = PrefabStageUtility.GetCurrentPrefabStage(); + if (stage == null) + return new SuccessResponse("No prefab stage open.", new { isOpen = false }); + + var root = stage.prefabContentsRoot; + return new SuccessResponse("Retrieved prefab stage info.", new + { + isOpen = true, + assetPath = stage.assetPath, + prefabRootName = root != null ? root.name : null, + mode = stage.mode.ToString(), + isDirty = stage.scene.isDirty, + }); + } + catch (Exception e) + { + return new ErrorResponse($"Error getting prefab stage: {e.Message}"); + } + } + } +} diff --git a/MCPForUnity/Editor/Resources/Editor/GetPrefabStage.cs.meta b/MCPForUnity/Editor/Resources/Editor/GetPrefabStage.cs.meta new file mode 100644 index 000000000..ce4d2335f --- /dev/null +++ b/MCPForUnity/Editor/Resources/Editor/GetPrefabStage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2bbcba512cf6473184c038e6e3926136 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: