@@ -49,28 +49,20 @@ internal McpClientImpl(ITransport transport, string endpointName, McpClientOptio
4949 var notificationHandlers = new NotificationHandlers ( ) ;
5050 var requestHandlers = new RequestHandlers ( ) ;
5151
52- if ( options . Capabilities is { } capabilities )
53- {
54- RegisterHandlers ( capabilities , notificationHandlers , requestHandlers ) ;
55- }
52+ RegisterHandlers ( options . Handlers , notificationHandlers , requestHandlers ) ;
5653
5754 _sessionHandler = new McpSessionHandler ( isServer : false , transport , endpointName , requestHandlers , notificationHandlers , _logger ) ;
5855 }
5956
60- private void RegisterHandlers ( ClientCapabilities capabilities , NotificationHandlers notificationHandlers , RequestHandlers requestHandlers )
57+ private void RegisterHandlers ( McpClientHandlers handlers , NotificationHandlers notificationHandlers , RequestHandlers requestHandlers )
6158 {
62- if ( capabilities . NotificationHandlers is { } notificationHandlersFromCapabilities )
59+ if ( handlers . NotificationHandlers is { } notificationHandlersFromOptions )
6360 {
64- notificationHandlers . RegisterRange ( notificationHandlersFromCapabilities ) ;
61+ notificationHandlers . RegisterRange ( notificationHandlersFromOptions ) ;
6562 }
6663
67- if ( capabilities . Sampling is { } samplingCapability )
64+ if ( handlers . SamplingHandler is { } samplingHandler )
6865 {
69- if ( samplingCapability . SamplingHandler is not { } samplingHandler )
70- {
71- throw new InvalidOperationException ( "Sampling capability was set but it did not provide a handler." ) ;
72- }
73-
7466 requestHandlers . Set (
7567 RequestMethods . SamplingCreateMessage ,
7668 ( request , _ , cancellationToken ) => samplingHandler (
@@ -79,34 +71,33 @@ private void RegisterHandlers(ClientCapabilities capabilities, NotificationHandl
7971 cancellationToken ) ,
8072 McpJsonUtilities . JsonContext . Default . CreateMessageRequestParams ,
8173 McpJsonUtilities . JsonContext . Default . CreateMessageResult ) ;
74+
75+ _options . Capabilities ??= new ( ) ;
76+ _options . Capabilities . Sampling ??= new ( ) ;
8277 }
8378
84- if ( capabilities . Roots is { } rootsCapability )
79+ if ( handlers . RootsHandler is { } rootsHandler )
8580 {
86- if ( rootsCapability . RootsHandler is not { } rootsHandler )
87- {
88- throw new InvalidOperationException ( "Roots capability was set but it did not provide a handler." ) ;
89- }
90-
9181 requestHandlers . Set (
9282 RequestMethods . RootsList ,
9383 ( request , _ , cancellationToken ) => rootsHandler ( request , cancellationToken ) ,
9484 McpJsonUtilities . JsonContext . Default . ListRootsRequestParams ,
9585 McpJsonUtilities . JsonContext . Default . ListRootsResult ) ;
86+
87+ _options . Capabilities ??= new ( ) ;
88+ _options . Capabilities . Roots ??= new ( ) ;
9689 }
9790
98- if ( capabilities . Elicitation is { } elicitationCapability )
91+ if ( handlers . ElicitationHandler is { } elicitationHandler )
9992 {
100- if ( elicitationCapability . ElicitationHandler is not { } elicitationHandler )
101- {
102- throw new InvalidOperationException ( "Elicitation capability was set but it did not provide a handler." ) ;
103- }
104-
10593 requestHandlers . Set (
10694 RequestMethods . ElicitationCreate ,
10795 ( request , _ , cancellationToken ) => elicitationHandler ( request , cancellationToken ) ,
10896 McpJsonUtilities . JsonContext . Default . ElicitRequestParams ,
10997 McpJsonUtilities . JsonContext . Default . ElicitResult ) ;
98+
99+ _options . Capabilities ??= new ( ) ;
100+ _options . Capabilities . Elicitation ??= new ( ) ;
110101 }
111102 }
112103
0 commit comments