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;
}
}