diff --git a/mcp-core/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java b/mcp-core/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java index fc1f8a47c..91e5adc2c 100644 --- a/mcp-core/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java +++ b/mcp-core/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java @@ -138,7 +138,7 @@ public class McpAsyncServer { this.mcpTransportProvider = mcpTransportProvider; this.jsonMapper = jsonMapper; this.serverInfo = features.serverInfo(); - this.serverCapabilities = features.serverCapabilities().mutate().logging().build(); + this.serverCapabilities = features.serverCapabilities(); this.instructions = features.instructions(); this.tools.addAll(withStructuredOutputHandling(jsonSchemaValidator, features.tools())); this.resources.putAll(features.resources()); @@ -170,7 +170,7 @@ public class McpAsyncServer { this.mcpTransportProvider = mcpTransportProvider; this.jsonMapper = jsonMapper; this.serverInfo = features.serverInfo(); - this.serverCapabilities = features.serverCapabilities().mutate().logging().build(); + this.serverCapabilities = features.serverCapabilities(); this.instructions = features.instructions(); this.tools.addAll(withStructuredOutputHandling(jsonSchemaValidator, features.tools())); this.resources.putAll(features.resources()); diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/server/McpAsyncServerTests.java b/mcp-core/src/test/java/io/modelcontextprotocol/server/McpAsyncServerTests.java new file mode 100644 index 000000000..f801b4199 --- /dev/null +++ b/mcp-core/src/test/java/io/modelcontextprotocol/server/McpAsyncServerTests.java @@ -0,0 +1,45 @@ +/* + * Copyright 2024-2026 the original author or authors. + */ + +package io.modelcontextprotocol.server; + +import io.modelcontextprotocol.json.McpJsonMapper; +import io.modelcontextprotocol.json.schema.JsonSchemaValidator; +import io.modelcontextprotocol.spec.McpSchema; +import io.modelcontextprotocol.spec.McpServerTransportProvider; +import io.modelcontextprotocol.spec.McpStreamableServerTransportProvider; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +class McpAsyncServerTests { + + @Test + void singleSessionServerPreservesExplicitCapabilities() { + McpSchema.ServerCapabilities capabilities = McpSchema.ServerCapabilities.builder().tools(true).build(); + + McpAsyncServer server = McpServer.async(mock(McpServerTransportProvider.class)) + .capabilities(capabilities) + .jsonMapper(mock(McpJsonMapper.class)) + .jsonSchemaValidator(mock(JsonSchemaValidator.class)) + .build(); + + assertThat(server.getServerCapabilities()).isEqualTo(capabilities); + } + + @Test + void streamableServerPreservesExplicitCapabilities() { + McpSchema.ServerCapabilities capabilities = McpSchema.ServerCapabilities.builder().tools(true).build(); + + McpAsyncServer server = McpServer.async(mock(McpStreamableServerTransportProvider.class)) + .capabilities(capabilities) + .jsonMapper(mock(McpJsonMapper.class)) + .jsonSchemaValidator(mock(JsonSchemaValidator.class)) + .build(); + + assertThat(server.getServerCapabilities()).isEqualTo(capabilities); + } + +}