From fb568bbcabdbb804d1f5434e7cb2944887252f89 Mon Sep 17 00:00:00 2001 From: shiqicao Date: Thu, 8 May 2025 23:52:40 -0700 Subject: [PATCH] fix(client) add encodeDefault for field with non spec default value (#99) * fix(client) add encodeDefault for field with non spec default value * add test --- .../kotlin/io/modelcontextprotocol/kotlin/sdk/types.kt | 2 ++ src/commonTest/kotlin/ToolSerializationTest.kt | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types.kt b/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types.kt index c4d0f35..7db24b4 100644 --- a/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types.kt +++ b/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types.kt @@ -1054,6 +1054,8 @@ public data class Tool( val properties: JsonObject = EmptyJsonObject, val required: List? = null, ) { + @OptIn(ExperimentalSerializationApi::class) + @EncodeDefault val type: String = "object" } } diff --git a/src/commonTest/kotlin/ToolSerializationTest.kt b/src/commonTest/kotlin/ToolSerializationTest.kt index 5fd4a51..4f6ff9d 100644 --- a/src/commonTest/kotlin/ToolSerializationTest.kt +++ b/src/commonTest/kotlin/ToolSerializationTest.kt @@ -3,6 +3,7 @@ package io.modelcontextprotocol.kotlin.sdk import io.kotest.assertions.json.shouldEqualJson import io.modelcontextprotocol.kotlin.sdk.shared.McpJson import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.buildJsonObject import kotlin.test.Test @@ -54,4 +55,11 @@ class ToolSerializationTest { assertEquals(expected = getWeatherTool, actual = tool) } + @Test + fun `should always serialize default value`() { + val json = Json(from = McpJson) { + encodeDefaults = false + } + json.encodeToString(getWeatherTool) shouldEqualJson getWeatherToolJson + } }