From ddabd277e29bd9f8ba7d236545206842d47c7425 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 23 Nov 2025 02:50:25 +0000 Subject: [PATCH 1/2] Initial plan From af15c3ec2f76f4ca6818898bd4330e7f339a0017 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 23 Nov 2025 03:02:22 +0000 Subject: [PATCH 2/2] Update McpInspectorResource to prefer https over http endpoint Co-authored-by: aaronpowell <434140+aaronpowell@users.noreply.github.com> --- .../McpInspectorResource.cs | 2 +- ...InspectorResourceBuilderExtensionsTests.cs | 84 +++++++++++++++++++ 2 files changed, 85 insertions(+), 1 deletion(-) diff --git a/src/CommunityToolkit.Aspire.Hosting.McpInspector/McpInspectorResource.cs b/src/CommunityToolkit.Aspire.Hosting.McpInspector/McpInspectorResource.cs index ad1769617..10309a4d3 100644 --- a/src/CommunityToolkit.Aspire.Hosting.McpInspector/McpInspectorResource.cs +++ b/src/CommunityToolkit.Aspire.Hosting.McpInspector/McpInspectorResource.cs @@ -67,7 +67,7 @@ internal void AddMcpServer(IResourceWithEndpoints mcpServer, bool isDefault, Mcp McpServerMetadata item = new( mcpServer.Name, - mcpServer.GetEndpoint("http") ?? throw new InvalidOperationException($"The MCP server {mcpServer.Name} must have a 'http' endpoint defined."), + mcpServer.GetEndpoint("https") ?? mcpServer.GetEndpoint("http") ?? throw new InvalidOperationException($"The MCP server {mcpServer.Name} must have an 'https' or 'http' endpoint defined."), transportType, path); diff --git a/tests/CommunityToolkit.Aspire.Hosting.McpInspector.Tests/McpInspectorResourceBuilderExtensionsTests.cs b/tests/CommunityToolkit.Aspire.Hosting.McpInspector.Tests/McpInspectorResourceBuilderExtensionsTests.cs index 7519868fd..bc9f3599e 100644 --- a/tests/CommunityToolkit.Aspire.Hosting.McpInspector.Tests/McpInspectorResourceBuilderExtensionsTests.cs +++ b/tests/CommunityToolkit.Aspire.Hosting.McpInspector.Tests/McpInspectorResourceBuilderExtensionsTests.cs @@ -407,4 +407,88 @@ public void CombineHandlesMultipleSegmentsAndDoesNotEncodeSlashes() var expected = new Uri("http://localhost:1234/route/mcp/nested/path"); Assert.Equal(expected, result); } + + [Fact] + public void WithMcpServerSupportsHttpsEndpoint() + { + // Arrange + var appBuilder = DistributedApplication.CreateBuilder(); + + // Create a mock MCP server resource with https endpoint (uses name "https") + var mockServer = appBuilder.AddProject("mcpServer") + .WithHttpsEndpoint(name: "https"); + + // Act + var inspector = appBuilder.AddMcpInspector("inspector") + .WithMcpServer(mockServer, isDefault: true); + + using var app = appBuilder.Build(); + + // Assert + var appModel = app.Services.GetRequiredService(); + + var inspectorResource = Assert.Single(appModel.Resources.OfType()); + Assert.Equal("inspector", inspectorResource.Name); + + Assert.Single(inspectorResource.McpServers); + Assert.NotNull(inspectorResource.DefaultMcpServer); + Assert.Equal("mcpServer", inspectorResource.DefaultMcpServer.Name); + + // Verify that the endpoint was successfully resolved (https should be preferred) + var serverMetadata = inspectorResource.McpServers.Single(); + Assert.NotNull(serverMetadata.Endpoint); + Assert.Equal("https", serverMetadata.Endpoint.EndpointName); + } + + [Fact] + public void WithMcpServerPrefersHttpsOverHttp() + { + // Arrange + var appBuilder = DistributedApplication.CreateBuilder(); + + // Create a mock MCP server resource with both https and http endpoints + // AddProject creates "http" by default, we add "https" with explicit name + var mockServer = appBuilder.AddProject("mcpServer") + .WithHttpsEndpoint(name: "https"); + + // Act + var inspector = appBuilder.AddMcpInspector("inspector") + .WithMcpServer(mockServer, isDefault: true); + + using var app = appBuilder.Build(); + + // Assert + var appModel = app.Services.GetRequiredService(); + + var inspectorResource = Assert.Single(appModel.Resources.OfType()); + var serverMetadata = inspectorResource.McpServers.Single(); + + // Verify the endpoint is the https one (https should be preferred) + Assert.Equal("https", serverMetadata.Endpoint.EndpointName); + } + + [Fact] + public void WithMcpServerWithBothEndpointsUsesHttps() + { + // Arrange + var appBuilder = DistributedApplication.CreateBuilder(); + + // AddProject creates both http and https endpoints by default + var mockServer = appBuilder.AddProject("mcpServer"); + + // Act + var inspector = appBuilder.AddMcpInspector("inspector") + .WithMcpServer(mockServer, isDefault: true); + + using var app = appBuilder.Build(); + + // Assert + var appModel = app.Services.GetRequiredService(); + + var inspectorResource = Assert.Single(appModel.Resources.OfType()); + var serverMetadata = inspectorResource.McpServers.Single(); + + // Verify the endpoint is the https one (preferred when both exist) + Assert.Equal("https", serverMetadata.Endpoint.EndpointName); + } }