@@ -9,6 +9,7 @@ import io.ktor.server.request.contentType
99import io.ktor.server.request.host
1010import io.ktor.server.request.httpMethod
1111import io.ktor.server.request.receive
12+ import io.ktor.server.request.receiveText
1213import io.ktor.server.response.header
1314import io.ktor.server.response.respond
1415import 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
0 commit comments