Enable the `rmcp_client` feature so it works with Codex CLI (#395)
parent
dbe5f33cb0
commit
be6c387327
|
|
@ -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;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ensures the features table contains the rmcp_client flag for HTTP/SSE transport.
|
||||
/// </summary>
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -463,6 +463,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<TomlTable>(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<TomlBoolean>(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<TomlString>(urlNode, "url should be a string");
|
||||
|
|
@ -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<TomlTable>(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<TomlBoolean>(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<TomlString>(urlNode, "url should be a string");
|
||||
|
|
|
|||
Loading…
Reference in New Issue