Skip to content

Commit fea6e10

Browse files
committed
Fix to persist request timeout seconds as an environment variable on Windows OS
1 parent 3a5d17a commit fea6e10

File tree

3 files changed

+24
-10
lines changed

3 files changed

+24
-10
lines changed

Editor/Services/TestRunnerService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public async void ExecuteTests(
7171
_testRunnerApi.Execute(new ExecutionSettings(filter));
7272

7373
// Use timeout from settings if not specified
74-
var timeoutSeconds = McpUnitySettings.Instance.TestTimeoutSeconds;
74+
var timeoutSeconds = McpUnitySettings.Instance.RequestTimeoutSeconds;
7575

7676
Task completedTask = await Task.WhenAny(
7777
completionSource.Task,

Editor/UnityBridge/McpUnityEditorWindow.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,16 +109,16 @@ private void DrawServerTab()
109109

110110
// Test timeout setting
111111
EditorGUILayout.BeginHorizontal();
112-
int newTimeout = EditorGUILayout.IntField(new GUIContent("Test Timeout (seconds)", "Timeout in seconds for test execution"), settings.TestTimeoutSeconds);
112+
int newTimeout = EditorGUILayout.IntField(new GUIContent("Request Timeout (seconds)", "Timeout in seconds for tool request"), settings.RequestTimeoutSeconds);
113113
if (newTimeout < 60)
114114
{
115115
newTimeout = 60;
116-
Debug.LogError("Test timeout must be at least 60 seconds.");
116+
Debug.LogError("Request timeout must be at least 60 seconds.");
117117
}
118118

119-
if (newTimeout != settings.TestTimeoutSeconds)
119+
if (newTimeout != settings.RequestTimeoutSeconds)
120120
{
121-
settings.TestTimeoutSeconds = newTimeout;
121+
settings.RequestTimeoutSeconds = newTimeout;
122122
settings.SaveSettings();
123123
}
124124
EditorGUILayout.EndHorizontal();

Editor/UnityBridge/McpUnitySettings.cs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ public class McpUnitySettings
1515
// Constants
1616
public const string ServerVersion = "1.0.0";
1717
public const string PackageName = "com.gamelovers.mcp-unity";
18+
19+
#if UNITY_EDITOR_WIN
20+
private const string EnvUnityPort = "UNITY_PORT";
21+
private const string EnvUnityRequestTimeout = "UNITY_REQUEST_TIMEOUT";
22+
#endif
1823

1924
private static McpUnitySettings _instance;
2025
private static readonly string SettingsPath = "ProjectSettings/McpUnitySettings.json";
@@ -25,14 +30,17 @@ public class McpUnitySettings
2530
#endif
2631
public int Port { get; set; } = 8090;
2732

33+
#if !UNITY_EDITOR_WIN
34+
[field: SerializeField] // Note: On Windows, this property is persisted in per-user environment variables.
35+
#endif
36+
[Tooltip("Timeout in seconds for tool request")]
37+
public int RequestTimeoutSeconds { get; set; } = 60;
38+
2839
[Tooltip("Whether to automatically start the MCP server when Unity opens")]
2940
public bool AutoStartServer = true;
3041

3142
[Tooltip("Whether to show info logs in the Unity console")]
3243
public bool EnableInfoLogs = true;
33-
34-
[Tooltip("Timeout in seconds for test execution")]
35-
public int TestTimeoutSeconds = 60;
3644

3745
/// <summary>
3846
/// Singleton instance of settings
@@ -74,11 +82,16 @@ public void LoadSettings()
7482

7583
#if UNITY_EDITOR_WIN
7684
// Check for environment variable PORT
77-
string envPort = System.Environment.GetEnvironmentVariable("UNITY_PORT");
85+
string envPort = System.Environment.GetEnvironmentVariable(EnvUnityPort);
7886
if (!string.IsNullOrEmpty(envPort) && int.TryParse(envPort, out int port))
7987
{
8088
Port = port;
8189
}
90+
string envTimeout = System.Environment.GetEnvironmentVariable(EnvUnityRequestTimeout);
91+
if (!string.IsNullOrEmpty(envTimeout) && int.TryParse(envTimeout, out int timeout))
92+
{
93+
RequestTimeoutSeconds = timeout;
94+
}
8295
#endif
8396
}
8497
catch (Exception ex)
@@ -104,7 +117,8 @@ public void SaveSettings()
104117
// Note: This will only affect processes started after this point
105118
// Note: EnvironmentVariableTarget.User should be used on .NET implementations running on Windows systems only.
106119
// see: https://learn.microsoft.com/ja-jp/dotnet/api/system.environmentvariabletarget?view=net-8.0#fields
107-
System.Environment.SetEnvironmentVariable("UNITY_PORT", Port.ToString(), System.EnvironmentVariableTarget.User);
120+
Environment.SetEnvironmentVariable(EnvUnityPort, Port.ToString(), EnvironmentVariableTarget.User);
121+
Environment.SetEnvironmentVariable(EnvUnityRequestTimeout, RequestTimeoutSeconds.ToString(), EnvironmentVariableTarget.User);
108122
#endif
109123
}
110124
catch (Exception ex)

0 commit comments

Comments
 (0)