using ModelContextProtocol;
using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
namespace Microsoft.Extensions.DependencyInjection;
///
/// Provides extension methods for configuring request-specific MCP server filters.
///
public static class McpRequestFilterBuilderExtensions
{
///
/// Adds a filter to the list resource templates handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddListResourceTemplatesFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.ListResourceTemplatesFilters.Add(filter));
return builder;
}
///
/// Adds a filter to the list tools handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddListToolsFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.ListToolsFilters.Add(filter));
return builder;
}
///
/// Adds a filter to the call tool handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddCallToolFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.CallToolFilters.Add(filter));
return builder;
}
///
/// Adds a filter to the list prompts handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddListPromptsFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.ListPromptsFilters.Add(filter));
return builder;
}
///
/// Adds a filter to the get prompt handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddGetPromptFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.GetPromptFilters.Add(filter));
return builder;
}
///
/// Adds a filter to the list resources handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddListResourcesFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.ListResourcesFilters.Add(filter));
return builder;
}
///
/// Adds a filter to the read resource handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddReadResourceFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.ReadResourceFilters.Add(filter));
return builder;
}
///
/// Adds a filter to the complete handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddCompleteFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.CompleteFilters.Add(filter));
return builder;
}
///
/// Adds a filter to the subscribe-to-resources handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddSubscribeToResourcesFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.SubscribeToResourcesFilters.Add(filter));
return builder;
}
///
/// Adds a filter to the unsubscribe-from-resources handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddUnsubscribeFromResourcesFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.UnsubscribeFromResourcesFilters.Add(filter));
return builder;
}
///
/// Adds a filter to the set logging level handler pipeline.
///
/// The request filter builder instance.
/// The filter function that wraps the handler.
/// The builder provided in .
public static IMcpRequestFilterBuilder AddSetLoggingLevelFilter(this IMcpRequestFilterBuilder builder, McpRequestFilter filter)
{
Throw.IfNull(builder);
Throw.IfNull(filter);
builder.Services.Configure(options => options.Filters.Request.SetLoggingLevelFilters.Add(filter));
return builder;
}
}