Skip to content

Commit 51bc747

Browse files
committed
Add new helper properties to request types and update samples for compatibility
1 parent 2d8bc3e commit 51bc747

File tree

8 files changed

+71
-22
lines changed

8 files changed

+71
-22
lines changed

kotlin-sdk-core/api/kotlin-sdk-core.api

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,10 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/CallToolRequest : io
675675
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequest;
676676
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequest;Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequestParams;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequest;
677677
public fun equals (Ljava/lang/Object;)Z
678+
public final fun getArguments ()Lkotlinx/serialization/json/JsonObject;
679+
public final fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
678680
public fun getMethod ()Lio/modelcontextprotocol/kotlin/sdk/types/Method;
681+
public final fun getName ()Ljava/lang/String;
679682
public fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequestParams;
680683
public synthetic fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/RequestParams;
681684
public fun hashCode ()I
@@ -1502,7 +1505,10 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/GetPromptRequest : i
15021505
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequest;
15031506
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequest;Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequestParams;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequest;
15041507
public fun equals (Ljava/lang/Object;)Z
1508+
public final fun getArguments ()Ljava/util/Map;
1509+
public final fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
15051510
public fun getMethod ()Lio/modelcontextprotocol/kotlin/sdk/types/Method;
1511+
public final fun getName ()Ljava/lang/String;
15061512
public fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequestParams;
15071513
public synthetic fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/RequestParams;
15081514
public fun hashCode ()I
@@ -2944,9 +2950,11 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequest
29442950
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequest;
29452951
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequest;Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequestParams;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequest;
29462952
public fun equals (Ljava/lang/Object;)Z
2953+
public final fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
29472954
public fun getMethod ()Lio/modelcontextprotocol/kotlin/sdk/types/Method;
29482955
public fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequestParams;
29492956
public synthetic fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/RequestParams;
2957+
public final fun getUri ()Ljava/lang/String;
29502958
public fun hashCode ()I
29512959
public fun toString ()Ljava/lang/String;
29522960
}

kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/prompts.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,25 @@ public data class PromptReference(val name: String, val title: String? = null) :
112112
public data class GetPromptRequest(override val params: GetPromptRequestParams) : ClientRequest {
113113
@EncodeDefault
114114
override val method: Method = Method.Defined.PromptsGet
115+
116+
/**
117+
* The name of the prompt or prompt template to retrieve.
118+
*/
119+
public val name: String
120+
get() = params.name
121+
122+
/**
123+
* Arguments to use for templating the prompt.
124+
* Keys are argument names, values are the argument values to substitute.
125+
*/
126+
public val arguments: Map<String, String>?
127+
get() = params.arguments
128+
129+
/**
130+
* Metadata for this request. May include a progressToken for out-of-band progress notifications.
131+
*/
132+
public val meta: RequestMeta?
133+
get() = params.meta
115134
}
116135

117136
/**

kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/resources.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,18 @@ public data class ReadResourceRequestParams(
244244
public data class ReadResourceRequest(override val params: ReadResourceRequestParams) : ClientRequest {
245245
@EncodeDefault
246246
override val method: Method = Method.Defined.ResourcesRead
247+
248+
/**
249+
* The URI of the resource to read
250+
*/
251+
public val uri: String
252+
get() = params.uri
253+
254+
/**
255+
* Metadata for this request. May include a progressToken for out-of-band progress notifications.
256+
*/
257+
public val meta: RequestMeta?
258+
get() = params.meta
247259
}
248260

249261
/**

kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/tools.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,25 @@ public data class ToolAnnotations(
140140
public data class CallToolRequest(override val params: CallToolRequestParams) : ClientRequest {
141141
@EncodeDefault
142142
override val method: Method = Method.Defined.ToolsCall
143+
144+
/**
145+
* The name of the tool to invoke.
146+
*/
147+
public val name: String
148+
get() = params.name
149+
150+
/**
151+
* Arguments to pass to the tool. Keys are argument names, values are the argument values.
152+
* The structure must match the tool's input schema.
153+
*/
154+
public val arguments: JsonObject?
155+
get() = params.arguments
156+
157+
/**
158+
* Metadata for this request. May include a progressToken for out-of-band progress notifications.
159+
*/
160+
public val meta: RequestMeta?
161+
get() = params.meta
143162
}
144163

145164
/**

samples/kotlin-mcp-server/src/main/kotlin/io/modelcontextprotocol/sample/server/server.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,11 @@ fun configureServer(): Server {
6868
PromptMessage(
6969
role = Role.user,
7070
content = TextContent(
71-
"Develop a kotlin project named <name>${request.params.arguments?.get("Project Name")}</name>",
71+
"Develop a kotlin project named <name>${request.arguments?.get("Project Name")}</name>",
7272
),
7373
),
7474
),
75-
description = "Description for ${request.params.name}",
75+
description = "Description for ${request.name}",
7676
)
7777
}
7878

@@ -96,7 +96,7 @@ fun configureServer(): Server {
9696
) { request ->
9797
ReadResourceResult(
9898
contents = listOf(
99-
TextResourceContents("Placeholder content for ${request.params.uri}", request.params.uri, "text/html"),
99+
TextResourceContents("Placeholder content for ${request.uri}", request.uri, "text/html"),
100100
),
101101
)
102102
}

samples/kotlin-mcp-server/src/test/kotlin/SseServerIntegrationTest.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import io.modelcontextprotocol.kotlin.sdk.EmptyJsonObject
22
import io.modelcontextprotocol.kotlin.sdk.TextContent
33
import io.modelcontextprotocol.kotlin.sdk.client.Client
4-
import io.modelcontextprotocol.kotlin.sdk.types.ContentTypes
54
import kotlinx.coroutines.runBlocking
65
import kotlin.test.Test
76
import kotlin.test.assertEquals
@@ -39,6 +38,6 @@ class SseServerIntegrationTest {
3938
assertIs<TextContent>(content, "Tool result should be a text content")
4039

4140
assertEquals(expected = "Hello, world!", actual = content.text)
42-
assertEquals(expected = ContentTypes.TEXT, actual = content.type)
41+
assertEquals(expected = "text", actual = "${content.type}".lowercase())
4342
}
4443
}

samples/weather-stdio-server/src/main/kotlin/io/modelcontextprotocol/sample/server/McpWeatherServer.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ fun runMcpServer() {
8282
required = listOf("state"),
8383
),
8484
) { request ->
85-
val state = request.arguments["state"]?.jsonPrimitive?.content ?: return@addTool CallToolResult(
85+
val state = request.arguments?.get("state")?.jsonPrimitive?.content ?: return@addTool CallToolResult(
8686
content = listOf(TextContent("The 'state' parameter is required.")),
8787
)
8888

@@ -109,8 +109,8 @@ fun runMcpServer() {
109109
required = listOf("latitude", "longitude"),
110110
),
111111
) { request ->
112-
val latitude = request.arguments["latitude"]?.jsonPrimitive?.doubleOrNull
113-
val longitude = request.arguments["longitude"]?.jsonPrimitive?.doubleOrNull
112+
val latitude = request.arguments?.get("latitude")?.jsonPrimitive?.doubleOrNull
113+
val longitude = request.arguments?.get("longitude")?.jsonPrimitive?.doubleOrNull
114114
if (latitude == null || longitude == null) {
115115
return@addTool CallToolResult(
116116
content = listOf(TextContent("The 'latitude' and 'longitude' parameters are required.")),

samples/weather-stdio-server/src/test/kotlin/io/modelcontextprotocol/sample/client/ClientStdio.kt

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.modelcontextprotocol.sample.client
22

3-
import io.modelcontextprotocol.kotlin.sdk.CallToolRequest
43
import io.modelcontextprotocol.kotlin.sdk.Implementation
54
import io.modelcontextprotocol.kotlin.sdk.TextContent
65
import io.modelcontextprotocol.kotlin.sdk.client.Client
@@ -9,9 +8,6 @@ import kotlinx.coroutines.runBlocking
98
import kotlinx.io.asSink
109
import kotlinx.io.asSource
1110
import kotlinx.io.buffered
12-
import kotlinx.serialization.json.JsonObject
13-
import kotlinx.serialization.json.JsonPrimitive
14-
import kotlinx.serialization.json.buildJsonObject
1511

1612
fun main(): Unit = runBlocking {
1713
val process = ProcessBuilder("java", "-jar", "./build/libs/weather-stdio-server-0.1.0-all.jar")
@@ -33,23 +29,19 @@ fun main(): Unit = runBlocking {
3329
println("Available Tools = $toolsList")
3430

3531
val weatherForecastResult = client.callTool(
36-
CallToolRequest(
37-
name = "get_forecast",
38-
arguments = buildJsonObject {
39-
put("latitude", JsonPrimitive(38.5816))
40-
put("longitude", JsonPrimitive(-121.4944))
41-
},
32+
name = "get_forecast",
33+
arguments = mapOf(
34+
"latitude" to 38.5816,
35+
"longitude" to -121.4944,
4236
),
4337
)?.content?.map { if (it is TextContent) it.text else it.toString() }
4438

4539
println("Weather Forcast: ${weatherForecastResult?.joinToString(separator = "\n", prefix = "\n", postfix = "\n")}")
4640

4741
val alertResult =
4842
client.callTool(
49-
CallToolRequest(
50-
name = "get_alerts",
51-
arguments = JsonObject(mapOf("state" to JsonPrimitive("TX"))),
52-
),
43+
name = "get_alert",
44+
arguments = mapOf("state" to "TX"),
5345
)?.content?.map { if (it is TextContent) it.text else it.toString() }
5446

5547
println("Alert Response = $alertResult")

0 commit comments

Comments
 (0)