@@ -559,6 +559,39 @@ void testToolCallSuccess(String clientType) {
559
559
mcpServer .close ();
560
560
}
561
561
562
+ @ ParameterizedTest (name = "{0} : {displayName} " )
563
+ @ ValueSource (strings = { "httpclient" , "webflux" })
564
+ void testSearchToolsSuccess (String clientType ) {
565
+
566
+ var clientBuilder = clientBuilders .get (clientType );
567
+
568
+ var tool1Spec = new McpSchema .Tool ("tool1" , "tool1 description" , emptyJsonSchema );
569
+ var searchResponse = McpSchema .SearchToolsResult .builder ().tools (List .of (tool1Spec )).build ();
570
+ McpServerFeatures .SyncToolSpecification tool1 = new McpServerFeatures .SyncToolSpecification (tool1Spec ,
571
+ (exchange , request ) -> CallToolResult .builder ().textContent (List .of ("CALL RESPONSE" )).build ());
572
+
573
+ var mcpServer = McpServer .sync (mcpServerTransportProvider )
574
+ .capabilities (ServerCapabilities .builder ()
575
+ .tools (ServerCapabilities .ToolCapabilities .builder ().search (true ).build ())
576
+ .build ())
577
+ .tools (tool1 )
578
+ .toolSearchHandler ((exchange , request ) -> searchResponse )
579
+ .build ();
580
+
581
+ try (var mcpClient = clientBuilder .build ()) {
582
+
583
+ InitializeResult initResult = mcpClient .initialize ();
584
+ assertThat (initResult ).isNotNull ();
585
+
586
+ assertThat (mcpClient .searchTools (SearchToolsRequest .builder ().query ("test" ).build ()).tools ())
587
+ .contains (tool1 .tool ());
588
+
589
+ mcpClient .callTool (new McpSchema .CallToolRequest ("tool1" , Map .of ()));
590
+ }
591
+
592
+ mcpServer .close ();
593
+ }
594
+
562
595
@ ParameterizedTest (name = "{0} : {displayName} " )
563
596
@ ValueSource (strings = { "httpclient" , "webflux" })
564
597
void testToolListChangeHandlingSuccess (String clientType ) {
@@ -631,6 +664,119 @@ void testToolListChangeHandlingSuccess(String clientType) {
631
664
mcpServer .close ();
632
665
}
633
666
667
+ @ ParameterizedTest (name = "{0} : {displayName} " )
668
+ @ ValueSource (strings = { "httpclient" , "webflux" })
669
+ void testSearchResourcesSuccess (String clientType ) {
670
+
671
+ var clientBuilder = clientBuilders .get (clientType );
672
+
673
+ var tool1Spec = new McpSchema .Tool ("tool1" , "tool1 description" , emptyJsonSchema );
674
+
675
+ var resource = new Resource ("uri://test" , "test" , "test" , "text/plain" , null );
676
+ var searchResponse = McpSchema .SearchResourcesResult .builder ().resources (List .of (resource )).build ();
677
+
678
+ McpServerFeatures .SyncToolSpecification tool1 = new McpServerFeatures .SyncToolSpecification (tool1Spec ,
679
+ (exchange , request ) -> CallToolResult .builder ().textContent (List .of ("CALL RESPONSE" )).build ());
680
+
681
+ var mcpServer = McpServer .sync (mcpServerTransportProvider )
682
+ .capabilities (ServerCapabilities .builder ()
683
+ .tools (ServerCapabilities .ToolCapabilities .builder ().build ())
684
+ .resources (ServerCapabilities .ResourceCapabilities .builder ().search (true ).build ())
685
+ .build ())
686
+ .tools (tool1 )
687
+ .resourceSearchHandler ((exchange , request ) -> searchResponse )
688
+ .build ();
689
+
690
+ try (var mcpClient = clientBuilder .build ()) {
691
+
692
+ InitializeResult initResult = mcpClient .initialize ();
693
+ assertThat (initResult ).isNotNull ();
694
+
695
+ assertThat (mcpClient .searchResources (SearchResourcesRequest .builder ().query ("test" ).build ()).resources ())
696
+ .contains (resource );
697
+
698
+ mcpClient .callTool (new McpSchema .CallToolRequest ("tool1" , Map .of ()));
699
+ }
700
+
701
+ mcpServer .close ();
702
+ }
703
+
704
+ @ ParameterizedTest (name = "{0} : {displayName} " )
705
+ @ ValueSource (strings = { "httpclient" , "webflux" })
706
+ void testSearchResourceTemplatesSuccess (String clientType ) {
707
+
708
+ var clientBuilder = clientBuilders .get (clientType );
709
+
710
+ var tool1Spec = new McpSchema .Tool ("tool1" , "tool1 description" , emptyJsonSchema );
711
+
712
+ var resourceTemplate = new ResourceTemplate ("uri://test" , "test" , "test" , "text/plain" , null );
713
+ var searchResponse = McpSchema .SearchResourceTemplatesResult .builder ()
714
+ .resourceTemplates (List .of (resourceTemplate ))
715
+ .build ();
716
+
717
+ McpServerFeatures .SyncToolSpecification tool1 = new McpServerFeatures .SyncToolSpecification (tool1Spec ,
718
+ (exchange , request ) -> CallToolResult .builder ().textContent (List .of ("CALL RESPONSE" )).build ());
719
+
720
+ var mcpServer = McpServer .sync (mcpServerTransportProvider )
721
+ .capabilities (ServerCapabilities .builder ()
722
+ .tools (ServerCapabilities .ToolCapabilities .builder ().build ())
723
+ .resources (ServerCapabilities .ResourceCapabilities .builder ().search (true ).build ())
724
+ .build ())
725
+ .tools (tool1 )
726
+ .resourceTemplateSearchHandler ((exchange , request ) -> searchResponse )
727
+ .build ();
728
+
729
+ try (var mcpClient = clientBuilder .build ()) {
730
+
731
+ InitializeResult initResult = mcpClient .initialize ();
732
+ assertThat (initResult ).isNotNull ();
733
+
734
+ assertThat (mcpClient .searchResourceTemplates (SearchResourceTemplatesRequest .builder ().query ("test" ).build ())
735
+ .resourceTemplates ()).contains (resourceTemplate );
736
+
737
+ mcpClient .callTool (new McpSchema .CallToolRequest ("tool1" , Map .of ()));
738
+ }
739
+
740
+ mcpServer .close ();
741
+ }
742
+
743
+ @ ParameterizedTest (name = "{0} : {displayName} " )
744
+ @ ValueSource (strings = { "httpclient" , "webflux" })
745
+ void testSearchPromptsSuccess (String clientType ) {
746
+
747
+ var clientBuilder = clientBuilders .get (clientType );
748
+
749
+ var tool1Spec = new McpSchema .Tool ("tool1" , "tool1 description" , emptyJsonSchema );
750
+
751
+ var prompt = new Prompt ("test" , "test" , List .of ());
752
+ var searchResponse = McpSchema .SearchPromptsResult .builder ().prompts (List .of (prompt )).build ();
753
+
754
+ McpServerFeatures .SyncToolSpecification tool1 = new McpServerFeatures .SyncToolSpecification (tool1Spec ,
755
+ (exchange , request ) -> CallToolResult .builder ().textContent (List .of ("CALL RESPONSE" )).build ());
756
+
757
+ var mcpServer = McpServer .sync (mcpServerTransportProvider )
758
+ .capabilities (ServerCapabilities .builder ()
759
+ .tools (ServerCapabilities .ToolCapabilities .builder ().build ())
760
+ .prompts (ServerCapabilities .PromptCapabilities .builder ().search (true ).build ())
761
+ .build ())
762
+ .tools (tool1 )
763
+ .promptSearchHandler ((exchange , request ) -> searchResponse )
764
+ .build ();
765
+
766
+ try (var mcpClient = clientBuilder .build ()) {
767
+
768
+ InitializeResult initResult = mcpClient .initialize ();
769
+ assertThat (initResult ).isNotNull ();
770
+
771
+ assertThat (mcpClient .searchPrompts (SearchPromptsRequest .builder ().query ("test" ).build ()).prompts ())
772
+ .contains (prompt );
773
+
774
+ mcpClient .callTool (new McpSchema .CallToolRequest ("tool1" , Map .of ()));
775
+ }
776
+
777
+ mcpServer .close ();
778
+ }
779
+
634
780
@ ParameterizedTest (name = "{0} : {displayName} " )
635
781
@ ValueSource (strings = { "httpclient" , "webflux" })
636
782
void testInitialize (String clientType ) {
0 commit comments