diff --git a/MCPForUnity/Editor/Helpers/CodexConfigHelper.cs b/MCPForUnity/Editor/Helpers/CodexConfigHelper.cs
index b4f786e..786bc7f 100644
--- a/MCPForUnity/Editor/Helpers/CodexConfigHelper.cs
+++ b/MCPForUnity/Editor/Helpers/CodexConfigHelper.cs
@@ -29,6 +29,9 @@ namespace MCPForUnity.Editor.Helpers
// HTTP mode: Use url field
string httpUrl = HttpEndpointUtility.GetMcpRpcUrl();
unityMCP["url"] = new TomlString { Value = httpUrl };
+
+ // Enable Codex's Rust MCP client for HTTP/SSE transport
+ EnsureRmcpClientFeature(table);
}
else
{
@@ -71,6 +74,8 @@ namespace MCPForUnity.Editor.Helpers
// Parse existing TOML or create new root table
var root = TryParseToml(existingToml) ?? new TomlTable();
+ bool useHttpTransport = EditorPrefs.GetBool(MCPForUnity.Editor.Constants.EditorPrefKeys.UseHttpTransport, true);
+
// Ensure mcp_servers table exists
if (!root.TryGetNode("mcp_servers", out var mcpServersNode) || !(mcpServersNode is TomlTable))
{
@@ -81,6 +86,11 @@ namespace MCPForUnity.Editor.Helpers
// Create or update unityMCP table
mcpServers["unityMCP"] = CreateUnityMcpTable(uvPath);
+ if (useHttpTransport)
+ {
+ EnsureRmcpClientFeature(root);
+ }
+
// Serialize back to TOML
using var writer = new StringWriter();
root.WriteTo(writer);
@@ -200,6 +210,22 @@ namespace MCPForUnity.Editor.Helpers
return unityMCP;
}
+ ///
+ /// Ensures the features table contains the rmcp_client flag for HTTP/SSE transport.
+ ///
+ private static void EnsureRmcpClientFeature(TomlTable root)
+ {
+ if (root == null) return;
+
+ if (!root.TryGetNode("features", out var featuresNode) || featuresNode is not TomlTable features)
+ {
+ features = new TomlTable();
+ root["features"] = features;
+ }
+
+ features["rmcp_client"] = new TomlBoolean { Value = true };
+ }
+
private static bool TryGetTable(TomlTable parent, string key, out TomlTable table)
{
table = null;
diff --git a/TestProjects/UnityMCPTests/Assets/Tests/EditMode/Helpers/CodexConfigHelperTests.cs b/TestProjects/UnityMCPTests/Assets/Tests/EditMode/Helpers/CodexConfigHelperTests.cs
index 92f8586..a186e11 100644
--- a/TestProjects/UnityMCPTests/Assets/Tests/EditMode/Helpers/CodexConfigHelperTests.cs
+++ b/TestProjects/UnityMCPTests/Assets/Tests/EditMode/Helpers/CodexConfigHelperTests.cs
@@ -462,6 +462,14 @@ namespace MCPForUnityTests.Editor.Helpers
Assert.IsInstanceOf(unityMcpNode, "unityMCP should be a table");
var unityMcp = unityMcpNode as TomlTable;
+
+ // Verify features.rmcp_client is enabled for HTTP transport
+ Assert.IsTrue(parsed.TryGetNode("features", out var featuresNode), "HTTP mode should include features table");
+ Assert.IsInstanceOf(featuresNode, "features should be a table");
+ var features = featuresNode as TomlTable;
+ Assert.IsTrue(features.TryGetNode("rmcp_client", out var rmcpNode), "features should include rmcp_client flag");
+ Assert.IsInstanceOf(rmcpNode, "rmcp_client should be a boolean");
+ Assert.IsTrue((rmcpNode as TomlBoolean).Value, "rmcp_client should be true");
// Verify url field is present
Assert.IsTrue(unityMcp.TryGetNode("url", out var urlNode), "unityMCP should contain url in HTTP mode");
@@ -536,6 +544,14 @@ namespace MCPForUnityTests.Editor.Helpers
var unityMcp = unityMcpNode as TomlTable;
+ // Verify features.rmcp_client is enabled for HTTP transport
+ Assert.IsTrue(parsed.TryGetNode("features", out var featuresNode), "HTTP mode should include features table");
+ Assert.IsInstanceOf(featuresNode, "features should be a table");
+ var features = featuresNode as TomlTable;
+ Assert.IsTrue(features.TryGetNode("rmcp_client", out var rmcpNode), "features should include rmcp_client flag");
+ Assert.IsInstanceOf(rmcpNode, "rmcp_client should be a boolean");
+ Assert.IsTrue((rmcpNode as TomlBoolean).Value, "rmcp_client should be true");
+
// Verify url field is present
Assert.IsTrue(unityMcp.TryGetNode("url", out var urlNode), "unityMCP should contain url in HTTP mode");
Assert.IsInstanceOf(urlNode, "url should be a string");