Skip to main content
Glama
CompileWaitHelper.cs4.27 kB
using System; using UnityEngine; #if UNITY_EDITOR using UnityEditor; #endif namespace LocalMcp.UnityServer { #if UNITY_EDITOR /// <summary> /// Provides compile status checking and wait functionality /// </summary> public static class CompileWaitHelper { /// <summary> /// Checks if Unity is currently compiling scripts /// </summary> public static string GetCompileStatus(object id) { try { var result = new CompileStatusResult { isCompiling = EditorApplication.isCompiling, isUpdating = EditorApplication.isUpdating, canProceed = !EditorApplication.isCompiling && !EditorApplication.isUpdating }; var response = JsonRpcResponse.Success(result, id); return response.ToJson(); } catch (Exception e) { Debug.LogError($"[MCP] GetCompileStatus error: {e.Message}\n{e.StackTrace}"); return JsonRpcResponseHelper.ErrorMessage($"Failed to get compile status: {e.Message}", id); } } /// <summary> /// Waits for compilation to complete (non-blocking check) /// Use this to check if it's safe to proceed with operations that require compiled scripts /// </summary> public static string WaitForCompile(string paramsJson, object id) { try { var parameters = JsonUtility.FromJson<WaitForCompileParams>(paramsJson); double timeout = parameters.timeout > 0 ? parameters.timeout : 30.0; if (EditorApplication.isCompiling) { return JsonRpcResponseHelper.ErrorMessage( $"Unity is currently compiling scripts. Please retry after compilation completes. " + $"Use unity.compile.status to check compilation status.", id ); } if (EditorApplication.isUpdating) { return JsonRpcResponseHelper.ErrorMessage( "Unity is currently updating assets. Please retry after update completes.", id ); } var result = new WaitForCompileResult { success = true, canProceed = true, message = "Compilation is complete. Safe to proceed." }; var response = JsonRpcResponse.Success(result, id); return response.ToJson(); } catch (Exception e) { Debug.LogError($"[MCP] WaitForCompile error: {e.Message}\n{e.StackTrace}"); return JsonRpcResponseHelper.ErrorMessage($"Failed to wait for compile: {e.Message}", id); } } /// <summary> /// Helper method to create compile-in-progress error message /// </summary> public static string CreateCompileInProgressError(object id) { return JsonRpcResponseHelper.ErrorMessage( "Unity is currently compiling scripts. Please use 'unity.compile.status' to check " + "compilation status, then retry after compilation completes.", id ); } /// <summary> /// Helper method to check if operations can proceed /// </summary> public static bool CanProceed() { return !EditorApplication.isCompiling && !EditorApplication.isUpdating; } } #region Data Structures [Serializable] public class CompileStatusResult { public bool isCompiling; public bool isUpdating; public bool canProceed; } [Serializable] public class WaitForCompileParams { public double timeout; // Timeout in seconds (default: 30) } [Serializable] public class WaitForCompileResult { public bool success; public bool canProceed; public string message; } #endregion #endif }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dsgarage/UniMCP4CC'

If you have feedback or need assistance with the MCP directory API, please join our Discord server