Skip to content

Commit 1457dc8

Browse files
committed
feat(mcp): add support for completion specifications in MCP server
Add support for completion specifications in both sync and async MCP servers by: - Adding parameters for SyncCompletionSpecification and AsyncCompletionSpecification - Implementing registration of completion specifications in server builders - Updating capabilities builders to include completions - Upgrading MCP SDK version to 0.10.0-SNAPSHOT Signed-off-by: Christian Tzolov <[email protected]>
1 parent 1bf5787 commit 1457dc8

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

auto-configurations/mcp/spring-ai-autoconfigure-mcp-server/src/main/java/org/springframework/ai/mcp/server/autoconfigure/McpServerAutoConfiguration.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,11 @@
2828
import io.modelcontextprotocol.server.McpServer.AsyncSpecification;
2929
import io.modelcontextprotocol.server.McpServer.SyncSpecification;
3030
import io.modelcontextprotocol.server.McpServerFeatures;
31+
import io.modelcontextprotocol.server.McpServerFeatures.AsyncCompletionSpecification;
3132
import io.modelcontextprotocol.server.McpServerFeatures.AsyncPromptSpecification;
3233
import io.modelcontextprotocol.server.McpServerFeatures.AsyncResourceSpecification;
3334
import io.modelcontextprotocol.server.McpServerFeatures.AsyncToolSpecification;
35+
import io.modelcontextprotocol.server.McpServerFeatures.SyncCompletionSpecification;
3436
import io.modelcontextprotocol.server.McpServerFeatures.SyncPromptSpecification;
3537
import io.modelcontextprotocol.server.McpServerFeatures.SyncResourceSpecification;
3638
import io.modelcontextprotocol.server.McpServerFeatures.SyncToolSpecification;
@@ -173,6 +175,7 @@ public McpSyncServer mcpSyncServer(McpServerTransportProvider transportProvider,
173175
ObjectProvider<List<SyncToolSpecification>> tools,
174176
ObjectProvider<List<SyncResourceSpecification>> resources,
175177
ObjectProvider<List<SyncPromptSpecification>> prompts,
178+
ObjectProvider<List<SyncCompletionSpecification>> completions,
176179
ObjectProvider<BiConsumer<McpSyncServerExchange, List<McpSchema.Root>>> rootsChangeConsumers,
177180
List<ToolCallbackProvider> toolCallbackProvider) {
178181

@@ -216,6 +219,15 @@ public McpSyncServer mcpSyncServer(McpServerTransportProvider transportProvider,
216219
+ serverProperties.isPromptChangeNotification());
217220
}
218221

222+
List<SyncCompletionSpecification> completionSpecifications = completions.stream()
223+
.flatMap(List::stream)
224+
.toList();
225+
if (!CollectionUtils.isEmpty(completionSpecifications)) {
226+
serverBuilder.completions(completionSpecifications);
227+
capabilitiesBuilder.completions();
228+
logger.info("Registered completions: " + completionSpecifications.size());
229+
}
230+
219231
rootsChangeConsumers.ifAvailable(consumer -> {
220232
serverBuilder.rootsChangeHandler((exchange, roots) -> consumer.accept(exchange, roots));
221233
logger.info("Registered roots change consumer");
@@ -270,6 +282,7 @@ public McpAsyncServer mcpAsyncServer(McpServerTransportProvider transportProvide
270282
ObjectProvider<List<AsyncToolSpecification>> tools,
271283
ObjectProvider<List<AsyncResourceSpecification>> resources,
272284
ObjectProvider<List<AsyncPromptSpecification>> prompts,
285+
ObjectProvider<List<AsyncCompletionSpecification>> completions,
273286
ObjectProvider<BiConsumer<McpAsyncServerExchange, List<McpSchema.Root>>> rootsChangeConsumer,
274287
List<ToolCallbackProvider> toolCallbackProvider) {
275288

@@ -313,6 +326,15 @@ public McpAsyncServer mcpAsyncServer(McpServerTransportProvider transportProvide
313326
+ serverProperties.isPromptChangeNotification());
314327
}
315328

329+
List<AsyncCompletionSpecification> completionSpecifications = completions.stream()
330+
.flatMap(List::stream)
331+
.toList();
332+
if (!CollectionUtils.isEmpty(completionSpecifications)) {
333+
serverBuilder.completions(completionSpecifications);
334+
capabilitiesBuilder.completions();
335+
logger.info("Registered completions: " + completionSpecifications.size());
336+
}
337+
316338
rootsChangeConsumer.ifAvailable(consumer -> {
317339
BiFunction<McpAsyncServerExchange, List<McpSchema.Root>, Mono<Void>> asyncConsumer = (exchange, roots) -> {
318340
consumer.accept(exchange, roots);

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@
308308
<okhttp3.version>4.12.0</okhttp3.version>
309309

310310
<!-- MCP-->
311-
<mcp.sdk.version>0.9.0</mcp.sdk.version>
311+
<mcp.sdk.version>0.10.0-SNAPSHOT</mcp.sdk.version>
312312

313313
<!-- plugin versions -->
314314
<antlr.version>4.13.1</antlr.version>

0 commit comments

Comments
 (0)