using ModelContextProtocol.Configuration; using ModelContextProtocol.Protocol.Types; using ModelContextProtocol.Server; using ModelContextProtocol.Utils; using Microsoft.Extensions.DependencyInjection; namespace ModelContextProtocol; /// /// Extension to configure the MCP server with handlers /// public static partial class McpServerBuilderExtensions { /// /// Sets the handler for list resource templates requests. /// /// The builder instance. /// The handler. public static IMcpServerBuilder WithListResourceTemplatesHandler(this IMcpServerBuilder builder, Func, CancellationToken, Task> handler) { Throw.IfNull(builder); builder.Services.Configure(s => s.ListResourceTemplatesHandler = handler); return builder; } /// /// Sets the handler for list tools requests. /// /// The builder instance. /// The handler. public static IMcpServerBuilder WithListToolsHandler(this IMcpServerBuilder builder, Func, CancellationToken, Task> handler) { Throw.IfNull(builder); builder.Services.Configure(s => s.ListToolsHandler = handler); return builder; } /// /// Sets the handler for call tool requests. /// /// The builder instance. /// The handler. public static IMcpServerBuilder WithCallToolHandler(this IMcpServerBuilder builder, Func, CancellationToken, Task> handler) { Throw.IfNull(builder); builder.Services.Configure(s => s.CallToolHandler = handler); return builder; } /// /// Sets the handler for list prompts requests. /// /// The builder instance. /// The handler. public static IMcpServerBuilder WithListPromptsHandler(this IMcpServerBuilder builder, Func, CancellationToken, Task> handler) { Throw.IfNull(builder); builder.Services.Configure(s => s.ListPromptsHandler = handler); return builder; } /// /// Sets the handler for get prompt requests. /// /// The builder instance. /// The handler. public static IMcpServerBuilder WithGetPromptHandler(this IMcpServerBuilder builder, Func, CancellationToken, Task> handler) { Throw.IfNull(builder); builder.Services.Configure(s => s.GetPromptHandler = handler); return builder; } /// /// Sets the handler for list resources requests. /// /// The builder instance. /// The handler. public static IMcpServerBuilder WithListResourcesHandler(this IMcpServerBuilder builder, Func, CancellationToken, Task> handler) { Throw.IfNull(builder); builder.Services.Configure(s => s.ListResourcesHandler = handler); return builder; } /// /// Sets the handler for read resources requests. /// /// The builder instance. /// The handler. public static IMcpServerBuilder WithReadResourceHandler(this IMcpServerBuilder builder, Func, CancellationToken, Task> handler) { Throw.IfNull(builder); builder.Services.Configure(s => s.ReadResourceHandler = handler); return builder; } /// /// Sets the handler for get completion requests. /// /// The builder instance. /// The handler. public static IMcpServerBuilder WithGetCompletionHandler(this IMcpServerBuilder builder, Func, CancellationToken, Task> handler) { Throw.IfNull(builder); builder.Services.Configure(s => s.GetCompletionHandler = handler); return builder; } /// /// Sets the handler for subscribe to resources messages. /// /// The builder instance. /// The handler. public static IMcpServerBuilder WithSubscribeToResourcesHandler(this IMcpServerBuilder builder, Func, CancellationToken, Task> handler) { Throw.IfNull(builder); builder.Services.Configure(s => s.SubscribeToResourcesHandler = handler); return builder; } /// /// Sets or sets the handler for subscribe to resources messages. /// /// The builder instance. /// The handler. public static IMcpServerBuilder WithUnsubscribeFromResourcesHandler(this IMcpServerBuilder builder, Func, CancellationToken, Task> handler) { Throw.IfNull(builder); builder.Services.Configure(s => s.UnsubscribeFromResourcesHandler = handler); return builder; } }