Skip to main content
Glama

Unity Editor MCP Server

using System; using System.Linq; using UnityEngine; using UnityEditor; using Newtonsoft.Json.Linq; using McpUnity.Unity; using McpUnity.Utils; namespace McpUnity.Tools { /// <summary> /// Tool for deleting a Unity scene and removing it from Build Settings /// </summary> public class DeleteSceneTool : McpToolBase { public DeleteSceneTool() { Name = "delete_scene"; Description = "Deletes a scene by path or name and removes it from Build Settings"; } /// <summary> /// Execute the DeleteScene tool with the provided parameters /// </summary> /// <param name="parameters">Tool parameters as a JObject</param> public override JObject Execute(JObject parameters) { string scenePath = parameters["scenePath"]?.ToObject<string>(); string sceneName = parameters["sceneName"]?.ToObject<string>(); string folderPath = parameters["folderPath"]?.ToObject<string>(); if (string.IsNullOrEmpty(scenePath)) { if (string.IsNullOrEmpty(sceneName)) { return McpUnitySocketHandler.CreateErrorResponse( "Provide either 'scenePath' or 'sceneName'", "validation_error" ); } // Resolve scene path by name (optionally within folderPath) string filter = $"{sceneName} t:Scene"; string[] searchInFolders = null; if (!string.IsNullOrEmpty(folderPath)) { // Ensure folder exists if (!AssetDatabase.IsValidFolder(folderPath)) { return McpUnitySocketHandler.CreateErrorResponse( $"Folder '{folderPath}' does not exist", "not_found_error" ); } searchInFolders = new[] { folderPath }; } var guids = AssetDatabase.FindAssets(filter, searchInFolders); foreach (var guid in guids) { var path = AssetDatabase.GUIDToAssetPath(guid); if (System.IO.Path.GetFileNameWithoutExtension(path) == sceneName) { scenePath = path; break; } } if (string.IsNullOrEmpty(scenePath)) { return McpUnitySocketHandler.CreateErrorResponse( $"Scene named '{sceneName}' not found", "not_found_error" ); } } try { // If the scene is open, close it without saving changes var scene = UnityEditor.SceneManagement.EditorSceneManager.GetSceneByPath(scenePath); if (scene.IsValid() && scene.isLoaded) { UnityEditor.SceneManagement.EditorSceneManager.CloseScene(scene, true); } // Remove from Build Settings RemoveSceneFromBuildSettings(scenePath); // Delete asset bool deleted = AssetDatabase.DeleteAsset(scenePath); AssetDatabase.Refresh(); if (!deleted) { return McpUnitySocketHandler.CreateErrorResponse( $"Failed to delete scene at '{scenePath}'", "delete_error" ); } McpLogger.LogInfo($"Deleted scene at path '{scenePath}' and removed from Build Settings"); return new JObject { ["success"] = true, ["type"] = "text", ["message"] = $"Successfully deleted scene at path '{scenePath}' and removed from Build Settings", ["scenePath"] = scenePath }; } catch (Exception ex) { return McpUnitySocketHandler.CreateErrorResponse( $"Error deleting scene: {ex.Message}", "scene_delete_error" ); } } private void RemoveSceneFromBuildSettings(string scenePath) { var scenes = UnityEditor.EditorBuildSettings.scenes; var filtered = scenes.Where(s => s.path != scenePath).ToArray(); if (filtered.Length != scenes.Length) { UnityEditor.EditorBuildSettings.scenes = filtered; } } } }

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/CoderGamester/mcp-unity'

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