@@ -243,6 +243,8 @@ public McpAsyncServer build() {
243243 var jsonSchemaValidator = (this .jsonSchemaValidator != null ) ? this .jsonSchemaValidator
244244 : McpJsonDefaults .getSchemaValidator ();
245245
246+ validateAsyncToolSchemas (jsonSchemaValidator , this .tools );
247+
246248 return new McpAsyncServer (transportProvider , jsonMapper == null ? McpJsonDefaults .getMapper () : jsonMapper ,
247249 features , requestTimeout , uriTemplateManagerFactory , jsonSchemaValidator , validateToolInputs );
248250 }
@@ -269,6 +271,9 @@ public McpAsyncServer build() {
269271 this .instructions );
270272 var jsonSchemaValidator = this .jsonSchemaValidator != null ? this .jsonSchemaValidator
271273 : McpJsonDefaults .getSchemaValidator ();
274+
275+ validateAsyncToolSchemas (jsonSchemaValidator , this .tools );
276+
272277 return new McpAsyncServer (transportProvider , jsonMapper == null ? McpJsonDefaults .getMapper () : jsonMapper ,
273278 features , requestTimeout , uriTemplateManagerFactory , jsonSchemaValidator , validateToolInputs );
274279 }
@@ -829,11 +834,14 @@ public McpSyncServer build() {
829834 McpServerFeatures .Async asyncFeatures = McpServerFeatures .Async .fromSync (syncFeatures ,
830835 this .immediateExecution );
831836
837+ var jsonSchemaValidator = this .jsonSchemaValidator != null ? this .jsonSchemaValidator
838+ : McpJsonDefaults .getSchemaValidator ();
839+
840+ validateSyncToolSchemas (jsonSchemaValidator , this .tools );
841+
832842 var asyncServer = new McpAsyncServer (transportProvider ,
833843 jsonMapper == null ? McpJsonDefaults .getMapper () : jsonMapper , asyncFeatures , requestTimeout ,
834- uriTemplateManagerFactory ,
835- jsonSchemaValidator != null ? jsonSchemaValidator : McpJsonDefaults .getSchemaValidator (),
836- validateToolInputs );
844+ uriTemplateManagerFactory , jsonSchemaValidator , validateToolInputs );
837845 return new McpSyncServer (asyncServer , this .immediateExecution );
838846 }
839847
@@ -862,6 +870,9 @@ public McpSyncServer build() {
862870 this .immediateExecution );
863871 var jsonSchemaValidator = this .jsonSchemaValidator != null ? this .jsonSchemaValidator
864872 : McpJsonDefaults .getSchemaValidator ();
873+
874+ validateSyncToolSchemas (jsonSchemaValidator , this .tools );
875+
865876 var asyncServer = new McpAsyncServer (transportProvider ,
866877 jsonMapper == null ? McpJsonDefaults .getMapper () : jsonMapper , asyncFeatures , this .requestTimeout ,
867878 this .uriTemplateManagerFactory , jsonSchemaValidator , validateToolInputs );
@@ -1898,10 +1909,13 @@ public StatelessAsyncSpecification jsonSchemaValidator(JsonSchemaValidator jsonS
18981909 public McpStatelessAsyncServer build () {
18991910 var features = new McpStatelessServerFeatures .Async (this .serverInfo , this .serverCapabilities , this .tools ,
19001911 this .resources , this .resourceTemplates , this .prompts , this .completions , this .instructions );
1912+ var jsonSchemaValidator = this .jsonSchemaValidator != null ? this .jsonSchemaValidator
1913+ : McpJsonDefaults .getSchemaValidator ();
1914+
1915+ validateStatelessAsyncToolSchemas (jsonSchemaValidator , this .tools );
1916+
19011917 return new McpStatelessAsyncServer (transport , jsonMapper == null ? McpJsonDefaults .getMapper () : jsonMapper ,
1902- features , requestTimeout , uriTemplateManagerFactory ,
1903- jsonSchemaValidator != null ? jsonSchemaValidator : McpJsonDefaults .getSchemaValidator (),
1904- validateToolInputs );
1918+ features , requestTimeout , uriTemplateManagerFactory , jsonSchemaValidator , validateToolInputs );
19051919 }
19061920
19071921 }
@@ -2412,14 +2426,42 @@ public McpStatelessSyncServer build() {
24122426 var syncFeatures = new McpStatelessServerFeatures .Sync (this .serverInfo , this .serverCapabilities , this .tools ,
24132427 this .resources , this .resourceTemplates , this .prompts , this .completions , this .instructions );
24142428 var asyncFeatures = McpStatelessServerFeatures .Async .fromSync (syncFeatures , this .immediateExecution );
2429+ var jsonSchemaValidator = this .jsonSchemaValidator != null ? this .jsonSchemaValidator
2430+ : McpJsonDefaults .getSchemaValidator ();
2431+
2432+ validateStatelessSyncToolSchemas (jsonSchemaValidator , this .tools );
2433+
24152434 var asyncServer = new McpStatelessAsyncServer (transport ,
24162435 jsonMapper == null ? McpJsonDefaults .getMapper () : jsonMapper , asyncFeatures , requestTimeout ,
2417- uriTemplateManagerFactory ,
2418- this .jsonSchemaValidator != null ? this .jsonSchemaValidator : McpJsonDefaults .getSchemaValidator (),
2419- validateToolInputs );
2436+ uriTemplateManagerFactory , jsonSchemaValidator , validateToolInputs );
24202437 return new McpStatelessSyncServer (asyncServer , this .immediateExecution );
24212438 }
24222439
24232440 }
24242441
2442+ private static void validateAsyncToolSchemas (JsonSchemaValidator validator ,
2443+ List <McpServerFeatures .AsyncToolSpecification > tools ) {
2444+ tools .forEach (spec -> validateToolSchema (validator , spec .tool ()));
2445+ }
2446+
2447+ private static void validateSyncToolSchemas (JsonSchemaValidator validator ,
2448+ List <McpServerFeatures .SyncToolSpecification > tools ) {
2449+ tools .forEach (spec -> validateToolSchema (validator , spec .tool ()));
2450+ }
2451+
2452+ private static void validateStatelessAsyncToolSchemas (JsonSchemaValidator validator ,
2453+ List <McpStatelessServerFeatures .AsyncToolSpecification > tools ) {
2454+ tools .forEach (spec -> validateToolSchema (validator , spec .tool ()));
2455+ }
2456+
2457+ private static void validateStatelessSyncToolSchemas (JsonSchemaValidator validator ,
2458+ List <McpStatelessServerFeatures .SyncToolSpecification > tools ) {
2459+ tools .forEach (spec -> validateToolSchema (validator , spec .tool ()));
2460+ }
2461+
2462+ private static void validateToolSchema (JsonSchemaValidator validator , McpSchema .Tool tool ) {
2463+ validator .assertConforms ("Tool '" + tool .name () + "' inputSchema" , tool .inputSchema ());
2464+ validator .assertConforms ("Tool '" + tool .name () + "' outputSchema" , tool .outputSchema ());
2465+ }
2466+
24252467}
0 commit comments