From 3428704502970fcd0645fcdda931f1f23fc65c51 Mon Sep 17 00:00:00 2001 From: Sergio del Amo Date: Mon, 6 Oct 2025 18:24:27 +0200 Subject: [PATCH 1/2] define explicitely that values should always be included --- .../modelcontextprotocol/spec/McpSchema.java | 1 + .../CompleteCompletionSerializationTest.java | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 mcp-core/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java 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 12835a57a..d356f2be2 100644 --- a/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java +++ b/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java @@ -2501,6 +2501,7 @@ public CompleteResult(CompleteCompletion completion) { * @param hasMore Indicates whether there are additional completion options beyond * those provided in the current response, even if the exact total is unknown */ + @JsonInclude(JsonInclude.Include.ALWAYS) public record CompleteCompletion( // @formatter:off @JsonProperty("values") List values, @JsonProperty("total") Integer total, diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java b/mcp-core/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java new file mode 100644 index 000000000..0bd2b5916 --- /dev/null +++ b/mcp-core/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java @@ -0,0 +1,27 @@ +package io.modelcontextprotocol.spec; + +import io.modelcontextprotocol.json.McpJsonMapper; +import org.junit.jupiter.api.Test; +import java.io.IOException; +import java.util.Collections; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class CompleteCompletionSerializationTest { + + @Test + void codeCompletionSerialization() throws IOException { + McpJsonMapper jsonMapper = McpJsonMapper.getDefault(); + McpSchema.CompleteResult.CompleteCompletion codeComplete + = new McpSchema.CompleteResult.CompleteCompletion(Collections.emptyList(), 0, false); + String json = jsonMapper.writeValueAsString(codeComplete); + String expected = """ + {"values":[],"total":0,"hasMore":false}"""; + assertEquals(expected, json, json); + + McpSchema.CompleteResult completeResult = new McpSchema.CompleteResult(codeComplete); + json = jsonMapper.writeValueAsString(completeResult); + expected = """ + {"completion":{"values":[],"total":0,"hasMore":false}}"""; + assertEquals(expected, json, json); + } +} From 73823a68ee67dcc706c6989b890862c779c0f9af Mon Sep 17 00:00:00 2001 From: Sergio del Amo Date: Mon, 6 Oct 2025 18:50:05 +0200 Subject: [PATCH 2/2] spring apply --- .../modelcontextprotocol/spec/McpSchema.java | 2 +- .../CompleteCompletionSerializationTest.java | 31 ++++++++++--------- 2 files changed, 17 insertions(+), 16 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 d356f2be2..e37b4df60 100644 --- a/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java +++ b/mcp-core/src/main/java/io/modelcontextprotocol/spec/McpSchema.java @@ -2501,7 +2501,7 @@ public CompleteResult(CompleteCompletion completion) { * @param hasMore Indicates whether there are additional completion options beyond * those provided in the current response, even if the exact total is unknown */ - @JsonInclude(JsonInclude.Include.ALWAYS) + @JsonInclude(JsonInclude.Include.ALWAYS) public record CompleteCompletion( // @formatter:off @JsonProperty("values") List values, @JsonProperty("total") Integer total, diff --git a/mcp-core/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java b/mcp-core/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java index 0bd2b5916..55f71fea4 100644 --- a/mcp-core/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java +++ b/mcp-core/src/test/java/io/modelcontextprotocol/spec/CompleteCompletionSerializationTest.java @@ -8,20 +8,21 @@ class CompleteCompletionSerializationTest { - @Test - void codeCompletionSerialization() throws IOException { - McpJsonMapper jsonMapper = McpJsonMapper.getDefault(); - McpSchema.CompleteResult.CompleteCompletion codeComplete - = new McpSchema.CompleteResult.CompleteCompletion(Collections.emptyList(), 0, false); - String json = jsonMapper.writeValueAsString(codeComplete); - String expected = """ - {"values":[],"total":0,"hasMore":false}"""; - assertEquals(expected, json, json); + @Test + void codeCompletionSerialization() throws IOException { + McpJsonMapper jsonMapper = McpJsonMapper.getDefault(); + McpSchema.CompleteResult.CompleteCompletion codeComplete = new McpSchema.CompleteResult.CompleteCompletion( + Collections.emptyList(), 0, false); + String json = jsonMapper.writeValueAsString(codeComplete); + String expected = """ + {"values":[],"total":0,"hasMore":false}"""; + assertEquals(expected, json, json); + + McpSchema.CompleteResult completeResult = new McpSchema.CompleteResult(codeComplete); + json = jsonMapper.writeValueAsString(completeResult); + expected = """ + {"completion":{"values":[],"total":0,"hasMore":false}}"""; + assertEquals(expected, json, json); + } - McpSchema.CompleteResult completeResult = new McpSchema.CompleteResult(codeComplete); - json = jsonMapper.writeValueAsString(completeResult); - expected = """ - {"completion":{"values":[],"total":0,"hasMore":false}}"""; - assertEquals(expected, json, json); - } }