feat(server): add utility functions for CallToolResult (#73)

* feat(server): add utility functions for CallToolResult

CallToolResult.Companion.ok and CallToolResult.Companion.error

* test(server): add unit test for `CallToolResult.Companion.ok`and `CallToolResult.Companion.error`

* feat: update api dump

---------

Co-authored-by: Leonid Stashevsky <e5l@users.noreply.github.com>
This commit is contained in:
Stream 2025-04-30 12:34:43 +08:00 • committed by GitHub
commit 129731c34c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 92 additions and 1 deletions

View file

@ -2492,6 +2492,13 @@ public final class io/modelcontextprotocol/kotlin/sdk/TypesKt {
public static final fun getSUPPORTED_PROTOCOL_VERSIONS ()[Ljava/lang/String;
}
public final class io/modelcontextprotocol/kotlin/sdk/Types_utilKt {
public static final fun error (Lio/modelcontextprotocol/kotlin/sdk/CallToolResult$Companion;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/CallToolResult;
public static synthetic fun error$default (Lio/modelcontextprotocol/kotlin/sdk/CallToolResult$Companion;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/CallToolResult;
public static final fun ok (Lio/modelcontextprotocol/kotlin/sdk/CallToolResult$Companion;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/CallToolResult;
public static synthetic fun ok$default (Lio/modelcontextprotocol/kotlin/sdk/CallToolResult$Companion;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/CallToolResult;
}
public final class io/modelcontextprotocol/kotlin/sdk/UnknownContent : io/modelcontextprotocol/kotlin/sdk/PromptMessageContentTextOrImage {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/UnknownContent$Companion;
public fun <init> (Ljava/lang/String;)V

View file

@ -294,4 +294,24 @@ public class RequestIdSerializer : KSerializer<RequestId> {
is RequestId.NumberId -> jsonEncoder.encodeLong(value.value)
}
}
}
}
/**
* Creates a [CallToolResult] with single [TextContent] and [meta].
*/
public fun CallToolResult.Companion.ok(content: String, meta: JsonObject = EmptyJsonObject): CallToolResult =
CallToolResult(
content = listOf(TextContent(content)),
isError = false,
_meta = meta
)
/**
* Creates a [CallToolResult] with single [TextContent] and [meta], with `isError` being true.
*/
public fun CallToolResult.Companion.error(content: String, meta: JsonObject = EmptyJsonObject): CallToolResult =
CallToolResult(
content = listOf(TextContent(content)),
isError = true,
_meta = meta
)

View file

@ -0,0 +1,64 @@
package io.modelcontextprotocol.kotlin.sdk
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonObject
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue
class CallToolResultUtilsTest {
@Test
fun testOkWithOnlyText() {
val content = "TextMessage"
val result = CallToolResult.Companion.ok(content)
assertEquals(1, result.content.size)
assertEquals(content, (result.content[0] as TextContent).text)
assertFalse(result.isError == true)
assertEquals(EmptyJsonObject, result._meta)
}
@Test
fun testOkWithMeta() {
val content = "TextMessageWithMeta"
val meta = buildJsonObject {
put("key1", JsonPrimitive("value1"))
put("key2", JsonPrimitive(42))
}
val result = CallToolResult.Companion.ok(content, meta)
assertEquals(1, result.content.size)
assertEquals(content, (result.content[0] as TextContent).text)
assertFalse(result.isError == true)
assertEquals(meta, result._meta)
}
@Test
fun testErrorWithOnlyText() {
val content = "ErrorMessage"
val result = CallToolResult.Companion.error(content)
assertEquals(1, result.content.size)
assertEquals(content, (result.content[0] as TextContent).text)
assertTrue(result.isError == true)
assertEquals(EmptyJsonObject, result._meta)
}
@Test
fun testErrorWithMeta() {
val content = "ErrorMessageWithMeta"
val meta = buildJsonObject {
put("errorCode", JsonPrimitive(404))
put("errorDetail", JsonPrimitive("资源未找到"))
}
val result = CallToolResult.Companion.error(content, meta)
assertEquals(1, result.content.size)
assertEquals(content, (result.content[0] as TextContent).text)
assertTrue(result.isError == true)
assertEquals(meta, result._meta)
}
}