Lazy mcp client and toolcallback resolution #4671
Open
+1,466
−158
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes critical timing issues where MCP clients were created before all annotated beans were scanned, and tool callbacks were resolved too early during ChatClient configuration.
Problems Fixed
Solution
McpSyncClientInitializer
andMcpAsyncClientInitializer
classes defer client creation until after all singletons are instantiatedcall()
/stream()
)StaticToolCallbackResolver
to enable lazy resolutionmcpClientsReference()
methods to properly share list referencesKey Changes
Configuration:
McpClientAutoConfiguration.java
- Added initializer classesMcpToolCallbackAutoConfiguration.java
- Uses reference sharingMcpClientSpecificationFactoryAutoConfiguration.java
- Deprecated (disabled by default)Tool Resolution:
DefaultChatClient.java
- Lazy provider resolutionToolCallingAutoConfiguration.java
- MCP provider filteringProviders:
mcpClientsReference()
toSyncMcpToolCallbackProvider
andAsyncMcpToolCallbackProvider
Breaking Changes
Deprecated (still functional):
mcpClients(List)
andmcpClients(varargs)
→ UsemcpClientsReference(List)
insteadBehavioral (transparent to users):
Migration
Most users: No changes required - fixes are transparent and backward compatible.
Custom MCP providers: Update to use
mcpClientsReference()
instead of deprecatedmcpClients()
methods.Resolves: #4670, #4618