@@ -8,7 +8,7 @@ namespace ModelContextProtocol.Server;
88public sealed class McpRequestFilters
99{
1010 /// <summary>
11- /// Gets the filters for the list-tools handler pipeline.
11+ /// Gets or sets the filters for the list-tools handler pipeline.
1212 /// </summary>
1313 /// <remarks>
1414 /// <para>
@@ -22,20 +22,36 @@ public sealed class McpRequestFilters
2222 /// Tools from both sources will be combined when returning results to clients.
2323 /// </para>
2424 /// </remarks>
25- public IList < McpRequestFilter < ListToolsRequestParams , ListToolsResult > > ListToolsFilters { get ; } = [ ] ;
25+ public IList < McpRequestFilter < ListToolsRequestParams , ListToolsResult > > ListToolsFilters
26+ {
27+ get => field ??= [ ] ;
28+ set
29+ {
30+ Throw . IfNull ( value ) ;
31+ field = value ;
32+ }
33+ }
2634
2735 /// <summary>
28- /// Gets the filters for the call-tool handler pipeline.
36+ /// Gets or sets the filters for the call-tool handler pipeline.
2937 /// </summary>
3038 /// <remarks>
3139 /// These filters wrap handlers that are invoked when a client makes a call to a tool that isn't found in the <see cref="McpServerTool"/> collection.
3240 /// The filters can modify, log, or perform additional operations on requests and responses for
3341 /// <see cref="RequestMethods.ToolsCall"/> requests. The handler should implement logic to execute the requested tool and return appropriate results.
3442 /// </remarks>
35- public IList < McpRequestFilter < CallToolRequestParams , CallToolResult > > CallToolFilters { get ; } = [ ] ;
43+ public IList < McpRequestFilter < CallToolRequestParams , CallToolResult > > CallToolFilters
44+ {
45+ get => field ??= [ ] ;
46+ set
47+ {
48+ Throw . IfNull ( value ) ;
49+ field = value ;
50+ }
51+ }
3652
3753 /// <summary>
38- /// Gets the filters for the list-prompts handler pipeline.
54+ /// Gets or sets the filters for the list-prompts handler pipeline.
3955 /// </summary>
4056 /// <remarks>
4157 /// <para>
@@ -49,63 +65,111 @@ public sealed class McpRequestFilters
4965 /// Prompts from both sources will be combined when returning results to clients.
5066 /// </para>
5167 /// </remarks>
52- public IList < McpRequestFilter < ListPromptsRequestParams , ListPromptsResult > > ListPromptsFilters { get ; } = [ ] ;
68+ public IList < McpRequestFilter < ListPromptsRequestParams , ListPromptsResult > > ListPromptsFilters
69+ {
70+ get => field ??= [ ] ;
71+ set
72+ {
73+ Throw . IfNull ( value ) ;
74+ field = value ;
75+ }
76+ }
5377
5478 /// <summary>
55- /// Gets the filters for the get-prompt handler pipeline.
79+ /// Gets or sets the filters for the get-prompt handler pipeline.
5680 /// </summary>
5781 /// <remarks>
5882 /// These filters wrap handlers that are invoked when a client requests details for a specific prompt that isn't found in the <see cref="McpServerPrompt"/> collection.
5983 /// The filters can modify, log, or perform additional operations on requests and responses for
6084 /// <see cref="RequestMethods.PromptsGet"/> requests. The handler should implement logic to fetch or generate the requested prompt and return appropriate results.
6185 /// </remarks>
62- public IList < McpRequestFilter < GetPromptRequestParams , GetPromptResult > > GetPromptFilters { get ; } = [ ] ;
86+ public IList < McpRequestFilter < GetPromptRequestParams , GetPromptResult > > GetPromptFilters
87+ {
88+ get => field ??= [ ] ;
89+ set
90+ {
91+ Throw . IfNull ( value ) ;
92+ field = value ;
93+ }
94+ }
6395
6496 /// <summary>
65- /// Gets the filters for the list-resource-templates handler pipeline.
97+ /// Gets or sets the filters for the list-resource-templates handler pipeline.
6698 /// </summary>
6799 /// <remarks>
68100 /// These filters wrap handlers that return a list of available resource templates when requested by a client.
69101 /// The filters can modify, log, or perform additional operations on requests and responses for
70102 /// <see cref="RequestMethods.ResourcesTemplatesList"/> requests. It supports pagination through the cursor mechanism,
71103 /// where the client can make repeated calls with the cursor returned by the previous call to retrieve more resource templates.
72104 /// </remarks>
73- public IList < McpRequestFilter < ListResourceTemplatesRequestParams , ListResourceTemplatesResult > > ListResourceTemplatesFilters { get ; } = [ ] ;
105+ public IList < McpRequestFilter < ListResourceTemplatesRequestParams , ListResourceTemplatesResult > > ListResourceTemplatesFilters
106+ {
107+ get => field ??= [ ] ;
108+ set
109+ {
110+ Throw . IfNull ( value ) ;
111+ field = value ;
112+ }
113+ }
74114
75115 /// <summary>
76- /// Gets the filters for the list-resources handler pipeline.
116+ /// Gets or sets the filters for the list-resources handler pipeline.
77117 /// </summary>
78118 /// <remarks>
79119 /// These filters wrap handlers that return a list of available resources when requested by a client.
80120 /// The filters can modify, log, or perform additional operations on requests and responses for
81121 /// <see cref="RequestMethods.ResourcesList"/> requests. It supports pagination through the cursor mechanism,
82122 /// where the client can make repeated calls with the cursor returned by the previous call to retrieve more resources.
83123 /// </remarks>
84- public IList < McpRequestFilter < ListResourcesRequestParams , ListResourcesResult > > ListResourcesFilters { get ; } = [ ] ;
124+ public IList < McpRequestFilter < ListResourcesRequestParams , ListResourcesResult > > ListResourcesFilters
125+ {
126+ get => field ??= [ ] ;
127+ set
128+ {
129+ Throw . IfNull ( value ) ;
130+ field = value ;
131+ }
132+ }
85133
86134 /// <summary>
87- /// Gets the filters for the read-resource handler pipeline.
135+ /// Gets or sets the filters for the read-resource handler pipeline.
88136 /// </summary>
89137 /// <remarks>
90138 /// These filters wrap handlers that are invoked when a client requests the content of a specific resource identified by its URI.
91139 /// The filters can modify, log, or perform additional operations on requests and responses for
92140 /// <see cref="RequestMethods.ResourcesRead"/> requests. The handler should implement logic to locate and retrieve the requested resource.
93141 /// </remarks>
94- public IList < McpRequestFilter < ReadResourceRequestParams , ReadResourceResult > > ReadResourceFilters { get ; } = [ ] ;
142+ public IList < McpRequestFilter < ReadResourceRequestParams , ReadResourceResult > > ReadResourceFilters
143+ {
144+ get => field ??= [ ] ;
145+ set
146+ {
147+ Throw . IfNull ( value ) ;
148+ field = value ;
149+ }
150+ }
95151
96152 /// <summary>
97- /// Gets the filters for the complete-handler pipeline.
153+ /// Gets or sets the filters for the complete-handler pipeline.
98154 /// </summary>
99155 /// <remarks>
100156 /// These filters wrap handlers that provide auto-completion suggestions for prompt arguments or resource references in the Model Context Protocol.
101157 /// The filters can modify, log, or perform additional operations on requests and responses for
102158 /// <see cref="RequestMethods.CompletionComplete"/> requests. The handler processes auto-completion requests, returning a list of suggestions based on the
103159 /// reference type and current argument value.
104160 /// </remarks>
105- public IList < McpRequestFilter < CompleteRequestParams , CompleteResult > > CompleteFilters { get ; } = [ ] ;
161+ public IList < McpRequestFilter < CompleteRequestParams , CompleteResult > > CompleteFilters
162+ {
163+ get => field ??= [ ] ;
164+ set
165+ {
166+ Throw . IfNull ( value ) ;
167+ field = value ;
168+ }
169+ }
106170
107171 /// <summary>
108- /// Gets the filters for the subscribe-to-resources handler pipeline.
172+ /// Gets or sets the filters for the subscribe-to-resources handler pipeline.
109173 /// </summary>
110174 /// <remarks>
111175 /// <para>
@@ -119,10 +183,18 @@ public sealed class McpRequestFilters
119183 /// whenever a relevant resource is created, updated, or deleted.
120184 /// </para>
121185 /// </remarks>
122- public IList < McpRequestFilter < SubscribeRequestParams , EmptyResult > > SubscribeToResourcesFilters { get ; } = [ ] ;
186+ public IList < McpRequestFilter < SubscribeRequestParams , EmptyResult > > SubscribeToResourcesFilters
187+ {
188+ get => field ??= [ ] ;
189+ set
190+ {
191+ Throw . IfNull ( value ) ;
192+ field = value ;
193+ }
194+ }
123195
124196 /// <summary>
125- /// Gets the filters for the unsubscribe-from-resources handler pipeline.
197+ /// Gets or sets the filters for the unsubscribe-from-resources handler pipeline.
126198 /// </summary>
127199 /// <remarks>
128200 /// <para>
@@ -136,10 +208,18 @@ public sealed class McpRequestFilters
136208 /// to the client for the specified resources.
137209 /// </para>
138210 /// </remarks>
139- public IList < McpRequestFilter < UnsubscribeRequestParams , EmptyResult > > UnsubscribeFromResourcesFilters { get ; } = [ ] ;
211+ public IList < McpRequestFilter < UnsubscribeRequestParams , EmptyResult > > UnsubscribeFromResourcesFilters
212+ {
213+ get => field ??= [ ] ;
214+ set
215+ {
216+ Throw . IfNull ( value ) ;
217+ field = value ;
218+ }
219+ }
140220
141221 /// <summary>
142- /// Gets the filters for the set-logging-level handler pipeline.
222+ /// Gets or sets the filters for the set-logging-level handler pipeline.
143223 /// </summary>
144224 /// <remarks>
145225 /// <para>
@@ -153,5 +233,13 @@ public sealed class McpRequestFilters
153233 /// at or above the specified level to the client as notifications/message notifications.
154234 /// </para>
155235 /// </remarks>
156- public IList < McpRequestFilter < SetLevelRequestParams , EmptyResult > > SetLoggingLevelFilters { get ; } = [ ] ;
236+ public IList < McpRequestFilter < SetLevelRequestParams , EmptyResult > > SetLoggingLevelFilters
237+ {
238+ get => field ??= [ ] ;
239+ set
240+ {
241+ Throw . IfNull ( value ) ;
242+ field = value ;
243+ }
244+ }
157245}
0 commit comments