diff --git a/buildSrc/src/main/kotlin/mcp.multiplatform.gradle.kts b/buildSrc/src/main/kotlin/mcp.multiplatform.gradle.kts index 36097ff..f8d89c0 100644 --- a/buildSrc/src/main/kotlin/mcp.multiplatform.gradle.kts +++ b/buildSrc/src/main/kotlin/mcp.multiplatform.gradle.kts @@ -5,6 +5,7 @@ import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode import org.jetbrains.kotlin.gradle.dsl.JvmDefaultMode import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { kotlin("multiplatform") @@ -15,6 +16,8 @@ plugins { kotlin { compilerOptions { + languageVersion = KotlinVersion.KOTLIN_2_1 + apiVersion = KotlinVersion.KOTLIN_2_1 freeCompilerArgs = listOf( "-Wextra", diff --git a/kotlin-sdk-client/src/commonTest/kotlin/io/modelcontextprotocol/kotlin/sdk/client/streamable/http/StreamableHttpClientTransportTest.kt b/kotlin-sdk-client/src/commonTest/kotlin/io/modelcontextprotocol/kotlin/sdk/client/streamable/http/StreamableHttpClientTransportTest.kt index 55df3e0..67b2f07 100644 --- a/kotlin-sdk-client/src/commonTest/kotlin/io/modelcontextprotocol/kotlin/sdk/client/streamable/http/StreamableHttpClientTransportTest.kt +++ b/kotlin-sdk-client/src/commonTest/kotlin/io/modelcontextprotocol/kotlin/sdk/client/streamable/http/StreamableHttpClientTransportTest.kt @@ -148,18 +148,17 @@ class StreamableHttpClientTransportTest { ) val transport = createTransport { request -> - when ( - val msg = McpJson.decodeFromString( - (request.body as TextContent).text, - ) - ) { - is JSONRPCRequest if msg.method == "initialize" -> respond( + val msg = McpJson.decodeFromString( + (request.body as TextContent).text, + ) + when { + msg is JSONRPCRequest && msg.method == "initialize" -> respond( content = "", status = HttpStatusCode.OK, headers = headersOf("mcp-session-id", "test-session-id"), ) - is JSONRPCNotification if msg.method == "test" -> { + msg is JSONRPCNotification && msg.method == "test" -> { assertEquals("test-session-id", request.headers["mcp-session-id"]) respond( content = "", @@ -246,8 +245,8 @@ class StreamableHttpClientTransportTest { var sseStarted = false val transport = createTransport { request -> - when (request.method) { - HttpMethod.Post if request.body.toString().contains("notifications/initialized") -> { + when { + request.method == HttpMethod.Post && request.body.toString().contains("notifications/initialized") -> { respond( content = "", status = HttpStatusCode.Accepted, @@ -256,7 +255,7 @@ class StreamableHttpClientTransportTest { } // Handle SSE connection - HttpMethod.Get -> { + request.method == HttpMethod.Get -> { sseStarted = true val sseContent = buildString { // Server sends various notifications @@ -288,7 +287,7 @@ class StreamableHttpClientTransportTest { } // Handle regular notifications - HttpMethod.Post -> { + request.method == HttpMethod.Post -> { respond( content = "", status = HttpStatusCode.Accepted, diff --git a/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/request.kt b/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/request.kt index dc7bd3b..683186c 100644 --- a/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/request.kt +++ b/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/request.kt @@ -16,9 +16,9 @@ import kotlin.jvm.JvmInline public value class RequestMeta(public val json: JsonObject) { public val progressToken: ProgressToken? get() = json["progressToken"]?.let { element -> - when (element) { - is JsonPrimitive if (element.isString) -> ProgressToken(element.content) - is JsonPrimitive if (element.longOrNull != null) -> ProgressToken(element.long) + when { + element is JsonPrimitive && element.isString -> ProgressToken(element.content) + element is JsonPrimitive && element.longOrNull != null -> ProgressToken(element.long) else -> null } } diff --git a/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/serializers.kt b/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/serializers.kt index 2d20d42..792c636 100644 --- a/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/serializers.kt +++ b/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/serializers.kt @@ -414,9 +414,9 @@ internal object JSONRPCMessagePolymorphicSerializer : * Supports both string and number IDs. */ internal object RequestIdPolymorphicSerializer : JsonContentPolymorphicSerializer(RequestId::class) { - override fun selectDeserializer(element: JsonElement): DeserializationStrategy = when (element) { - is JsonPrimitive if (element.isString) -> RequestId.StringId.serializer() - is JsonPrimitive if (element.longOrNull != null) -> RequestId.NumberId.serializer() + override fun selectDeserializer(element: JsonElement): DeserializationStrategy = when { + element is JsonPrimitive && element.isString -> RequestId.StringId.serializer() + element is JsonPrimitive && element.longOrNull != null -> RequestId.NumberId.serializer() else -> throw SerializationException("Invalid RequestId type: $element") } }