Skip to content

Commit eae1730

Browse files
Merge branch 'main' of https://github.com/Tyler-R-Kendrick/mcp-csharp-sdk into cancellation-enhancements
2 parents 90536c2 + f135355 commit eae1730

File tree

127 files changed

+3304
-1304
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

127 files changed

+3304
-1304
lines changed

Directory.Packages.props

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,63 @@
11
<Project>
22
<PropertyGroup>
33
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
4-
<SystemVersion>9.0.3</SystemVersion>
54
<System10Version>10.0.0-preview.2.25163.2</System10Version>
6-
<MicrosoftExtensionsVersion>9.0.3</MicrosoftExtensionsVersion>
75
<MicrosoftExtensionsAIVersion>9.3.0-preview.1.25161.3</MicrosoftExtensionsAIVersion>
86
</PropertyGroup>
7+
8+
<!-- Product dependencies netstandard -->
9+
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
10+
<PackageVersion Include="Microsoft.Bcl.Memory" Version="9.0.0" />
11+
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.0" />
12+
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
13+
<PackageVersion Include="System.IO.Pipelines" Version="8.0.0" />
14+
<PackageVersion Include="System.Text.Json" Version="8.0.5" />
15+
<PackageVersion Include="System.Threading.Channels" Version="8.0.0" />
16+
</ItemGroup>
17+
18+
<!-- Product dependencies LTS -->
19+
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
20+
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.0" />
21+
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.0" />
22+
<PackageVersion Include="System.IO.Pipelines" Version="8.0.0" />
23+
</ItemGroup>
24+
25+
<!-- Product dependencies .NET 9 -->
26+
<ItemGroup Condition="'$(TargetFramework)' == 'net9.0'">
27+
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.0" />
28+
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.0" />
29+
<PackageVersion Include="System.IO.Pipelines" Version="9.0.0" />
30+
</ItemGroup>
31+
32+
<!-- Product dependencies shared -->
933
<ItemGroup>
10-
<!-- Product dependencies -->
11-
<PackageVersion Include="coverlet.collector" Version="6.0.4">
12-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
13-
<PrivateAssets>all</PrivateAssets>
14-
</PackageVersion>
15-
<PackageVersion Include="Microsoft.Bcl.Memory" Version="$(SystemVersion)" />
16-
<PackageVersion Include="Microsoft.Extensions.AI" Version="$(MicrosoftExtensionsAIVersion)" />
1734
<PackageVersion Include="Microsoft.Extensions.AI.Abstractions" Version="$(MicrosoftExtensionsAIVersion)" />
18-
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(MicrosoftExtensionsVersion)" />
19-
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftExtensionsVersion)" />
35+
<PackageVersion Include="Microsoft.Extensions.AI" Version="$(MicrosoftExtensionsAIVersion)" />
2036
<PackageVersion Include="System.Net.ServerSentEvents" Version="$(System10Version)" />
21-
<PackageVersion Include="System.Text.Json" Version="$(SystemVersion)" />
22-
<PackageVersion Include="System.Threading.Channels" Version="$(SystemVersion)" />
37+
</ItemGroup>
38+
39+
<ItemGroup>
2340

2441
<!-- Build Infra & Packaging -->
2542
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
2643

2744
<!-- Testing dependencies -->
2845
<PackageVersion Include="Anthropic.SDK" Version="5.0.0" />
46+
<PackageVersion Include="coverlet.collector" Version="6.0.4">
47+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
48+
<PrivateAssets>all</PrivateAssets>
49+
</PackageVersion>
2950
<PackageVersion Include="GitHubActionsTestLogger" Version="2.4.1" />
3051
<PackageVersion Include="Microsoft.Extensions.AI.OpenAI" Version="$(MicrosoftExtensionsAIVersion)" />
31-
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="$(MicrosoftExtensionsVersion)" />
32-
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsVersion)" />
33-
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="$(MicrosoftExtensionsVersion)" />
52+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.3" />
53+
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.3" />
54+
<PackageVersion Include="Microsoft.Extensions.Logging" Version="9.0.3" />
55+
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.3" />
56+
<PackageVersion Include="Microsoft.Extensions.Options" Version="9.0.3" />
3457
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
3558
<PackageVersion Include="Moq" Version="4.20.72" />
59+
<PackageVersion Include="OpenTelemetry" Version="1.11.2" />
60+
<PackageVersion Include="OpenTelemetry.Exporter.InMemory" Version="1.11.2" />
3661
<PackageVersion Include="Serilog.Extensions.Hosting" Version="9.0.0" />
3762
<PackageVersion Include="Serilog.Extensions.Logging" Version="9.0.0" />
3863
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />

ModelContextProtocol.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickstartWeatherServer", "
5050
EndProject
5151
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "QuickstartClient", "samples\QuickstartClient\QuickstartClient.csproj", "{0D1552DC-E6ED-4AAC-5562-12F8352F46AA}"
5252
EndProject
53+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EverythingServer", "samples\EverythingServer\EverythingServer.csproj", "{17B8453F-AB72-99C5-E5EA-D0B065A6AE65}"
54+
EndProject
5355
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelContextProtocol.AspNetCore", "src\ModelContextProtocol.AspNetCore\ModelContextProtocol.AspNetCore.csproj", "{37B6A5E0-9995-497D-8B43-3BC6870CC716}"
5456
EndProject
5557
Global
@@ -94,6 +96,10 @@ Global
9496
{0D1552DC-E6ED-4AAC-5562-12F8352F46AA}.Debug|Any CPU.Build.0 = Debug|Any CPU
9597
{0D1552DC-E6ED-4AAC-5562-12F8352F46AA}.Release|Any CPU.ActiveCfg = Release|Any CPU
9698
{0D1552DC-E6ED-4AAC-5562-12F8352F46AA}.Release|Any CPU.Build.0 = Release|Any CPU
99+
{17B8453F-AB72-99C5-E5EA-D0B065A6AE65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
100+
{17B8453F-AB72-99C5-E5EA-D0B065A6AE65}.Debug|Any CPU.Build.0 = Debug|Any CPU
101+
{17B8453F-AB72-99C5-E5EA-D0B065A6AE65}.Release|Any CPU.ActiveCfg = Release|Any CPU
102+
{17B8453F-AB72-99C5-E5EA-D0B065A6AE65}.Release|Any CPU.Build.0 = Release|Any CPU
97103
{37B6A5E0-9995-497D-8B43-3BC6870CC716}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
98104
{37B6A5E0-9995-497D-8B43-3BC6870CC716}.Debug|Any CPU.Build.0 = Debug|Any CPU
99105
{37B6A5E0-9995-497D-8B43-3BC6870CC716}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -113,6 +119,7 @@ Global
113119
{0C6D0512-D26D-63D3-5019-C5F7A657B28C} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
114120
{4653EB0C-8FC0-98F4-E9C8-220EDA7A69DF} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
115121
{0D1552DC-E6ED-4AAC-5562-12F8352F46AA} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
122+
{17B8453F-AB72-99C5-E5EA-D0B065A6AE65} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8}
116123
{37B6A5E0-9995-497D-8B43-3BC6870CC716} = {A2F1F52A-9107-4BF8-8C3F-2F6670E7D0AD}
117124
EndGlobalSection
118125
GlobalSection(ExtensibilityGlobals) = postSolution

samples/AspNetCoreSseServer/AspNetCoreSseServer.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<TargetFramework>net9.0</TargetFramework>
55
<Nullable>enable</Nullable>
66
<ImplicitUsings>enable</ImplicitUsings>
7+
<PublishAot>true</PublishAot>
78
</PropertyGroup>
89

910
<ItemGroup>

samples/AspNetCoreSseServer/Program.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
using TestServerWithHosting.Tools;
2+
13
var builder = WebApplication.CreateBuilder(args);
2-
builder.Services.AddMcpServer().WithToolsFromAssembly();
4+
builder.Services.AddMcpServer()
5+
.WithTools<EchoTool>()
6+
.WithTools<SampleLlmTool>();
7+
38
var app = builder.Build();
49

510
app.MapMcp();

samples/AspNetCoreSseServer/Tools/EchoTool.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
namespace TestServerWithHosting.Tools;
55

66
[McpServerToolType]
7-
public static class EchoTool
7+
public sealed class EchoTool
88
{
99
[McpServerTool, Description("Echoes the input back to the client.")]
1010
public static string Echo(string message)

samples/AspNetCoreSseServer/Tools/SampleLlmTool.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace TestServerWithHosting.Tools;
88
/// This tool uses dependency injection and async method
99
/// </summary>
1010
[McpServerToolType]
11-
public static class SampleLlmTool
11+
public sealed class SampleLlmTool
1212
{
1313
[McpServerTool(Name = "sampleLLM"), Description("Samples from an LLM using MCP's sampling feature")]
1414
public static async Task<string> SampleLLM(

samples/ChatWithTools/ChatWithTools.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
<TargetFramework>net8.0</TargetFramework>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
8+
<!--
9+
Anthropic SDK isn't AOT compatible yet
10+
<PublishAot>true</PublishAot>
11+
-->
812
</PropertyGroup>
913

1014
<ItemGroup>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net9.0</TargetFramework>
5+
<Nullable>enable</Nullable>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<OutputType>Exe</OutputType>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="Microsoft.Extensions.Hosting" />
12+
</ItemGroup>
13+
14+
<ItemGroup>
15+
<ProjectReference Include="..\..\src\ModelContextProtocol\ModelContextProtocol.csproj" />
16+
</ItemGroup>
17+
18+
</Project>
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using Microsoft.Extensions.DependencyInjection;
2+
using Microsoft.Extensions.Hosting;
3+
using ModelContextProtocol;
4+
using ModelContextProtocol.Protocol.Types;
5+
using ModelContextProtocol.Server;
6+
7+
namespace EverythingServer;
8+
9+
public class LoggingUpdateMessageSender(IMcpServer server, Func<LoggingLevel> getMinLevel) : BackgroundService
10+
{
11+
readonly Dictionary<LoggingLevel, string> _loggingLevelMap = new()
12+
{
13+
{ LoggingLevel.Debug, "Debug-level message" },
14+
{ LoggingLevel.Info, "Info-level message" },
15+
{ LoggingLevel.Notice, "Notice-level message" },
16+
{ LoggingLevel.Warning, "Warning-level message" },
17+
{ LoggingLevel.Error, "Error-level message" },
18+
{ LoggingLevel.Critical, "Critical-level message" },
19+
{ LoggingLevel.Alert, "Alert-level message" },
20+
{ LoggingLevel.Emergency, "Emergency-level message" }
21+
};
22+
23+
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
24+
{
25+
while (!stoppingToken.IsCancellationRequested)
26+
{
27+
var newLevel = (LoggingLevel)Random.Shared.Next(_loggingLevelMap.Count);
28+
29+
var message = new
30+
{
31+
Level = newLevel.ToString().ToLower(),
32+
Data = _loggingLevelMap[newLevel],
33+
};
34+
35+
if (newLevel > getMinLevel())
36+
{
37+
await server.SendNotificationAsync("notifications/message", message, cancellationToken: stoppingToken);
38+
}
39+
40+
await Task.Delay(15000, stoppingToken);
41+
}
42+
}
43+
}

0 commit comments

Comments
 (0)