diff --git a/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj b/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj
index f1d5566b..3971040c 100644
--- a/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj
+++ b/04-PracticalSamples/src/src/McpSample.AppHost/McpSample.AppHost.csproj
@@ -13,7 +13,8 @@
-
+
+
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 699c448a..34de5b93 100644
--- a/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj
+++ b/04-PracticalSamples/src/src/McpSample.AspNetCoreSseServer/McpSample.AspNetCoreSseServer.csproj
@@ -8,7 +8,8 @@
-
+
+
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 2708c84d..b493e1a5 100644
--- a/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj
+++ b/04-PracticalSamples/src/src/McpSample.Chat/McpSample.BlazorChat.csproj
@@ -9,12 +9,13 @@
-
-
+
+
+
-
-
+
+
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;
});
diff --git a/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj b/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj
index 64eaec02..da455046 100644
--- a/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj
+++ b/04-PracticalSamples/src/src/McpSample.ServiceDefaults/McpSample.ServiceDefaults.csproj
@@ -7,12 +7,13 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
\ No newline at end of file