Skip to content

Commit 2cf94b3

Browse files
committed
Fix accepts headers and workaround for receive Json
1 parent 975f7e4 commit 2cf94b3

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/server/StreamableHttpServerTransport.kt

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import io.ktor.server.request.contentType
99
import io.ktor.server.request.host
1010
import io.ktor.server.request.httpMethod
1111
import io.ktor.server.request.receive
12+
import io.ktor.server.request.receiveText
1213
import io.ktor.server.response.header
1314
import io.ktor.server.response.respond
1415
import io.ktor.server.response.respondNullable
@@ -440,15 +441,22 @@ public class StreamableHttpServerTransport(
440441
}
441442

442443
private suspend fun parseBody(call: ApplicationCall): List<JSONRPCMessage>? {
443-
return when (val element = call.receive<JsonElement>()) {
444+
val body = call.receiveText()
445+
return when (val element = McpJson.parseToJsonElement(body)) {
444446
is JsonObject -> listOf(McpJson.decodeFromJsonElement(element))
445-
is JsonArray -> McpJson.decodeFromJsonElement(element)
447+
is JsonArray -> McpJson.decodeFromJsonElement<List<JSONRPCMessage>>(element)
446448
else -> {
447-
call.reject(
448-
HttpStatusCode.BadRequest, ErrorCode.Defined.ParseError,
449-
"Invalid JSON format"
449+
call.response.status(HttpStatusCode.BadRequest)
450+
call.respond(
451+
JSONRPCResponse(
452+
id = null,
453+
error = JSONRPCError(
454+
code = ErrorCode.Defined.InvalidRequest,
455+
message = "Invalid Request: Server already initialized"
456+
)
457+
)
450458
)
451-
null
459+
return null
452460
}
453461
}
454462
}
@@ -457,7 +465,7 @@ public class StreamableHttpServerTransport(
457465
if (this == null) return false
458466

459467
val escaped = Regex.escape(mime.toString())
460-
val pattern = Regex("""(^|,\s*)$escaped(\s*;|$)""", RegexOption.IGNORE_CASE)
468+
val pattern = Regex("""(^|,\s*)$escaped(\s*(;|,|$))""", RegexOption.IGNORE_CASE)
461469
return pattern.containsMatchIn(this)
462470
}
463471

src/jvmTest/kotlin/integration/SseIntegrationTest.kt

Whitespace-only changes.

0 commit comments

Comments
 (0)