@@ -157,6 +157,8 @@ class SyncSpec {
157
157
158
158
private Duration requestTimeout = Duration .ofSeconds (20 ); // Default timeout
159
159
160
+ private Duration initializationTimeout = Duration .ofSeconds (20 );
161
+
160
162
private ClientCapabilities capabilities ;
161
163
162
164
private Implementation clientInfo = new Implementation ("Java SDK MCP Client" , "1.0.0" );
@@ -193,6 +195,18 @@ public SyncSpec requestTimeout(Duration requestTimeout) {
193
195
return this ;
194
196
}
195
197
198
+ /**
199
+ * @param initializationTimeout The duration to wait for the initializaiton
200
+ * lifecycle step to complete.
201
+ * @return This builder instance for method chaining
202
+ * @throws IllegalArgumentException if initializationTimeout is null
203
+ */
204
+ public SyncSpec initializationTimeout (Duration initializationTimeout ) {
205
+ Assert .notNull (initializationTimeout , "Initialization timeout must not be null" );
206
+ this .initializationTimeout = initializationTimeout ;
207
+ return this ;
208
+ }
209
+
196
210
/**
197
211
* Sets the client capabilities that will be advertised to the server during
198
212
* connection initialization. Capabilities define what features the client
@@ -354,7 +368,8 @@ public McpSyncClient build() {
354
368
355
369
McpClientFeatures .Async asyncFeatures = McpClientFeatures .Async .fromSync (syncFeatures );
356
370
357
- return new McpSyncClient (new McpAsyncClient (transport , this .requestTimeout , asyncFeatures ));
371
+ return new McpSyncClient (
372
+ new McpAsyncClient (transport , this .requestTimeout , this .initializationTimeout , asyncFeatures ));
358
373
}
359
374
360
375
}
@@ -381,6 +396,8 @@ class AsyncSpec {
381
396
382
397
private Duration requestTimeout = Duration .ofSeconds (20 ); // Default timeout
383
398
399
+ private Duration initializationTimeout = Duration .ofSeconds (20 );
400
+
384
401
private ClientCapabilities capabilities ;
385
402
386
403
private Implementation clientInfo = new Implementation ("Spring AI MCP Client" , "0.3.1" );
@@ -417,6 +434,18 @@ public AsyncSpec requestTimeout(Duration requestTimeout) {
417
434
return this ;
418
435
}
419
436
437
+ /**
438
+ * @param initializationTimeout The duration to wait for the initializaiton
439
+ * lifecycle step to complete.
440
+ * @return This builder instance for method chaining
441
+ * @throws IllegalArgumentException if initializationTimeout is null
442
+ */
443
+ public AsyncSpec initializationTimeout (Duration initializationTimeout ) {
444
+ Assert .notNull (initializationTimeout , "Initialization timeout must not be null" );
445
+ this .initializationTimeout = initializationTimeout ;
446
+ return this ;
447
+ }
448
+
420
449
/**
421
450
* Sets the client capabilities that will be advertised to the server during
422
451
* connection initialization. Capabilities define what features the client
@@ -574,7 +603,7 @@ public AsyncSpec loggingConsumers(
574
603
* @return a new instance of {@link McpAsyncClient}.
575
604
*/
576
605
public McpAsyncClient build () {
577
- return new McpAsyncClient (this .transport , this .requestTimeout ,
606
+ return new McpAsyncClient (this .transport , this .requestTimeout , this . initializationTimeout ,
578
607
new McpClientFeatures .Async (this .clientInfo , this .capabilities , this .roots ,
579
608
this .toolsChangeConsumers , this .resourcesChangeConsumers , this .promptsChangeConsumers ,
580
609
this .loggingConsumers , this .samplingHandler ));
0 commit comments