Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions samples/AspNetCoreSseServer/AspNetCoreSseServer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<PublishAot>true</PublishAot>
</PropertyGroup>

<ItemGroup>
Expand Down
7 changes: 6 additions & 1 deletion samples/AspNetCoreSseServer/Program.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
using TestServerWithHosting.Tools;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddMcpServer().WithToolsFromAssembly();
builder.Services.AddMcpServer()
.WithTools<EchoTool>()
.WithTools<SampleLlmTool>();

var app = builder.Build();

app.MapMcp();
Expand Down
2 changes: 1 addition & 1 deletion samples/AspNetCoreSseServer/Tools/EchoTool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
namespace TestServerWithHosting.Tools;

[McpServerToolType]
public static class EchoTool
public sealed class EchoTool
{
[McpServerTool, Description("Echoes the input back to the client.")]
public static string Echo(string message)
Expand Down
2 changes: 1 addition & 1 deletion samples/AspNetCoreSseServer/Tools/SampleLlmTool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace TestServerWithHosting.Tools;
/// This tool uses dependency injection and async method
/// </summary>
[McpServerToolType]
public static class SampleLlmTool
public sealed class SampleLlmTool
{
[McpServerTool(Name = "sampleLLM"), Description("Samples from an LLM using MCP's sampling feature")]
public static async Task<string> SampleLLM(
Expand Down
4 changes: 4 additions & 0 deletions samples/ChatWithTools/ChatWithTools.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<!--
Anthropic SDK isn't AOT compatible yet
<PublishAot>true</PublishAot>
-->
</PropertyGroup>

<ItemGroup>
Expand Down
4 changes: 4 additions & 0 deletions samples/QuickstartClient/QuickstartClient.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<UserSecretsId>a4e20a70-5009-4b81-b5b6-780b6d43e78e</UserSecretsId>
<!--
Anthropic SDK isn't AOT compatible yet
<PublishAot>true</PublishAot>
-->
</PropertyGroup>

<ItemGroup>
Expand Down
3 changes: 2 additions & 1 deletion samples/QuickstartWeatherServer/Program.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using QuickstartWeatherServer.Tools;
using System.Net.Http.Headers;

var builder = Host.CreateApplicationBuilder(args);

builder.Services.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
.WithTools<WeatherTools>();

builder.Logging.AddConsole(options =>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PublishAot>true</PublishAot>
</PropertyGroup>

<ItemGroup>
Expand Down
13 changes: 13 additions & 0 deletions samples/QuickstartWeatherServer/Tools/HttpClientExt.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System.Text.Json;

namespace ModelContextProtocol;

internal static class HttpClientExt
{
public static async Task<JsonDocument> ReadJsonDocumentAsync(this HttpClient client, string requestUri)
{
using var response = await client.GetAsync(requestUri);
response.EnsureSuccessStatusCode();
return await JsonDocument.ParseAsync(await response.Content.ReadAsStreamAsync());
}
}
9 changes: 6 additions & 3 deletions samples/QuickstartWeatherServer/Tools/WeatherTools.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using ModelContextProtocol;
using ModelContextProtocol.Server;
using System.ComponentModel;
using System.Net.Http.Json;
Expand All @@ -6,14 +7,15 @@
namespace QuickstartWeatherServer.Tools;

[McpServerToolType]
public static class WeatherTools
public sealed class WeatherTools
{
[McpServerTool, Description("Get weather alerts for a US state.")]
public static async Task<string> GetAlerts(
HttpClient client,
[Description("The US state to get alerts for.")] string state)
{
var jsonElement = await client.GetFromJsonAsync<JsonElement>($"/alerts/active/area/{state}");
using var jsonDocument = await client.ReadJsonDocumentAsync($"/alerts/active/area/{state}");
var jsonElement = jsonDocument.RootElement;
var alerts = jsonElement.GetProperty("features").EnumerateArray();

if (!alerts.Any())
Expand All @@ -40,7 +42,8 @@ public static async Task<string> GetForecast(
[Description("Latitude of the location.")] double latitude,
[Description("Longitude of the location.")] double longitude)
{
var jsonElement = await client.GetFromJsonAsync<JsonElement>($"/points/{latitude},{longitude}");
using var jsonDocument = await client.ReadJsonDocumentAsync($"/points/{latitude},{longitude}");
var jsonElement = jsonDocument.RootElement;
var periods = jsonElement.GetProperty("properties").GetProperty("periods").EnumerateArray();

return string.Join("\n---\n", periods.Select(period => $"""
Expand Down
4 changes: 3 additions & 1 deletion samples/TestServerWithHosting/Program.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Serilog;
using TestServerWithHosting.Tools;

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose() // Capture all log levels
Expand All @@ -19,7 +20,8 @@
builder.Services.AddSerilog();
builder.Services.AddMcpServer()
.WithStdioServerTransport()
.WithToolsFromAssembly();
.WithTools<EchoTool>()
.WithTools<SampleLlmTool>();

var app = builder.Build();

Expand Down
7 changes: 7 additions & 0 deletions samples/TestServerWithHosting/TestServerWithHosting.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
<TargetFramework>net9.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<!--
Serilog AOT support regressed
<PublishAot>true</PublishAot>
-->
</PropertyGroup>

<ItemGroup>
Expand All @@ -13,6 +17,9 @@
<PackageReference Include="Serilog.Sinks.Console" />
<PackageReference Include="Serilog.Sinks.Debug" />
<PackageReference Include="Serilog.Sinks.File" />
<RuntimeHostConfigurationOption
Include="Serilog.IsCompilerGeneratedCodeSupported"
Value="false" Trim="true" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion samples/TestServerWithHosting/Tools/EchoTool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
namespace TestServerWithHosting.Tools;

[McpServerToolType]
public static class EchoTool
public sealed class EchoTool
{
[McpServerTool, Description("Echoes the input back to the client.")]
public static string Echo(string message)
Expand Down
2 changes: 1 addition & 1 deletion samples/TestServerWithHosting/Tools/SampleLlmTool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace TestServerWithHosting.Tools;
/// This tool uses depenency injection and async method
/// </summary>
[McpServerToolType]
public static class SampleLlmTool
public sealed class SampleLlmTool
{
[McpServerTool(Name = "sampleLLM"), Description("Samples from an LLM using MCP's sampling feature")]
public static async Task<string> SampleLLM(
Expand Down