diff --git a/src/CommunityToolkit.Aspire.Hosting.McpInspector/McpInspectorResource.cs b/src/CommunityToolkit.Aspire.Hosting.McpInspector/McpInspectorResource.cs index ad176961..10309a4d 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 7519868f..bc9f3599 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); + } }