From ca9f028bfd8369e0ee23418574a33a8536d42d5d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Jul 2025 04:53:14 +0000 Subject: [PATCH 1/3] Bump Aspire.Hosting.AppHost and 11 others Bumps Aspire.Hosting.AppHost from 9.1.0 to 9.3.1 Bumps Azure.AI.OpenAI from 2.2.0-beta.4 to 2.2.0-beta.5 Bumps Azure.Identity from 1.14.0-beta.2 to 1.14.2 Bumps Microsoft.Extensions.Http.Resilience from 9.3.0 to 9.7.0 Bumps Microsoft.Extensions.ServiceDiscovery from 9.1.0 to 9.3.1 Bumps ModelContextProtocol to 0.1.0-preview.14 Bumps OpenAI from 2.2.0-beta.4 to 2.2.0 Bumps OpenTelemetry.Exporter.OpenTelemetryProtocol from 1.11.2 to 1.12.0 Bumps OpenTelemetry.Extensions.Hosting from 1.11.2 to 1.12.0 Bumps OpenTelemetry.Instrumentation.AspNetCore from 1.11.1 to 1.12.0 Bumps OpenTelemetry.Instrumentation.Http from 1.11.1 to 1.12.0 Bumps OpenTelemetry.Instrumentation.Runtime from 1.11.1 to 1.12.0 --- updated-dependencies: - dependency-name: Aspire.Hosting.AppHost dependency-version: 9.3.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Azure.AI.OpenAI dependency-version: 2.2.0-beta.5 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: OpenAI dependency-version: 2.2.0 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Azure.Identity dependency-version: 1.14.2 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: Microsoft.Extensions.Http.Resilience dependency-version: 9.7.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: Microsoft.Extensions.ServiceDiscovery dependency-version: 9.3.1 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: ModelContextProtocol dependency-version: 0.1.0-preview.14 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: ModelContextProtocol dependency-version: 0.1.0-preview.14 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: OpenTelemetry.Exporter.OpenTelemetryProtocol dependency-version: 1.12.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: OpenTelemetry.Extensions.Hosting dependency-version: 1.12.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: OpenTelemetry.Instrumentation.AspNetCore dependency-version: 1.12.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: OpenTelemetry.Instrumentation.Http dependency-version: 1.12.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: OpenTelemetry.Instrumentation.Runtime dependency-version: 1.12.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../src/McpSample.AppHost/McpSample.AppHost.csproj | 2 +- .../McpSample.AspNetCoreSseServer.csproj | 2 +- .../src/McpSample.Chat/McpSample.BlazorChat.csproj | 8 ++++---- .../McpSample.ServiceDefaults.csproj | 14 +++++++------- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj b/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj index f1d5566b..44e07eba 100644 --- a/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj +++ b/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj @@ -13,7 +13,7 @@ - + diff --git a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj b/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj index 699c448a..7205d8c7 100644 --- a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj +++ b/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj @@ -8,7 +8,7 @@ - + diff --git a/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj b/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj index 2708c84d..15180734 100644 --- a/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj +++ b/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj @@ -9,12 +9,12 @@ - - + + - - + + diff --git a/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj b/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj index 64eaec02..c56024c6 100644 --- a/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj +++ b/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj @@ -7,12 +7,12 @@ - - - - - - - + + + + + + + \ No newline at end of file From 2e9cf56c6adc83930b13bd3ada8ff4cc4b22ba88 Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Mon, 28 Jul 2025 09:09:24 -0700 Subject: [PATCH 2/3] Add / update package refs for modelcontextprotocol --- .../src/src/McpSample.AppHost/McpSample.AppHost.csproj | 1 + .../McpSample.AspNetCoreSseServer.csproj | 2 +- .../src/src/McpSample.Chat/McpSample.BlazorChat.csproj | 2 +- .../McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj b/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj index 44e07eba..3971040c 100644 --- a/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj +++ b/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj @@ -14,6 +14,7 @@ + diff --git a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj b/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj index 7205d8c7..081866a8 100644 --- a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj +++ b/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj @@ -8,7 +8,7 @@ - + diff --git a/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj b/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj index 15180734..30e55add 100644 --- a/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj +++ b/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj @@ -13,7 +13,7 @@ - + diff --git a/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj b/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj index c56024c6..da455046 100644 --- a/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj +++ b/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj @@ -14,5 +14,6 @@ + \ No newline at end of file From 154bcdf643c391526ec25f7ca5fef3f1dcd82d50 Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Mon, 28 Jul 2025 17:15:03 +0000 Subject: [PATCH 3/3] Refactor MCP SSE server integration and update package references --- .../McpEndpointRouteBuilderExtensions.cs | 60 ------------------- .../McpSample.AspNetCoreSseServer.csproj | 1 + .../McpSample.AspNetCoreSseServer/Program.cs | 1 - .../McpSample.Chat/Components/_Imports.razor | 1 + .../McpSample.BlazorChat.csproj | 1 + .../src/src/McpSample.Chat/Program.cs | 29 ++++----- 6 files changed, 13 insertions(+), 80 deletions(-) delete mode 100644 04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpEndpointRouteBuilderExtensions.cs diff --git a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpEndpointRouteBuilderExtensions.cs b/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpEndpointRouteBuilderExtensions.cs deleted file mode 100644 index 1f3689ed..00000000 --- a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpEndpointRouteBuilderExtensions.cs +++ /dev/null @@ -1,60 +0,0 @@ -using ModelContextProtocol.Protocol.Messages; -using ModelContextProtocol.Server; -using ModelContextProtocol.Utils.Json; -using Microsoft.Extensions.Options; -using ModelContextProtocol.Protocol.Transport; - -public static class McpEndpointRouteBuilderExtensions -{ - public static IEndpointConventionBuilder MapMcpSse(this IEndpointRouteBuilder endpoints) - { - SseResponseStreamTransport? transport = null; - var loggerFactory = endpoints.ServiceProvider.GetRequiredService(); - var mcpServerOptions = endpoints.ServiceProvider.GetRequiredService>(); - - var routeGroup = endpoints.MapGroup(""); - - routeGroup.MapGet("/sse", async (HttpResponse response, CancellationToken requestAborted) => - { - response.Headers.ContentType = "text/event-stream"; - response.Headers.CacheControl = "no-cache"; - - await using var localTransport = transport = new SseResponseStreamTransport(response.Body); - await using var server = McpServerFactory.Create(transport, mcpServerOptions.Value, loggerFactory, endpoints.ServiceProvider); - - try - { - var transportTask = transport.RunAsync(cancellationToken: requestAborted); - await server.StartAsync(cancellationToken: requestAborted); - await transportTask; - } - catch (OperationCanceledException) when (requestAborted.IsCancellationRequested) - { - // RequestAborted always triggers when the client disconnects before a complete response body is written, - // but this is how SSE connections are typically closed. - } - }); - - routeGroup.MapPost("/message", async context => - { - if (transport is null) - { - await Results.BadRequest("Connect to the /sse endpoint before sending messages.").ExecuteAsync(context); - return; - } - - var message = await context.Request.ReadFromJsonAsync(McpJsonUtilities.DefaultOptions, context.RequestAborted); - if (message is null) - { - await Results.BadRequest("No message in request body.").ExecuteAsync(context); - return; - } - - await transport.OnMessageReceivedAsync(message, context.RequestAborted); - context.Response.StatusCode = StatusCodes.Status202Accepted; - await context.Response.WriteAsync("Accepted"); - }); - - return routeGroup; - } -} diff --git a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj b/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj index 081866a8..34de5b93 100644 --- a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj +++ b/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj @@ -9,6 +9,7 @@ + diff --git a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/Program.cs b/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/Program.cs index 8b9ec1a9..9aa699c7 100644 --- a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/Program.cs +++ b/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/Program.cs @@ -17,6 +17,5 @@ // map endpoints app.MapGet("/", () => $"Hello World! {DateTime.Now}"); -app.MapMcpSse(); app.Run(); diff --git a/04-PracticalSamples/src/src/McpSample.Chat/Components/_Imports.razor b/04-PracticalSamples/src/src/McpSample.Chat/Components/_Imports.razor index 172c3e56..15733a37 100644 --- a/04-PracticalSamples/src/src/McpSample.Chat/Components/_Imports.razor +++ b/04-PracticalSamples/src/src/McpSample.Chat/Components/_Imports.razor @@ -8,3 +8,4 @@ @using Microsoft.JSInterop @using McpSample.BlazorChat @using McpSample.BlazorChat.Components +@using Microsoft.Extensions.AI diff --git a/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj b/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj index 30e55add..b493e1a5 100644 --- a/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj +++ b/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj @@ -11,6 +11,7 @@ + diff --git a/04-PracticalSamples/src/src/McpSample.Chat/Program.cs b/04-PracticalSamples/src/src/McpSample.Chat/Program.cs index 2be9701e..3de00290 100644 --- a/04-PracticalSamples/src/src/McpSample.Chat/Program.cs +++ b/04-PracticalSamples/src/src/McpSample.Chat/Program.cs @@ -1,8 +1,7 @@ +using McpSample.BlazorChat; using McpSample.BlazorChat.Components; using Microsoft.Extensions.AI; using ModelContextProtocol.Client; -using ModelContextProtocol.Configuration; -using ModelContextProtocol.Protocol.Transport; var builder = WebApplication.CreateBuilder(args); @@ -28,23 +27,15 @@ // add MCP client builder.Services.AddSingleton(sp => { - McpClientOptions mcpClientOptions = new() - { ClientInfo = new() { Name = "AspNetCoreSseClient", Version = "1.0.0" } }; - - HttpClient httpClient = new() - { - BaseAddress = new("https://localhost:7133/sse") //"https +http://aspnetsseserver" + "/sse") - }; - - McpServerConfig mcpServerConfig = new() - { - Id = "AspNetCoreSse", - Name = "AspNetCoreSse", - TransportType = TransportTypes.Sse, - Location = httpClient.BaseAddress.ToString(), - }; - - var mcpClient = McpClientFactory.CreateAsync(mcpServerConfig, mcpClientOptions).GetAwaiter().GetResult(); + var clientTransport = new SseClientTransport( + new() + { + Name = "AspNetCoreSse Server", + Endpoint = new Uri("https://localhost:7133"), // Remove /sse endpoint since it's deprecated + TransportMode = HttpTransportMode.StreamableHttp // Use new Streamable HTTP transport + }); + + var mcpClient = McpClientFactory.CreateAsync(clientTransport).GetAwaiter().GetResult(); return mcpClient; });