From ceb2348e990ed01e7ac40acc93efe922b85040d1 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sat, 13 Dec 2025 11:10:30 +0100 Subject: [PATCH 1/3] fix modelcontextprotocol/java-sdk#724 --- .../modelcontextprotocol/spec/McpSchema.java | 1 + .../spec/McpSchemaTests.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java b/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java index 734cff237..ac075ba54 100644 --- a/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java +++ b/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java @@ -418,6 +418,7 @@ public record Sampling() { * data from users with optional JSON schemas to validate responses. */ @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record Elicitation() { } diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java b/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java index 0926eebae..9f8b6fd9f 100644 --- a/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java +++ b/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java @@ -10,6 +10,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -353,6 +354,25 @@ void testInitializeResult() throws Exception { {"protocolVersion":"2024-11-05","capabilities":{"logging":{},"prompts":{"listChanged":true},"resources":{"subscribe":true,"listChanged":true},"tools":{"listChanged":true}},"serverInfo":{"name":"test-server","version":"1.0.0"},"instructions":"Server initialized successfully"}""")); } + @Test + // see https://github.com/modelcontextprotocol/java-sdk/issues/724 + void testParseInitializeRequest() throws IOException { + String serialized = """ + {"protocolVersion":"2024-11-05","capabilities":{"elicitation":{"form":{}}},"clientInfo":{"name":"test-client","version":"1.0.0"},"_meta":{"metaKey":"metaValue"}} + """; + + McpSchema.InitializeRequest deserialized = JSON_MAPPER.readValue(serialized, McpSchema.InitializeRequest.class); + + McpSchema.ClientCapabilities capabilities = McpSchema.ClientCapabilities.builder() + .elicitation() + .build(); + McpSchema.Implementation clientInfo = new McpSchema.Implementation("test-client", "1.0.0"); + Map meta = Map.of("metaKey", "metaValue"); + McpSchema.InitializeRequest expected = new McpSchema.InitializeRequest(ProtocolVersions.MCP_2024_11_05, + capabilities, clientInfo, meta); + assertThat(deserialized).isEqualTo(expected); + } + // Resource Tests @Test From 0c7dadc8e0a2dc89ace520d1e54ed9e718ea5ed0 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Sat, 13 Dec 2025 11:14:00 +0100 Subject: [PATCH 2/3] ran formatter --- .../java/io/modelcontextprotocol/spec/McpSchemaTests.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java b/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java index 9f8b6fd9f..a6a9868ca 100644 --- a/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java +++ b/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java @@ -363,9 +363,7 @@ void testParseInitializeRequest() throws IOException { McpSchema.InitializeRequest deserialized = JSON_MAPPER.readValue(serialized, McpSchema.InitializeRequest.class); - McpSchema.ClientCapabilities capabilities = McpSchema.ClientCapabilities.builder() - .elicitation() - .build(); + McpSchema.ClientCapabilities capabilities = McpSchema.ClientCapabilities.builder().elicitation().build(); McpSchema.Implementation clientInfo = new McpSchema.Implementation("test-client", "1.0.0"); Map meta = Map.of("metaKey", "metaValue"); McpSchema.InitializeRequest expected = new McpSchema.InitializeRequest(ProtocolVersions.MCP_2024_11_05, From 27446049726c42457034f1597b65e28ef3b56a71 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Thu, 18 Dec 2025 12:24:04 +0100 Subject: [PATCH 3/3] also ignore unknown properties in `capabilities.sampling` --- .../main/java/io/modelcontextprotocol/spec/McpSchema.java | 1 + .../java/io/modelcontextprotocol/spec/McpSchemaTests.java | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java b/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java index ac075ba54..dd9888ff7 100644 --- a/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java +++ b/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java @@ -407,6 +407,7 @@ public record RootCapabilities(@JsonProperty("listChanged") Boolean listChanged) * from MCP servers in their prompts. */ @JsonInclude(JsonInclude.Include.NON_ABSENT) + @JsonIgnoreProperties(ignoreUnknown = true) public record Sampling() { } diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java b/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java index a6a9868ca..574410e56 100644 --- a/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java +++ b/mcp-core/src/test/java/io/modelcontextprotocol/spec/McpSchemaTests.java @@ -358,12 +358,15 @@ void testInitializeResult() throws Exception { // see https://github.com/modelcontextprotocol/java-sdk/issues/724 void testParseInitializeRequest() throws IOException { String serialized = """ - {"protocolVersion":"2024-11-05","capabilities":{"elicitation":{"form":{}}},"clientInfo":{"name":"test-client","version":"1.0.0"},"_meta":{"metaKey":"metaValue"}} + {"protocolVersion":"2024-11-05","capabilities":{"elicitation":{"form":{}},"sampling":{"tools": {}}},"clientInfo":{"name":"test-client","version":"1.0.0"},"_meta":{"metaKey":"metaValue"}} """; McpSchema.InitializeRequest deserialized = JSON_MAPPER.readValue(serialized, McpSchema.InitializeRequest.class); - McpSchema.ClientCapabilities capabilities = McpSchema.ClientCapabilities.builder().elicitation().build(); + McpSchema.ClientCapabilities capabilities = McpSchema.ClientCapabilities.builder() + .elicitation() + .sampling() + .build(); McpSchema.Implementation clientInfo = new McpSchema.Implementation("test-client", "1.0.0"); Map meta = Map.of("metaKey", "metaValue"); McpSchema.InitializeRequest expected = new McpSchema.InitializeRequest(ProtocolVersions.MCP_2024_11_05,