Skip to content

Commit 8bdbd36

Browse files
authored
Add backwards compatibility constructors and tests (#395)
- Updated integration tests to include assertions for `meta` being `null` in the `listTools`, `listResources`, `readResource`, and `callTool` results. - Renamed test cases in `SseServerIntegrationTest` for clarity. - Added (deprecated) synthetic constructors for various request parameter classes. - Enhanced naming conventions and structure in integration test cases. - Replaced `throw Error(...)` with `error(...)` for cleaner error handling. ## Motivation and Context To verify backwards-compatibility after schema change ## How Has This Been Tested? CI, integration tests, regression tests (samples) ## Breaking Changes <!-- Will users need to update their code or configurations? --> ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update - [x] Test update ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply. --> - [x] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [x] My code follows the repository's style guidelines - [ ] New and existing tests pass locally - [ ] I have added appropriate error handling - [ ] I have added or updated documentation as needed ## Additional context <!-- Add any other context, implementation notes, or design decisions -->
1 parent 31fd6d9 commit 8bdbd36

File tree

11 files changed

+250
-71
lines changed

11 files changed

+250
-71
lines changed

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

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -938,6 +938,8 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/CommonKt {
938938

939939
public final class io/modelcontextprotocol/kotlin/sdk/types/CompleteRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest {
940940
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/CompleteRequest$Companion;
941+
public synthetic fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/CompleteRequestParams$Argument;Lio/modelcontextprotocol/kotlin/sdk/types/Reference;Lio/modelcontextprotocol/kotlin/sdk/types/CompleteRequestParams$Context;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
942+
public synthetic fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/CompleteRequestParams$Argument;Lio/modelcontextprotocol/kotlin/sdk/types/Reference;Lio/modelcontextprotocol/kotlin/sdk/types/CompleteRequestParams$Context;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
941943
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/CompleteRequestParams;)V
942944
public final fun component1 ()Lio/modelcontextprotocol/kotlin/sdk/types/CompleteRequestParams;
943945
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/CompleteRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/CompleteRequest;
@@ -2057,12 +2059,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ListPromptsRequest :
20572059
public fun <init> ()V
20582060
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;)V
20592061
public synthetic fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2062+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2063+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
20602064
public final fun component1 ()Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;
20612065
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/ListPromptsRequest;
20622066
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/ListPromptsRequest;Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ListPromptsRequest;
20632067
public fun equals (Ljava/lang/Object;)Z
2064-
public final fun getCursor ()Ljava/lang/String;
2065-
public final fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
2068+
public fun getCursor ()Ljava/lang/String;
2069+
public fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
20662070
public fun getMethod ()Lio/modelcontextprotocol/kotlin/sdk/types/Method;
20672071
public fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;
20682072
public synthetic fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/RequestParams;
@@ -2123,12 +2127,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ListResourceTemplate
21232127
public fun <init> ()V
21242128
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;)V
21252129
public synthetic fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2130+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2131+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
21262132
public final fun component1 ()Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;
21272133
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/ListResourceTemplatesRequest;
21282134
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/ListResourceTemplatesRequest;Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ListResourceTemplatesRequest;
21292135
public fun equals (Ljava/lang/Object;)Z
2130-
public final fun getCursor ()Ljava/lang/String;
2131-
public final fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
2136+
public fun getCursor ()Ljava/lang/String;
2137+
public fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
21322138
public fun getMethod ()Lio/modelcontextprotocol/kotlin/sdk/types/Method;
21332139
public fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;
21342140
public synthetic fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/RequestParams;
@@ -2189,12 +2195,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ListResourcesRequest
21892195
public fun <init> ()V
21902196
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;)V
21912197
public synthetic fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2198+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2199+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
21922200
public final fun component1 ()Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;
21932201
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/ListResourcesRequest;
21942202
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/ListResourcesRequest;Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ListResourcesRequest;
21952203
public fun equals (Ljava/lang/Object;)Z
2196-
public final fun getCursor ()Ljava/lang/String;
2197-
public final fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
2204+
public fun getCursor ()Ljava/lang/String;
2205+
public fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
21982206
public fun getMethod ()Lio/modelcontextprotocol/kotlin/sdk/types/Method;
21992207
public fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;
22002208
public synthetic fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/RequestParams;
@@ -2255,6 +2263,7 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ListRootsRequest : i
22552263
public fun <init> ()V
22562264
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/BaseRequestParams;)V
22572265
public synthetic fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/BaseRequestParams;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2266+
public synthetic fun <init> (Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
22582267
public final fun component1 ()Lio/modelcontextprotocol/kotlin/sdk/types/BaseRequestParams;
22592268
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/BaseRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/ListRootsRequest;
22602269
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/ListRootsRequest;Lio/modelcontextprotocol/kotlin/sdk/types/BaseRequestParams;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ListRootsRequest;
@@ -2318,12 +2327,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ListToolsRequest : i
23182327
public fun <init> ()V
23192328
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;)V
23202329
public synthetic fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2330+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
2331+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
23212332
public final fun component1 ()Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;
23222333
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/ListToolsRequest;
23232334
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/ListToolsRequest;Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ListToolsRequest;
23242335
public fun equals (Ljava/lang/Object;)Z
2325-
public final fun getCursor ()Ljava/lang/String;
2326-
public final fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
2336+
public fun getCursor ()Ljava/lang/String;
2337+
public fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
23272338
public fun getMethod ()Lio/modelcontextprotocol/kotlin/sdk/types/Method;
23282339
public fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;
23292340
public synthetic fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/RequestParams;
@@ -2641,13 +2652,20 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/NotificationParams$D
26412652

26422653
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest : io/modelcontextprotocol/kotlin/sdk/types/Request {
26432654
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest$Companion;
2655+
public fun getCursor ()Ljava/lang/String;
2656+
public fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
26442657
public abstract fun getParams ()Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams;
26452658
}
26462659

26472660
public final class io/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest$Companion {
26482661
public final fun serializer ()Lkotlinx/serialization/KSerializer;
26492662
}
26502663

2664+
public final class io/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest$DefaultImpls {
2665+
public static fun getCursor (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest;)Ljava/lang/String;
2666+
public static fun getMeta-VI-3G7E (Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest;)Lkotlinx/serialization/json/JsonObject;
2667+
}
2668+
26512669
public final class io/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams : io/modelcontextprotocol/kotlin/sdk/types/RequestParams {
26522670
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequestParams$Companion;
26532671
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
@@ -3023,6 +3041,8 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/RPCError$ErrorCode {
30233041
public final class io/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest {
30243042
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequest$Companion;
30253043
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequestParams;)V
3044+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
3045+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
30263046
public final fun component1 ()Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequestParams;
30273047
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/ReadResourceRequest;
30283048
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;
@@ -3906,6 +3926,8 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/StopReason$Companion
39063926
public final class io/modelcontextprotocol/kotlin/sdk/types/SubscribeRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest {
39073927
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequest$Companion;
39083928
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequestParams;)V
3929+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
3930+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
39093931
public final fun component1 ()Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequestParams;
39103932
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequest;
39113933
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequest;Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequestParams;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequest;
@@ -4219,6 +4241,8 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/UnknownResourceConte
42194241
public final class io/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest {
42204242
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequest$Companion;
42214243
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequestParams;)V
4244+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
4245+
public synthetic fun <init> (Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
42224246
public final fun component1 ()Lio/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequestParams;
42234247
public final fun copy (Lio/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequestParams;)Lio/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequest;
42244248
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequest;Lio/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequestParams;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequest;

kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/shared/Protocol.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ public abstract class Protocol(@PublishedApi internal val options: ProtocolOptio
397397
public suspend fun <T : RequestResult> request(request: Request, options: RequestOptions? = null): T {
398398
logger.trace { "Sending request: ${request.method}" }
399399
val result = CompletableDeferred<T>()
400-
val transport = transport ?: throw Error("Not connected")
400+
val transport = transport ?: error("Not connected")
401401

402402
if (this@Protocol.options?.enforceStrictCapabilities == true) {
403403
assertCapabilityForMethod(request.method)

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

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package io.modelcontextprotocol.kotlin.sdk.types
22

3+
import io.modelcontextprotocol.kotlin.sdk.types.CompleteRequestParams.Argument
4+
import io.modelcontextprotocol.kotlin.sdk.types.CompleteRequestParams.Context
35
import kotlinx.serialization.EncodeDefault
46
import kotlinx.serialization.ExperimentalSerializationApi
57
import kotlinx.serialization.SerialName
@@ -20,7 +22,7 @@ public data class CompleteRequest(override val params: CompleteRequestParams) :
2022
/**
2123
* The argument's information for which completion options are requested.
2224
*/
23-
public val argument: CompleteRequestParams.Argument
25+
public val argument: Argument
2426
get() = params.argument
2527

2628
/**
@@ -32,11 +34,23 @@ public data class CompleteRequest(override val params: CompleteRequestParams) :
3234
/**
3335
* Additional, context for generating completions.
3436
*/
35-
public val context: CompleteRequestParams.Context?
37+
public val context: Context?
3638
get() = params.context
3739

3840
public val meta: RequestMeta?
3941
get() = params.meta
42+
43+
@Deprecated(
44+
message = "Will be removed in a future release.",
45+
replaceWith = ReplaceWith(expression = "CompleteRequest(CompleteRequestParams(argument, ref, context, meta))"),
46+
level = DeprecationLevel.WARNING,
47+
)
48+
public constructor(
49+
argument: Argument,
50+
ref: Reference,
51+
context: Context? = null,
52+
meta: RequestMeta? = null,
53+
) : this(CompleteRequestParams(argument, ref, context, meta))
4054
}
4155

4256
/**
@@ -67,7 +81,7 @@ public data class CompleteRequestParams(
6781
/**
6882
* Additional context to help generate more relevant completions.
6983
*
70-
* @property arguments Previously-resolved variables in a URI template or prompt.
84+
* @property arguments Previously resolved variables in a URI template or prompt.
7185
* These can be used to provide context-aware completions.
7286
* For example, if completing a file path, this might contain the repository or directory context.
7387
*/
@@ -100,8 +114,8 @@ public data class CompleteResult(
100114
* This can exceed the number of values actually sent in the response,
101115
* indicating that pagination or filtering may be needed.
102116
* @property hasMore Indicates whether there are additional completion options beyond
103-
* those provided in the current response, even if the exact total is unknown.
104-
* Use this when the complete set of completions is too large to calculate upfront.
117+
* those provided in the current response, even if the exact total is unknown.
118+
* Use this when the complete set of completions is too large to calculate upfront.
105119
*/
106120
@Serializable
107121
public data class Completion(val values: List<String>, val total: Int? = null, val hasMore: Boolean? = null) {

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

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -205,16 +205,24 @@ public data class ListPromptsRequest(override val params: PaginatedRequestParams
205205
override val method: Method = Method.Defined.PromptsList
206206

207207
/**
208-
* An opaque token representing the current pagination position.
208+
* Secondary constructor for creating a [ListPromptsRequest] instance
209+
* using optional cursor and metadata parameters.
210+
*
211+
* This constructor simplifies the creation of the [ListPromptsRequest] by allowing a cursor
212+
* and metadata to be provided.
213+
*
214+
* @param cursor Optional cursor string to specify the starting point of the paginated request.
215+
* @param meta Optional metadata associated with the request.
209216
*/
210-
public val cursor: String?
211-
get() = params?.cursor
212-
213-
/**
214-
* Metadata for this request. May include a progressToken for out-of-band progress notifications.
215-
*/
216-
public val meta: RequestMeta?
217-
get() = params?.meta
217+
@Deprecated(
218+
message = "Use constructor with ListPromptsParams instead",
219+
replaceWith = ReplaceWith("ListPromptsRequest(ListPromptsParams(name, arguments, meta))"),
220+
level = DeprecationLevel.WARNING,
221+
)
222+
public constructor(
223+
cursor: String?,
224+
meta: RequestMeta? = null,
225+
) : this(paginatedRequestParams(cursor, meta))
218226
}
219227

220228
/**

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@ public value class RequestMeta(public val json: JsonObject) {
2727

2828
@Serializable
2929
public sealed interface RequestParams {
30+
/**
31+
* The `_meta` property/parameter is reserved by MCP
32+
* to allow clients and servers to attach additional metadata to their interactions.
33+
*
34+
* @see <a href="https://modelcontextprotocol.io/specification/2025-06-18/basic/index#meta">MCP specification</a>
35+
*/
3036
@SerialName("_meta")
3137
public val meta: RequestMeta?
3238
}
@@ -68,6 +74,18 @@ public sealed interface ServerRequest : Request
6874
@Serializable
6975
public sealed interface PaginatedRequest : Request {
7076
public override val params: PaginatedRequestParams?
77+
78+
/**
79+
* An opaque token representing the current pagination position.
80+
*/
81+
public val cursor: String?
82+
get() = params?.cursor
83+
84+
/**
85+
* Metadata for this request. May include a progressToken for out-of-band progress notifications.
86+
*/
87+
public val meta: RequestMeta?
88+
get() = params?.meta
7189
}
7290

7391
/**
@@ -114,3 +132,10 @@ public data class PaginatedRequestParams(
114132
@SerialName("_meta")
115133
override val meta: RequestMeta? = null,
116134
) : RequestParams
135+
136+
internal fun paginatedRequestParams(cursor: String?, meta: RequestMeta?): PaginatedRequestParams? =
137+
if (cursor == null && meta == null) {
138+
null
139+
} else {
140+
PaginatedRequestParams(cursor = cursor, meta = meta)
141+
}

0 commit comments

Comments
 (0)