25 lines
1.2 KiB
C#
25 lines
1.2 KiB
C#
using ModelContextProtocol.Extensions.Apps;
|
|
using ModelContextProtocol.Server;
|
|
using System.ComponentModel;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
[McpServerResourceType]
|
|
public sealed class WeatherResources
|
|
{
|
|
private static readonly string UiDir = Path.Combine(AppContext.BaseDirectory, "ui");
|
|
|
|
[McpServerResource(UriTemplate = "ui://weather-app/forecast", Name = "weather-forecast-ui", MimeType = McpApps.HtmlMimeType)]
|
|
[McpMeta("ui", """{"csp":{"connectDomains":["https://api.weather.gov"]},"prefersBorder":true}""")]
|
|
[Description("Interactive weather forecast UI with city picker")]
|
|
public static string GetWeatherForecastUi() => File.ReadAllText(Path.Combine(UiDir, "weather-forecast.html"));
|
|
|
|
[McpServerResource(UriTemplate = "data://weather-app/us-cities", Name = "us-cities", MimeType = "application/json")]
|
|
[Description("List of supported US cities for weather forecasts")]
|
|
public static string GetUsCities()
|
|
{
|
|
var options = new JsonSerializerOptions { Converters = { new JsonStringEnumConverter<UsCity>() } };
|
|
var cities = Enum.GetValues<UsCity>().Select(c => JsonSerializer.Serialize(c, options).Trim('"')).Order().ToList();
|
|
return JsonSerializer.Serialize(cities);
|
|
}
|
|
}
|