Skip to content

Commit 129731c

Browse files
Stream29e5l
andauthored
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 <[email protected]>
1 parent d7b31aa commit 129731c

File tree

3 files changed

+92
-1
lines changed

3 files changed

+92
-1
lines changed

api/kotlin-sdk.api

+7
Original file line numberDiff line numberDiff line change
@@ -2492,6 +2492,13 @@ public final class io/modelcontextprotocol/kotlin/sdk/TypesKt {
24922492
public static final fun getSUPPORTED_PROTOCOL_VERSIONS ()[Ljava/lang/String;
24932493
}
24942494

2495+
public final class io/modelcontextprotocol/kotlin/sdk/Types_utilKt {
2496+
public static final fun error (Lio/modelcontextprotocol/kotlin/sdk/CallToolResult$Companion;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/CallToolResult;
2497+
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;
2498+
public static final fun ok (Lio/modelcontextprotocol/kotlin/sdk/CallToolResult$Companion;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/CallToolResult;
2499+
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;
2500+
}
2501+
24952502
public final class io/modelcontextprotocol/kotlin/sdk/UnknownContent : io/modelcontextprotocol/kotlin/sdk/PromptMessageContentTextOrImage {
24962503
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/UnknownContent$Companion;
24972504
public fun <init> (Ljava/lang/String;)V

src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types.util.kt

+21-1
Original file line numberDiff line numberDiff line change
@@ -294,4 +294,24 @@ public class RequestIdSerializer : KSerializer<RequestId> {
294294
is RequestId.NumberId -> jsonEncoder.encodeLong(value.value)
295295
}
296296
}
297-
}
297+
}
298+
299+
/**
300+
* Creates a [CallToolResult] with single [TextContent] and [meta].
301+
*/
302+
public fun CallToolResult.Companion.ok(content: String, meta: JsonObject = EmptyJsonObject): CallToolResult =
303+
CallToolResult(
304+
content = listOf(TextContent(content)),
305+
isError = false,
306+
_meta = meta
307+
)
308+
309+
/**
310+
* Creates a [CallToolResult] with single [TextContent] and [meta], with `isError` being true.
311+
*/
312+
public fun CallToolResult.Companion.error(content: String, meta: JsonObject = EmptyJsonObject): CallToolResult =
313+
CallToolResult(
314+
content = listOf(TextContent(content)),
315+
isError = true,
316+
_meta = meta
317+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package io.modelcontextprotocol.kotlin.sdk
2+
3+
import kotlinx.serialization.json.JsonPrimitive
4+
import kotlinx.serialization.json.buildJsonObject
5+
import kotlin.test.Test
6+
import kotlin.test.assertEquals
7+
import kotlin.test.assertFalse
8+
import kotlin.test.assertTrue
9+
10+
class CallToolResultUtilsTest {
11+
12+
@Test
13+
fun testOkWithOnlyText() {
14+
val content = "TextMessage"
15+
val result = CallToolResult.Companion.ok(content)
16+
17+
assertEquals(1, result.content.size)
18+
assertEquals(content, (result.content[0] as TextContent).text)
19+
assertFalse(result.isError == true)
20+
assertEquals(EmptyJsonObject, result._meta)
21+
}
22+
23+
@Test
24+
fun testOkWithMeta() {
25+
val content = "TextMessageWithMeta"
26+
val meta = buildJsonObject {
27+
put("key1", JsonPrimitive("value1"))
28+
put("key2", JsonPrimitive(42))
29+
}
30+
val result = CallToolResult.Companion.ok(content, meta)
31+
32+
assertEquals(1, result.content.size)
33+
assertEquals(content, (result.content[0] as TextContent).text)
34+
assertFalse(result.isError == true)
35+
assertEquals(meta, result._meta)
36+
}
37+
38+
@Test
39+
fun testErrorWithOnlyText() {
40+
val content = "ErrorMessage"
41+
val result = CallToolResult.Companion.error(content)
42+
43+
assertEquals(1, result.content.size)
44+
assertEquals(content, (result.content[0] as TextContent).text)
45+
assertTrue(result.isError == true)
46+
assertEquals(EmptyJsonObject, result._meta)
47+
}
48+
49+
@Test
50+
fun testErrorWithMeta() {
51+
val content = "ErrorMessageWithMeta"
52+
val meta = buildJsonObject {
53+
put("errorCode", JsonPrimitive(404))
54+
put("errorDetail", JsonPrimitive("资源未找到"))
55+
}
56+
val result = CallToolResult.Companion.error(content, meta)
57+
58+
assertEquals(1, result.content.size)
59+
assertEquals(content, (result.content[0] as TextContent).text)
60+
assertTrue(result.isError == true)
61+
assertEquals(meta, result._meta)
62+
}
63+
}
64+

0 commit comments

Comments
 (0)