feat: add URL mode elicitation and typed schema definitions per MCP (#660)

Add URL mode elicitation support and typed `PrimitiveSchemaDefinition`
hierarchy to align with MCP specification 2025-11-25

closes #540 

## How Has This Been Tested?
unit/integration/conformance

## Breaking Changes
- `ElicitRequestParams` changed from `data class` to `sealed interface`.
A deprecated factory function preserves source compatibility for
`ElicitRequestParams(message, requestedSchema)`.
- `RequestedSchema.properties` changed from `JsonObject` to `Map<String,
PrimitiveSchemaDefinition>`.
- `ElicitRequest.requestedSchema` is deprecated, use `(params as
ElicitRequestFormParams).requestedSchema`.

## Types of changes
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] New feature (non-breaking change which adds functionality)
- [x] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [x] I have added appropriate error handling
- [x] I have added or updated documentation as needed
This commit is contained in:
Pavel Gorgulov 2026-04-01 12:20:12 +02:00 • committed by GitHub
commit fdecf6bdf5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
15 changed files with 1838 additions and 384 deletions

View file

@ -9,7 +9,7 @@ set -uo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1; pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." || exit 1; pwd)"
CONFORMANCE_VERSION="0.1.15"
CONFORMANCE_VERSION="0.1.16"
PORT="${MCP_PORT:-3001}"
SERVER_URL="http://localhost:${PORT}/mcp"
RESULTS_DIR="$SCRIPT_DIR/results"

View file

@ -3,12 +3,17 @@ package io.modelcontextprotocol.kotlin.sdk.conformance
import io.github.oshai.kotlinlogging.KotlinLogging
import io.modelcontextprotocol.kotlin.sdk.server.Server
import io.modelcontextprotocol.kotlin.sdk.types.AudioContent
import io.modelcontextprotocol.kotlin.sdk.types.BooleanSchema
import io.modelcontextprotocol.kotlin.sdk.types.CallToolResult
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequest
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequestParams
import io.modelcontextprotocol.kotlin.sdk.types.DoubleSchema
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestParams
import io.modelcontextprotocol.kotlin.sdk.types.EmbeddedResource
import io.modelcontextprotocol.kotlin.sdk.types.EnumOption
import io.modelcontextprotocol.kotlin.sdk.types.ImageContent
import io.modelcontextprotocol.kotlin.sdk.types.IntegerSchema
import io.modelcontextprotocol.kotlin.sdk.types.LegacyTitledEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.LoggingLevel
import io.modelcontextprotocol.kotlin.sdk.types.LoggingMessageNotification
import io.modelcontextprotocol.kotlin.sdk.types.LoggingMessageNotificationParams
@ -16,11 +21,15 @@ import io.modelcontextprotocol.kotlin.sdk.types.ProgressNotification
import io.modelcontextprotocol.kotlin.sdk.types.ProgressNotificationParams
import io.modelcontextprotocol.kotlin.sdk.types.Role
import io.modelcontextprotocol.kotlin.sdk.types.SamplingMessage
import io.modelcontextprotocol.kotlin.sdk.types.StringSchema
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
import io.modelcontextprotocol.kotlin.sdk.types.TextResourceContents
import io.modelcontextprotocol.kotlin.sdk.types.TitledMultiSelectEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.TitledSingleSelectEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema
import io.modelcontextprotocol.kotlin.sdk.types.UntitledMultiSelectEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.UntitledSingleSelectEnumSchema
import kotlinx.coroutines.delay
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.double
@ -187,22 +196,10 @@ fun Server.registerConformanceTools() {
) { request ->
val message = request.arguments?.get("message")?.jsonPrimitive?.content ?: "Please provide input"
val schema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject {
put(
"username",
buildJsonObject {
put("type", JsonPrimitive("string"))
put("description", JsonPrimitive("User's response"))
},
)
put(
"email",
buildJsonObject {
put("type", JsonPrimitive("string"))
put("description", JsonPrimitive("User's email address"))
},
)
},
properties = mapOf(
"username" to StringSchema(description = "User's response"),
"email" to StringSchema(description = "User's email address"),
),
required = listOf("username", "email"),
)
val result = createElicitation(message, schema)
@ -215,54 +212,17 @@ fun Server.registerConformanceTools() {
description = "test_elicitation_sep1034_defaults",
) {
val schema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject {
put(
"name",
buildJsonObject {
put("type", JsonPrimitive("string"))
put("description", JsonPrimitive("User name"))
put("default", JsonPrimitive("John Doe"))
},
)
put(
"age",
buildJsonObject {
put("type", JsonPrimitive("integer"))
put("description", JsonPrimitive("User age"))
put("default", JsonPrimitive(30))
},
)
put(
"score",
buildJsonObject {
put("type", JsonPrimitive("number"))
put("description", JsonPrimitive("User score"))
put("default", JsonPrimitive(95.5))
},
)
put(
"status",
buildJsonObject {
put("type", JsonPrimitive("string"))
put("description", JsonPrimitive("User status"))
put("default", JsonPrimitive("active"))
put(
"enum",
JsonArray(
listOf(JsonPrimitive("active"), JsonPrimitive("inactive"), JsonPrimitive("pending")),
),
)
},
)
put(
"verified",
buildJsonObject {
put("type", JsonPrimitive("boolean"))
put("description", JsonPrimitive("Verification status"))
put("default", JsonPrimitive(true))
},
)
},
properties = mapOf(
"name" to StringSchema(description = "User name", default = "John Doe"),
"age" to IntegerSchema(description = "User age", default = 30),
"score" to DoubleSchema(description = "User score", default = 95.5),
"status" to UntitledSingleSelectEnumSchema(
description = "User status",
enumValues = listOf("active", "inactive", "pending"),
default = "active",
),
"verified" to BooleanSchema(description = "Verification status", default = true),
),
required = listOf("name", "age", "score", "status", "verified"),
)
val result = createElicitation(
@ -278,122 +238,43 @@ fun Server.registerConformanceTools() {
description = "test_elicitation_sep1330_enums",
) {
val schema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject {
properties = mapOf(
// Untitled single-select
put(
"untitledSingle",
buildJsonObject {
put("type", JsonPrimitive("string"))
put(
"enum",
JsonArray(
listOf(JsonPrimitive("option1"), JsonPrimitive("option2"), JsonPrimitive("option3")),
),
)
},
)
"untitledSingle" to UntitledSingleSelectEnumSchema(
enumValues = listOf("option1", "option2", "option3"),
),
// Titled single-select
put(
"titledSingle",
buildJsonObject {
put("type", JsonPrimitive("string"))
put(
"oneOf",
JsonArray(
listOf(
buildJsonObject {
put("const", JsonPrimitive("value1"))
put("title", JsonPrimitive("First Option"))
},
buildJsonObject {
put("const", JsonPrimitive("value2"))
put("title", JsonPrimitive("Second Option"))
},
buildJsonObject {
put("const", JsonPrimitive("value3"))
put("title", JsonPrimitive("Third Option"))
},
),
),
)
},
)
// Legacy titled (deprecated) - uses enum + enumNames arrays
put(
"legacyEnum",
buildJsonObject {
put("type", JsonPrimitive("string"))
put(
"enum",
JsonArray(listOf(JsonPrimitive("opt1"), JsonPrimitive("opt2"), JsonPrimitive("opt3"))),
)
put(
"enumNames",
JsonArray(
listOf(
JsonPrimitive("Option One"),
JsonPrimitive("Option Two"),
JsonPrimitive("Option Three"),
),
),
)
},
)
"titledSingle" to TitledSingleSelectEnumSchema(
oneOf = listOf(
EnumOption(const = "value1", title = "First Option"),
EnumOption(const = "value2", title = "Second Option"),
EnumOption(const = "value3", title = "Third Option"),
),
),
// Legacy titled (deprecated) — uses enum + enumNames
@Suppress("DEPRECATION")
"legacyEnum"
to LegacyTitledEnumSchema(
enumValues = listOf("opt1", "opt2", "opt3"),
enumNames = listOf("Option One", "Option Two", "Option Three"),
),
// Untitled multi-select
put(
"untitledMulti",
buildJsonObject {
put("type", JsonPrimitive("array"))
put(
"items",
buildJsonObject {
put("type", JsonPrimitive("string"))
put(
"enum",
JsonArray(
listOf(
JsonPrimitive("option1"),
JsonPrimitive("option2"),
JsonPrimitive("option3"),
),
),
)
},
)
},
)
// Titled multi-select - uses items.anyOf with const/title pairs
put(
"titledMulti",
buildJsonObject {
put("type", JsonPrimitive("array"))
put(
"items",
buildJsonObject {
put(
"anyOf",
JsonArray(
listOf(
buildJsonObject {
put("const", JsonPrimitive("value1"))
put("title", JsonPrimitive("First Choice"))
},
buildJsonObject {
put("const", JsonPrimitive("value2"))
put("title", JsonPrimitive("Second Choice"))
},
buildJsonObject {
put("const", JsonPrimitive("value3"))
put("title", JsonPrimitive("Third Choice"))
},
),
),
)
},
)
},
)
},
"untitledMulti" to UntitledMultiSelectEnumSchema(
items = UntitledMultiSelectEnumSchema.Items(
enumValues = listOf("option1", "option2", "option3"),
),
),
// Titled multi-select
"titledMulti" to TitledMultiSelectEnumSchema(
items = TitledMultiSelectEnumSchema.Items(
anyOf = listOf(
EnumOption(const = "value1", title = "First Choice"),
EnumOption(const = "value2", title = "Second Choice"),
EnumOption(const = "value3", title = "Third Choice"),
),
),
),
),
)
val result = createElicitation(
"Please review and update the form fields with defaults",
@ -538,54 +419,17 @@ fun Server.registerConformanceTools() {
description = "test_client_elicitation_defaults",
) {
val schema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject {
put(
"name",
buildJsonObject {
put("type", JsonPrimitive("string"))
put("description", JsonPrimitive("User name"))
put("default", JsonPrimitive("John Doe"))
},
)
put(
"age",
buildJsonObject {
put("type", JsonPrimitive("integer"))
put("description", JsonPrimitive("User age"))
put("default", JsonPrimitive(30))
},
)
put(
"score",
buildJsonObject {
put("type", JsonPrimitive("number"))
put("description", JsonPrimitive("User score"))
put("default", JsonPrimitive(95.5))
},
)
put(
"status",
buildJsonObject {
put("type", JsonPrimitive("string"))
put("description", JsonPrimitive("User status"))
put("default", JsonPrimitive("active"))
put(
"enum",
JsonArray(
listOf(JsonPrimitive("active"), JsonPrimitive("inactive"), JsonPrimitive("pending")),
),
)
},
)
put(
"verified",
buildJsonObject {
put("type", JsonPrimitive("boolean"))
put("description", JsonPrimitive("Verification status"))
put("default", JsonPrimitive(true))
},
)
},
properties = mapOf(
"name" to StringSchema(description = "User name", default = "John Doe"),
"age" to IntegerSchema(description = "User age", default = 30),
"score" to DoubleSchema(description = "User score", default = 95.5),
"status" to UntitledSingleSelectEnumSchema(
description = "User status",
enumValues = listOf("active", "inactive", "pending"),
default = "active",
),
"verified" to BooleanSchema(description = "Verification status", default = true),
),
required = emptyList(),
)
val result = createElicitation(

View file

@ -10,6 +10,7 @@ import io.modelcontextprotocol.kotlin.sdk.shared.TransportSendOptions
import io.modelcontextprotocol.kotlin.sdk.types.ClientCapabilities
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequest
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageResult
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestFormParams
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestParams
import io.modelcontextprotocol.kotlin.sdk.types.ElicitResult
import io.modelcontextprotocol.kotlin.sdk.types.EmptyJsonObject
@ -35,6 +36,7 @@ import io.modelcontextprotocol.kotlin.sdk.types.Root
import io.modelcontextprotocol.kotlin.sdk.types.RootsListChangedNotification
import io.modelcontextprotocol.kotlin.sdk.types.SUPPORTED_PROTOCOL_VERSIONS
import io.modelcontextprotocol.kotlin.sdk.types.ServerCapabilities
import io.modelcontextprotocol.kotlin.sdk.types.StringSchema
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
import io.modelcontextprotocol.kotlin.sdk.types.Tool
import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema
@ -48,7 +50,6 @@ import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.withTimeout
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put
import kotlinx.serialization.json.putJsonObject
import kotlin.coroutines.cancellation.CancellationException
import kotlin.test.Test
import kotlin.test.assertEquals
@ -953,11 +954,7 @@ class ClientTest {
serverSession.createElicitation(
message = "Please provide your GitHub username",
requestedSchema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject {
putJsonObject("name") {
put("type", "string")
}
},
properties = mapOf("name" to StringSchema()),
required = listOf("name"),
),
)
@ -1061,11 +1058,7 @@ class ClientTest {
val elicitationMessage = "Please provide your GitHub username"
val requestedSchema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject {
putJsonObject("name") {
put("type", "string")
}
},
properties = mapOf("name" to StringSchema()),
required = listOf("name"),
)
@ -1076,7 +1069,8 @@ class ClientTest {
client.setElicitationHandler { request ->
assertEquals(elicitationMessage, request.params.message)
assertEquals(requestedSchema, request.params.requestedSchema)
val formParams = request.params as ElicitRequestFormParams
assertEquals(requestedSchema, formParams.requestedSchema)
ElicitResult(
action = elicitationResultAction,

View file

@ -336,6 +336,40 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/BlobResourceContents
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/BooleanSchema : io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema$Companion;
public fun <init> ()V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/Boolean;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/lang/Boolean;
public final fun getDescription ()Ljava/lang/String;
public final fun getTitle ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/BooleanSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/BooleanSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/CallToolRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequest$Companion;
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequestParams;)V
@ -1134,6 +1168,44 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/CustomRequest$Compan
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/DoubleSchema : io/modelcontextprotocol/kotlin/sdk/types/NumberSchemaDefinition {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema$Companion;
public fun <init> ()V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/Double;
public final fun component4 ()Ljava/lang/Double;
public final fun component5 ()Ljava/lang/Double;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;)Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/lang/Double;
public final fun getDescription ()Ljava/lang/String;
public final fun getMaximum ()Ljava/lang/Double;
public final fun getMinimum ()Ljava/lang/Double;
public final fun getTitle ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/DoubleSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/DoubleSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequest : io/modelcontextprotocol/kotlin/sdk/types/ServerRequest {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest$Companion;
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;)V
@ -1176,49 +1248,63 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestBuilder
public final fun setMessage (Ljava/lang/String;)V
}
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams : io/modelcontextprotocol/kotlin/sdk/types/RequestParams {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$Companion;
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams : io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams$Companion;
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
public final fun component3-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
public final fun copy-EDEVuBg (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;
public static synthetic fun copy-EDEVuBg$default (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;
public final fun component2 ()Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;
public final fun component3 ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
public final fun component4-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
public final fun copy-6R815Ik (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;
public static synthetic fun copy-6R815Ik$default (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;
public fun equals (Ljava/lang/Object;)Z
public final fun getMessage ()Ljava/lang/String;
public fun getMessage ()Ljava/lang/String;
public fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
public final fun getMode ()Ljava/lang/String;
public final fun getRequestedSchema ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
public final fun getTask ()Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$$serializer;
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;)V
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams : io/modelcontextprotocol/kotlin/sdk/types/RequestParams {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$Companion;
public abstract fun getMessage ()Ljava/lang/String;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema$Companion;
public fun <init> (Lkotlinx/serialization/json/JsonObject;Ljava/util/List;)V
public synthetic fun <init> (Lkotlinx/serialization/json/JsonObject;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lkotlinx/serialization/json/JsonObject;
public final fun component2 ()Ljava/util/List;
public final fun copy (Lkotlinx/serialization/json/JsonObject;Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
public fun <init> (Ljava/lang/String;Ljava/util/Map;Ljava/util/List;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/util/Map;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/util/Map;
public final fun component3 ()Ljava/util/List;
public final fun copy (Ljava/lang/String;Ljava/util/Map;Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Ljava/lang/String;Ljava/util/Map;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
public fun equals (Ljava/lang/Object;)Z
public final fun getProperties ()Lkotlinx/serialization/json/JsonObject;
public final fun getProperties ()Ljava/util/Map;
public final fun getRequired ()Ljava/util/List;
public final fun getSchema ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
@ -1239,6 +1325,43 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams : io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams$Companion;
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/String;
public final fun component4 ()Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;
public final fun component5-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
public final fun copy-4asOmiE (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams;
public static synthetic fun copy-4asOmiE$default (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams;
public fun equals (Ljava/lang/Object;)Z
public final fun getElicitationId ()Ljava/lang/String;
public fun getMessage ()Ljava/lang/String;
public fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
public final fun getMode ()Ljava/lang/String;
public final fun getTask ()Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;
public final fun getUrl ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestedSchemaBuilder {
public fun <init> ()V
public final fun build ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
@ -1294,6 +1417,11 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitResult$Compani
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitationKt {
public static final fun ElicitRequestParams-EDEVuBg (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;
public static synthetic fun ElicitRequestParams-EDEVuBg$default (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/Elicitation_dslKt {
public static final fun buildElicitRequest (Lkotlin/jvm/functions/Function1;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest;
}
@ -1360,6 +1488,43 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/EmptyResult$Companio
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/EnumOption {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption$Companion;
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption;
public fun equals (Ljava/lang/Object;)Z
public final fun getConst ()Ljava/lang/String;
public final fun getTitle ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/EnumOption$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/EnumOption$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition : io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition$Companion;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/GetPromptRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequest$Companion;
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequestParams;)V
@ -1955,6 +2120,44 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/InitializedNotificat
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/IntegerSchema : io/modelcontextprotocol/kotlin/sdk/types/NumberSchemaDefinition {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema$Companion;
public fun <init> ()V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/Integer;
public final fun component4 ()Ljava/lang/Integer;
public final fun component5 ()Ljava/lang/Integer;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;)Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/lang/Integer;
public final fun getDescription ()Ljava/lang/String;
public final fun getMaximum ()Ljava/lang/Integer;
public final fun getMinimum ()Ljava/lang/Integer;
public final fun getTitle ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/IntegerSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/IntegerSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/JSONRPCEmptyMessage : io/modelcontextprotocol/kotlin/sdk/types/JSONRPCMessage {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/JSONRPCEmptyMessage;
public fun equals (Ljava/lang/Object;)Z
@ -2119,6 +2322,43 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/JsonUtilsKt {
public static final fun toJson (Ljava/util/Map;)Ljava/util/Map;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema$Companion;
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/util/List;
public final fun component4 ()Ljava/util/List;
public final fun component5 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/lang/String;
public final fun getDescription ()Ljava/lang/String;
public final fun getEnumNames ()Ljava/util/List;
public final fun getEnumValues ()Ljava/util/List;
public final fun getTitle ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/ListPromptsRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest, io/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ListPromptsRequest$Companion;
public fun <init> ()V
@ -2796,6 +3036,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ModelPreferences$Com
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/MultiSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/MultiSelectEnumSchema$Companion;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/MultiSelectEnumSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/Notification {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/Notification$Companion;
public abstract fun getMethod ()Lio/modelcontextprotocol/kotlin/sdk/types/Method;
@ -2814,6 +3062,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/NotificationParams$C
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/NumberSchemaDefinition : io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/NumberSchemaDefinition$Companion;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/NumberSchemaDefinition$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest : io/modelcontextprotocol/kotlin/sdk/types/Request {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest$Companion;
public fun getCursor ()Ljava/lang/String;
@ -2917,6 +3173,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/PingRequest_dslKt {
public static final fun buildPingRequest (Lkotlin/jvm/functions/Function1;)Lio/modelcontextprotocol/kotlin/sdk/types/PingRequest;
}
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition$Companion;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/Progress {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/Progress$Companion;
public fun <init> (DLjava/lang/Double;Ljava/lang/String;)V
@ -4141,6 +4405,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/SetLevelRequestParam
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/SingleSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/SingleSelectEnumSchema$Companion;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/SingleSelectEnumSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/StopReason {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/StopReason$Companion;
public static final synthetic fun box-impl (Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/StopReason;
@ -4174,6 +4446,61 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/StopReason$Companion
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/StringSchema : io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema$Companion;
public fun <init> ()V
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/Integer;
public final fun component4 ()Ljava/lang/Integer;
public final fun component5 ()Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
public final fun component6 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/lang/String;
public final fun getDescription ()Ljava/lang/String;
public final fun getFormat ()Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
public final fun getMaxLength ()Ljava/lang/Integer;
public final fun getMinLength ()Ljava/lang/Integer;
public final fun getTitle ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/StringSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/StringSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat : java/lang/Enum {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat$Companion;
public static final field Date Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
public static final field DateTime Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
public static final field Email Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
public static final field Uri Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
public static fun getEntries ()Lkotlin/enums/EnumEntries;
public static fun valueOf (Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
public static fun values ()[Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/SubscribeRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequest$Companion;
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequestParams;)V
@ -4503,6 +4830,107 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/TextResourceContents
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/MultiSelectEnumSchema {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Companion;
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;Ljava/util/List;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/Integer;
public final fun component4 ()Ljava/lang/Integer;
public final fun component5 ()Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;
public final fun component6 ()Ljava/util/List;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/util/List;
public final fun getDescription ()Ljava/lang/String;
public final fun getItems ()Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;
public final fun getMaxItems ()Ljava/lang/Integer;
public final fun getMinItems ()Ljava/lang/Integer;
public final fun getTitle ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items$Companion;
public fun <init> (Ljava/util/List;)V
public final fun component1 ()Ljava/util/List;
public final fun copy (Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;
public fun equals (Ljava/lang/Object;)Z
public final fun getAnyOf ()Ljava/util/List;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/SingleSelectEnumSchema {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema$Companion;
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/util/List;
public final fun component4 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/lang/String;
public final fun getDescription ()Ljava/lang/String;
public final fun getOneOf ()Ljava/util/List;
public final fun getTitle ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/Tool : io/modelcontextprotocol/kotlin/sdk/types/WithMeta {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/Tool$Companion;
public fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ToolSchema;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ToolSchema;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ToolAnnotations;Ljava/util/List;Lio/modelcontextprotocol/kotlin/sdk/types/ToolExecution;Lkotlinx/serialization/json/JsonObject;)V
@ -4793,6 +5221,108 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequestPa
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/MultiSelectEnumSchema {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Companion;
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;Ljava/util/List;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/lang/Integer;
public final fun component4 ()Ljava/lang/Integer;
public final fun component5 ()Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;
public final fun component6 ()Ljava/util/List;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/util/List;
public final fun getDescription ()Ljava/lang/String;
public final fun getItems ()Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;
public final fun getMaxItems ()Ljava/lang/Integer;
public final fun getMinItems ()Ljava/lang/Integer;
public final fun getTitle ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items$Companion;
public fun <init> (Ljava/util/List;)V
public final fun component1 ()Ljava/util/List;
public final fun copy (Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;
public fun equals (Ljava/lang/Object;)Z
public final fun getEnumValues ()Ljava/util/List;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/SingleSelectEnumSchema {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema$Companion;
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/lang/String;
public final fun component3 ()Ljava/util/List;
public final fun component4 ()Ljava/lang/String;
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema;
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema;
public fun equals (Ljava/lang/Object;)Z
public final fun getDefault ()Ljava/lang/String;
public final fun getDescription ()Ljava/lang/String;
public final fun getEnumValues ()Ljava/util/List;
public final fun getTitle ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema;
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema;)V
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
}
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer;
}
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/WithMeta {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/WithMeta$Companion;
public abstract fun getMeta ()Lkotlinx/serialization/json/JsonObject;

View file

@ -4,6 +4,7 @@ import io.modelcontextprotocol.kotlin.sdk.ExperimentalMcpApi
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonObjectBuilder
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.decodeFromJsonElement
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind
import kotlin.contracts.contract
@ -223,6 +224,9 @@ public class ElicitRequestedSchemaBuilder @PublishedApi internal constructor() {
val properties = requireNotNull(properties) {
"Missing required field 'properties'. Use properties { put(\"fieldName\", schema) }"
}
return ElicitRequestParams.RequestedSchema(properties, required)
val typedProperties: Map<String, PrimitiveSchemaDefinition> = properties.mapValues { (_, value) ->
McpJson.decodeFromJsonElement<PrimitiveSchemaDefinition>(value)
}
return ElicitRequestParams.RequestedSchema(properties = typedProperties, required = required)
}
}

View file

@ -1,23 +1,20 @@
package io.modelcontextprotocol.kotlin.sdk.types
import kotlinx.serialization.EncodeDefault
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonObject
/**
* A request from the server to elicit additional information from the user via the client.
* Represents an `elicitation/create` request from the server to the client.
*
* This request type allows servers to prompt users for structured input through forms
* or dialogs presented by the client. The server defines a schema for the requested data,
* and the client presents an appropriate UI to collect this information.
* Supports two modes: form mode ([ElicitRequestFormParams]) for collecting structured data
* in-band, and URL mode ([ElicitRequestURLParams]) for directing the user to an external URL.
*
* @property params The elicitation parameters including the message and requested schema.
* @property params The elicitation parameters — either form or URL mode.
*/
@Serializable
public data class ElicitRequest(override val params: ElicitRequestParams) : ServerRequest {
@OptIn(ExperimentalSerializationApi::class)
@EncodeDefault
public override val method: Method = Method.Defined.ElicitationCreate
@ -30,8 +27,13 @@ public data class ElicitRequest(override val params: ElicitRequestParams) : Serv
/**
* A restricted subset of JSON Schema defining the structure of the requested data.
*/
public val requestedSchema: ElicitRequestParams.RequestedSchema
get() = params.requestedSchema
@Deprecated(
"Use (params as ElicitRequestFormParams).requestedSchema",
ReplaceWith("(params as ElicitRequestFormParams).requestedSchema"),
DeprecationLevel.WARNING,
)
public val requestedSchema: ElicitRequestParams.RequestedSchema?
get() = (params as? ElicitRequestFormParams)?.requestedSchema
/**
* Metadata for this request. May include a progressToken for out-of-band progress notifications.
@ -41,23 +43,13 @@ public data class ElicitRequest(override val params: ElicitRequestParams) : Serv
}
/**
* Parameters for an elicitation/create request.
* Represents the parameters for an `elicitation/create` request.
*
* @property message The message to present to the user. This should clearly explain
* what information is being requested and why.
* @property requestedSchema A restricted subset of JSON Schema defining the structure
* of the requested data. Only top-level properties are allowed,
* without nesting.
* @property meta Optional metadata for this request. May include a progressToken for
* out-of-band progress notifications.
* Implementations: [ElicitRequestFormParams], [ElicitRequestURLParams].
*/
@Serializable
public data class ElicitRequestParams(
val message: String,
val requestedSchema: RequestedSchema,
@SerialName("_meta")
override val meta: RequestMeta? = null,
) : RequestParams {
@Serializable(with = ElicitRequestParamsSerializer::class)
public sealed interface ElicitRequestParams : RequestParams {
public val message: String
/**
* A restricted JSON Schema for elicitation requests.
@ -65,6 +57,7 @@ public data class ElicitRequestParams(
* Only supports top-level primitive properties without nesting. Each property
* represents a field in the form or dialog presented to the user.
*
* @property schema Optional URI to a JSON Schema definition.
* @property properties A map of property names to their schema definitions.
* Each property must be a primitive type (string, number, boolean).
* @property required Optional list of property names that must be provided by the user.
@ -72,24 +65,102 @@ public data class ElicitRequestParams(
* @property type Always "object" for elicitation schemas.
*/
@Serializable
public data class RequestedSchema(val properties: JsonObject, val required: List<String>? = null) {
@OptIn(ExperimentalSerializationApi::class)
public data class RequestedSchema(
@SerialName($$"$schema")
val schema: String? = null,
val properties: Map<String, PrimitiveSchemaDefinition>,
val required: List<String>? = null,
) {
@EncodeDefault
val type: String = "object"
}
}
/**
* The client's response to an [ElicitRequest].
* Creates an [ElicitRequestFormParams] for backwards compatibility.
*
* Represents the user's action and, if accepted, the submitted form data.
* @param message The message to present to the user.
* @param requestedSchema The JSON Schema for the requested data.
* @param meta Optional request metadata.
* @return A configured [ElicitRequestFormParams] instance.
*/
@Deprecated(
"Use ElicitRequestFormParams instead",
ReplaceWith("ElicitRequestFormParams(message, requestedSchema = requestedSchema, meta = meta)"),
DeprecationLevel.WARNING,
)
@Suppress("FunctionNaming", "FunctionName")
public fun ElicitRequestParams(
message: String,
requestedSchema: ElicitRequestParams.RequestedSchema,
meta: RequestMeta? = null,
): ElicitRequestFormParams = ElicitRequestFormParams(
message = message,
requestedSchema = requestedSchema,
meta = meta,
)
/**
* Represents form mode parameters for an `elicitation/create` request.
*
* @property action The user action in response to the elicitation prompt.
* @property content The submitted form data, only present when [action] is [Action.Accept].
* Contains values matching the requested schema, where keys correspond
* to property names and values are primitives (string, number, or boolean).
* Collects non-sensitive structured data from the user via a form presented by the client.
*
* @property message The message to present to the user describing what information is being requested.
* @property task If specified, the caller is requesting task-augmented execution. The request
* will return a [CreateTaskResult] immediately, and the actual result can be retrieved
* later via `tasks/result`.
* @property requestedSchema A restricted subset of JSON Schema. Only top-level properties
* are allowed, without nesting.
* @property meta Optional metadata. May include a progressToken for out-of-band progress notifications.
*/
@Serializable
public data class ElicitRequestFormParams(
override val message: String,
val task: TaskMetadata? = null,
val requestedSchema: ElicitRequestParams.RequestedSchema,
@SerialName("_meta")
override val meta: RequestMeta? = null,
) : ElicitRequestParams {
@EncodeDefault
public val mode: String = "form"
}
/**
* Represents URL mode parameters for an `elicitation/create` request.
*
* Directs the user to an external URL for out-of-band interactions (e.g., OAuth flows,
* payment processing, or entering sensitive credentials) that must not pass through the MCP client.
*
* @property message The message explaining why the interaction is needed.
* @property elicitationId A unique identifier for this elicitation. The client MUST treat
* this ID as an opaque value.
* @property url The URL that the user should navigate to.
* @property task If specified, the caller is requesting task-augmented execution. The request
* will return a [CreateTaskResult] immediately, and the actual result can be retrieved
* later via `tasks/result`.
* @property meta Optional metadata. May include a progressToken for out-of-band progress notifications.
*/
@Serializable
public data class ElicitRequestURLParams(
override val message: String,
val elicitationId: String,
val url: String,
val task: TaskMetadata? = null,
@SerialName("_meta")
override val meta: RequestMeta? = null,
) : ElicitRequestParams {
@EncodeDefault
public val mode: String = "url"
}
/**
* Represents the client's response to an [ElicitRequest].
*
* @property action The user action in response to the elicitation.
* @property content The submitted form data, only present when [action] is [Action.Accept]
* and mode was form. Contains values matching the requested schema. Omitted for
* URL mode responses.
* @property meta Optional metadata for this response.
* @throws IllegalArgumentException if content is provided with a non-accept action.
*/
@Serializable
public data class ElicitResult(

View file

@ -0,0 +1,292 @@
package io.modelcontextprotocol.kotlin.sdk.types
import kotlinx.serialization.EncodeDefault
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
/**
* Restricted schema definition for elicitation request properties.
*
* Supports primitive types (string, number, integer, boolean) and enum schemas
* (single-select and multi-select). Only flat, top-level properties are allowed —
* arbitrary nested objects or arrays are not supported.
*
* Implementations: [StringSchema], [NumberSchemaDefinition], [BooleanSchema], [EnumSchemaDefinition].
*/
@Serializable(with = PrimitiveSchemaDefinitionSerializer::class)
public sealed interface PrimitiveSchemaDefinition
/**
* Defines a string-typed property in an elicitation schema.
*
* @property title Optional display title for the field.
* @property description Optional description for the field.
* @property minLength Minimum string length.
* @property maxLength Maximum string length.
* @property format Optional format constraint (e.g., email, URI, date).
* @property default Optional default value.
*/
@Serializable
public data class StringSchema(
val title: String? = null,
val description: String? = null,
val minLength: Int? = null,
val maxLength: Int? = null,
val format: StringSchemaFormat? = null,
val default: String? = null,
) : PrimitiveSchemaDefinition {
@EncodeDefault
public val type: String = "string"
}
/**
* Supported format constraints for [StringSchema].
*/
@Serializable
public enum class StringSchemaFormat {
@SerialName("email")
Email,
@SerialName("uri")
Uri,
@SerialName("date")
Date,
@SerialName("date-time")
DateTime,
}
/**
* Defines a numeric property in an elicitation schema.
*
* Implementations: [IntegerSchema] (`"integer"`), [DoubleSchema] (`"number"`).
*/
@Serializable
public sealed interface NumberSchemaDefinition : PrimitiveSchemaDefinition
/**
* Defines an integer-typed property in an elicitation schema.
*
* @property title Optional display title for the field.
* @property description Optional description for the field.
* @property minimum Minimum allowed value.
* @property maximum Maximum allowed value.
* @property default Optional default value.
*/
@Serializable
public data class IntegerSchema(
val title: String? = null,
val description: String? = null,
val minimum: Int? = null,
val maximum: Int? = null,
val default: Int? = null,
) : NumberSchemaDefinition {
@EncodeDefault
val type: String = "integer"
}
/**
* Defines a floating-point number property in an elicitation schema.
*
* @property title Optional display title for the field.
* @property description Optional description for the field.
* @property minimum Minimum allowed value.
* @property maximum Maximum allowed value.
* @property default Optional default value.
*/
@Serializable
public data class DoubleSchema(
val title: String? = null,
val description: String? = null,
val minimum: Double? = null,
val maximum: Double? = null,
val default: Double? = null,
) : NumberSchemaDefinition {
@EncodeDefault
val type: String = "number"
}
/**
* Defines a boolean-typed property in an elicitation schema.
*
* @property title Optional display title for the field.
* @property description Optional description for the field.
* @property default Optional default value.
*/
@Serializable
public data class BooleanSchema(
val title: String? = null,
val description: String? = null,
val default: Boolean? = null,
) : PrimitiveSchemaDefinition {
@EncodeDefault
val type: String = "boolean"
}
/**
* Defines an enumeration property in an elicitation schema.
*
* Implementations: [SingleSelectEnumSchema], [MultiSelectEnumSchema], [LegacyTitledEnumSchema].
*/
@Serializable
public sealed interface EnumSchemaDefinition : PrimitiveSchemaDefinition
/**
* Represents an enum option with a value and a display label.
*
* Used in [TitledSingleSelectEnumSchema] and [TitledMultiSelectEnumSchema].
*
* @property const The enum value.
* @property title Display label for this option.
*/
@Serializable
public data class EnumOption(val const: String, val title: String)
/**
* Defines a single-selection enumeration property.
*
* Implementations: [UntitledSingleSelectEnumSchema], [TitledSingleSelectEnumSchema].
*/
@Serializable
public sealed interface SingleSelectEnumSchema : EnumSchemaDefinition
/**
* Defines a single-selection enumeration without display titles for options.
*
* @property title Optional display title for the field.
* @property description Optional description for the field.
* @property enumValues Array of enum values to choose from.
* @property default Optional default value.
*/
@Serializable
public data class UntitledSingleSelectEnumSchema(
val title: String? = null,
val description: String? = null,
@SerialName("enum")
val enumValues: List<String>,
val default: String? = null,
) : SingleSelectEnumSchema {
@EncodeDefault
val type: String = "string"
}
/**
* Defines a single-selection enumeration with display titles for each option.
*
* @property title Optional display title for the field.
* @property description Optional description for the field.
* @property oneOf Array of enum options with values and display labels.
* @property default Optional default value.
*/
@Serializable
public data class TitledSingleSelectEnumSchema(
val title: String? = null,
val description: String? = null,
val oneOf: List<EnumOption>,
val default: String? = null,
) : SingleSelectEnumSchema {
@EncodeDefault
val type: String = "string"
}
/**
* Defines a single-selection enumeration with display names via the deprecated `enumNames` array.
*
* Use [TitledSingleSelectEnumSchema] instead. This class will be removed in a future version.
*
* @property title Optional display title for the field.
* @property description Optional description for the field.
* @property enumValues Array of enum values to choose from.
* @property enumNames Display names for enum values. Non-standard according to JSON Schema 2020-12.
* @property default Optional default value.
*/
@Deprecated("Use TitledSingleSelectEnumSchema instead")
@Serializable
public data class LegacyTitledEnumSchema(
val title: String? = null,
val description: String? = null,
@SerialName("enum")
val enumValues: List<String>,
val enumNames: List<String>? = null,
val default: String? = null,
) : EnumSchemaDefinition {
@EncodeDefault
val type: String = "string"
}
/**
* Defines a multiple-selection enumeration property.
*
* Implementations: [UntitledMultiSelectEnumSchema], [TitledMultiSelectEnumSchema].
*/
@Serializable
public sealed interface MultiSelectEnumSchema : EnumSchemaDefinition
/**
* Defines a multiple-selection enumeration without display titles for options.
*
* @property title Optional display title for the field.
* @property description Optional description for the field.
* @property minItems Minimum number of items to select.
* @property maxItems Maximum number of items to select.
* @property items Schema for the array items.
* @property default Optional default value.
*/
@Serializable
public data class UntitledMultiSelectEnumSchema(
val title: String? = null,
val description: String? = null,
val minItems: Int? = null,
val maxItems: Int? = null,
val items: Items,
val default: List<String>? = null,
) : MultiSelectEnumSchema {
@EncodeDefault
val type: String = "array"
/**
* Schema for the array items with plain enum values.
*
* @property enumValues Array of enum values to choose from.
*/
@Serializable
public data class Items(
@SerialName("enum")
val enumValues: List<String>,
) {
@EncodeDefault
val type: String = "string"
}
}
/**
* Defines a multiple-selection enumeration with display titles for each option.
*
* @property title Optional display title for the field.
* @property description Optional description for the field.
* @property minItems Minimum number of items to select.
* @property maxItems Maximum number of items to select.
* @property items Schema for array items with enum options and display labels.
* @property default Optional default value.
*/
@Serializable
public data class TitledMultiSelectEnumSchema(
val title: String? = null,
val description: String? = null,
val minItems: Int? = null,
val maxItems: Int? = null,
val items: Items,
val default: List<String>? = null,
) : MultiSelectEnumSchema {
@EncodeDefault
val type: String = "array"
/**
* Schema for array items with enum options and display labels.
*
* @property anyOf Array of enum options with values and display labels.
*/
@Serializable
public data class Items(val anyOf: List<EnumOption>)
}

View file

@ -12,6 +12,7 @@ import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.JsonContentPolymorphicSerializer
import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.contentOrNull
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.longOrNull
@ -420,3 +421,80 @@ internal object RequestIdPolymorphicSerializer : JsonContentPolymorphicSerialize
else -> throw SerializationException("Invalid RequestId type: $element")
}
}
// ============================================================================
// ElicitationParams Serializers
// ============================================================================
internal object ElicitRequestParamsSerializer : JsonContentPolymorphicSerializer<ElicitRequestParams>(
ElicitRequestParams::class,
) {
@Suppress("ThrowsCount")
override fun selectDeserializer(element: JsonElement): DeserializationStrategy<ElicitRequestParams> {
val mode = when (val modeElement = element.jsonObject["mode"]) {
null -> null
is JsonPrimitive -> {
if (!modeElement.isString) {
throw SerializationException("Invalid 'mode' type: expected string but was: $modeElement")
}
modeElement.contentOrNull
}
else -> throw SerializationException("Invalid 'mode' type: expected string but was: $modeElement")
}
return when (mode) {
"url" -> ElicitRequestURLParams.serializer()
"form", null -> ElicitRequestFormParams.serializer()
else -> throw SerializationException("Unsupported elicitation mode: '$mode'")
}
}
}
// ============================================================================
// PrimitiveSchemaDefinition Serializers
// ============================================================================
internal object PrimitiveSchemaDefinitionSerializer : JsonContentPolymorphicSerializer<PrimitiveSchemaDefinition>(
PrimitiveSchemaDefinition::class,
) {
@Suppress("ThrowsCount")
override fun selectDeserializer(element: JsonElement): DeserializationStrategy<PrimitiveSchemaDefinition> {
val obj = element.jsonObject
val typeElement = obj["type"]
?: throw SerializationException("Missing 'type' in PrimitiveSchemaDefinition: $element")
val type = if (typeElement is JsonPrimitive && typeElement.isString) {
typeElement.content
} else {
throw SerializationException("Expected 'type' to be a string but was: $typeElement")
}
return when (type) {
"boolean" -> BooleanSchema.serializer()
"integer" -> IntegerSchema.serializer()
"number" -> DoubleSchema.serializer()
"string" -> selectStringTypeDeserializer(obj)
"array" -> selectArrayTypeDeserializer(obj)
else -> throw SerializationException("Unknown PrimitiveSchemaDefinition type: '$type'")
}
}
private fun selectArrayTypeDeserializer(
obj: Map<String, JsonElement>,
): DeserializationStrategy<PrimitiveSchemaDefinition> {
val items = obj["items"]?.jsonObject
return when {
items != null && "anyOf" in items -> TitledMultiSelectEnumSchema.serializer()
else -> UntitledMultiSelectEnumSchema.serializer()
}
}
@Suppress("DEPRECATION")
private fun selectStringTypeDeserializer(
obj: Map<String, JsonElement>,
): DeserializationStrategy<PrimitiveSchemaDefinition> = when {
"enumNames" in obj -> LegacyTitledEnumSchema.serializer()
"enum" in obj -> UntitledSingleSelectEnumSchema.serializer()
"oneOf" in obj -> TitledSingleSelectEnumSchema.serializer()
else -> StringSchema.serializer()
}
}

View file

@ -1,58 +1,39 @@
package io.modelcontextprotocol.kotlin.sdk.types
import io.kotest.assertions.json.shouldEqualJson
import io.kotest.assertions.throwables.shouldThrow
import io.kotest.matchers.nulls.shouldBeNull
import io.kotest.matchers.nulls.shouldNotBeNull
import io.kotest.matchers.shouldBe
import io.kotest.matchers.types.shouldBeInstanceOf
import io.modelcontextprotocol.kotlin.test.utils.verifyDeserialization
import io.modelcontextprotocol.kotlin.test.utils.verifySerialization
import kotlinx.serialization.json.boolean
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.int
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.put
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertNotNull
import kotlin.test.assertNull
class ElicitationTest {
// ── Form mode ───────────────────────────────────────────────────────
@Test
@Suppress("LongMethod")
fun `should serialize ElicitRequest with requested schema`() {
fun `should serialize form mode ElicitRequest`() {
val request = ElicitRequest(
ElicitRequestParams(
ElicitRequestFormParams(
message = "Provide repository details",
requestedSchema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject {
put(
"owner",
buildJsonObject {
put("type", "string")
put("description", "GitHub organization")
},
)
put(
"repository",
buildJsonObject {
put("type", "string")
put("title", "Repository name")
},
)
put(
"private",
buildJsonObject {
put("type", "boolean")
put("description", "Is the repository private?")
},
)
},
properties = mapOf(
"owner" to StringSchema(description = "GitHub organization"),
"repository" to StringSchema(title = "Repository name"),
"private" to BooleanSchema(description = "Is the repository private?"),
),
required = listOf("owner", "repository"),
),
meta = RequestMeta(
buildJsonObject {
put("progressToken", "token-42")
},
buildJsonObject { put("progressToken", "token-42") },
),
),
)
@ -68,16 +49,16 @@ class ElicitationTest {
"requestedSchema": {
"properties": {
"owner": {
"type": "string",
"description": "GitHub organization"
"description": "GitHub organization",
"type": "string"
},
"repository": {
"type": "string",
"title": "Repository name"
"title": "Repository name",
"type": "string"
},
"private": {
"type": "boolean",
"description": "Is the repository private?"
"description": "Is the repository private?",
"type": "boolean"
}
},
"required": ["owner", "repository"],
@ -85,7 +66,8 @@ class ElicitationTest {
},
"_meta": {
"progressToken": "token-42"
}
},
"mode": "form"
}
}
""".trimIndent(),
@ -93,22 +75,16 @@ class ElicitationTest {
}
@Test
fun `should deserialize ElicitRequest from JSON`() {
fun `should deserialize form mode ElicitRequest with explicit mode`() {
val json = """
{
"method": "elicitation/create",
"params": {
"message": "Tell us about the repository",
"mode": "form",
"message": "Enter your name",
"requestedSchema": {
"properties": {
"name": {
"type": "string",
"title": "Repository name"
},
"stars": {
"type": "number",
"description": "GitHub stars"
}
"name": {"type": "string", "title": "Full name"}
},
"type": "object"
}
@ -117,27 +93,121 @@ class ElicitationTest {
""".trimIndent()
val request = verifyDeserialization<ElicitRequest>(McpJson, json)
assertEquals(Method.Defined.ElicitationCreate, request.method)
request.method shouldBe Method.Defined.ElicitationCreate
request.message shouldBe "Enter your name"
val params = request.params
assertEquals("Tell us about the repository", params.message)
assertNull(params.meta)
val schema = params.requestedSchema
assertEquals("object", schema.type)
assertNull(schema.required)
val nameDefinition = schema.properties["name"]?.jsonObject
assertNotNull(nameDefinition)
assertEquals("string", nameDefinition["type"]?.jsonPrimitive?.content)
assertEquals("Repository name", nameDefinition["title"]?.jsonPrimitive?.content)
val starsDefinition = schema.properties["stars"]?.jsonObject
assertNotNull(starsDefinition)
assertEquals("number", starsDefinition["type"]?.jsonPrimitive?.content)
assertEquals("GitHub stars", starsDefinition["description"]?.jsonPrimitive?.content)
val params = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
val nameSchema = params.requestedSchema.properties["name"].shouldBeInstanceOf<StringSchema>()
nameSchema.title shouldBe "Full name"
}
@Test
fun `should deserialize form mode ElicitRequest without mode field`() {
val json = """
{
"method": "elicitation/create",
"params": {
"message": "Enter your name",
"requestedSchema": {
"properties": {
"name": {"type": "string"}
},
"type": "object"
}
}
}
""".trimIndent()
val request = McpJson.decodeFromString<ElicitRequest>(json)
request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
request.params.message shouldBe "Enter your name"
}
// ── URL mode ────────────────────────────────────────────────────────
@Test
fun `should serialize URL mode ElicitRequest`() {
val request = ElicitRequest(
ElicitRequestURLParams(
message = "Please provide your API key",
elicitationId = "550e8400-e29b-41d4-a716-446655440000",
url = "https://mcp.example.com/ui/set_api_key",
),
)
verifySerialization(
request,
McpJson,
"""
{
"method": "elicitation/create",
"params": {
"message": "Please provide your API key",
"elicitationId": "550e8400-e29b-41d4-a716-446655440000",
"url": "https://mcp.example.com/ui/set_api_key",
"mode": "url"
}
}
""".trimIndent(),
)
}
@Test
fun `should deserialize URL mode ElicitRequest`() {
val json = """
{
"method": "elicitation/create",
"params": {
"mode": "url",
"message": "Authorize access",
"elicitationId": "id-123",
"url": "https://example.com/auth"
}
}
""".trimIndent()
val request = verifyDeserialization<ElicitRequest>(McpJson, json)
val params = request.params.shouldBeInstanceOf<ElicitRequestURLParams>()
params.message shouldBe "Authorize access"
params.elicitationId shouldBe "id-123"
params.url shouldBe "https://example.com/auth"
}
// ── Deprecated compat ───────────────────────────────────────────────
@Test
@Suppress("DEPRECATION")
fun `deprecated factory function should create ElicitRequestFormParams`() {
val schema = ElicitRequestParams.RequestedSchema(
properties = mapOf("name" to StringSchema()),
)
val params = ElicitRequestParams(message = "Test", requestedSchema = schema)
params.shouldBeInstanceOf<ElicitRequestFormParams>()
params.message shouldBe "Test"
params.requestedSchema shouldBe schema
}
@Test
@Suppress("DEPRECATION")
fun `deprecated requestedSchema should return schema for form mode`() {
val schema = ElicitRequestParams.RequestedSchema(
properties = mapOf("x" to BooleanSchema()),
)
val request = ElicitRequest(ElicitRequestFormParams(message = "m", requestedSchema = schema))
request.requestedSchema shouldBe schema
}
@Test
@Suppress("DEPRECATION")
fun `deprecated requestedSchema should return null for URL mode`() {
val request = ElicitRequest(
ElicitRequestURLParams(message = "m", elicitationId = "id", url = "https://example.com"),
)
request.requestedSchema.shouldBeNull()
}
// ── ElicitResult ────────────────────────────────────────────────────
@Test
fun `should serialize and deserialize accept result with content`() {
val result = ElicitResult(
@ -169,17 +239,15 @@ class ElicitationTest {
""".trimIndent()
val decoded = verifyDeserialization<ElicitResult>(McpJson, json)
assertEquals(ElicitResult.Action.Accept, decoded.action)
decoded.action shouldBe ElicitResult.Action.Accept
val content = decoded.content
assertNotNull(content)
assertEquals("kotlin-sdk", content["repository"]?.jsonPrimitive?.content)
assertEquals(128, content["stars"]?.jsonPrimitive?.int)
assertEquals(false, content["private"]?.jsonPrimitive?.boolean)
val content = decoded.content.shouldNotBeNull()
content["repository"]?.jsonPrimitive?.content shouldBe "kotlin-sdk"
content["stars"]?.jsonPrimitive?.int shouldBe 128
content["private"]?.jsonPrimitive?.boolean shouldBe false
val meta = decoded.meta
assertNotNull(meta)
assertEquals("2025-01-12T15:00:58Z", meta["submittedAt"]?.jsonPrimitive?.content)
val meta = decoded.meta.shouldNotBeNull()
meta["submittedAt"]?.jsonPrimitive?.content shouldBe "2025-01-12T15:00:58Z"
}
@Test
@ -194,14 +262,14 @@ class ElicitationTest {
""".trimIndent()
val result = verifyDeserialization<ElicitResult>(McpJson, json)
assertEquals(ElicitResult.Action.Decline, result.action)
assertNull(result.content)
assertEquals("User skipped", result.meta?.get("reason")?.jsonPrimitive?.content)
result.action shouldBe ElicitResult.Action.Decline
result.content.shouldBeNull()
result.meta?.get("reason")?.jsonPrimitive?.content shouldBe "User skipped"
}
@Test
fun `should require content only for accept action`() {
assertFailsWith<IllegalArgumentException> {
shouldThrow<IllegalArgumentException> {
ElicitResult(
action = ElicitResult.Action.Cancel,
content = buildJsonObject { put("value", "ignored") },

View file

@ -0,0 +1,481 @@
package io.modelcontextprotocol.kotlin.sdk.types
import io.kotest.assertions.throwables.shouldThrow
import io.kotest.matchers.collections.shouldHaveSize
import io.kotest.matchers.shouldBe
import io.kotest.matchers.string.shouldContain
import io.kotest.matchers.types.shouldBeInstanceOf
import io.modelcontextprotocol.kotlin.test.utils.verifyDeserialization
import io.modelcontextprotocol.kotlin.test.utils.verifySerialization
import kotlinx.serialization.SerializationException
import kotlin.test.Test
class PrimitiveSchemaTest {
// ── StringSchema ────────────────────────────────────────────────────
@Test
fun `should serialize StringSchema with minimal fields`() {
verifySerialization(
StringSchema() as PrimitiveSchemaDefinition,
McpJson,
"""{"type": "string"}""",
)
}
@Test
fun `should serialize StringSchema with all fields`() {
val schema = StringSchema(
title = "Email address",
description = "User email",
minLength = 5,
maxLength = 100,
format = StringSchemaFormat.Email,
default = "user@example.com",
)
verifySerialization(
schema as PrimitiveSchemaDefinition,
McpJson,
"""
{
"title": "Email address",
"description": "User email",
"minLength": 5,
"maxLength": 100,
"format": "email",
"default": "user@example.com",
"type": "string"
}
""".trimIndent(),
)
}
@Test
fun `should deserialize StringSchema from JSON`() {
val json = """
{
"type": "string",
"title": "Name",
"format": "uri"
}
""".trimIndent()
val schema = verifyDeserialization<PrimitiveSchemaDefinition>(McpJson, json)
schema.shouldBeInstanceOf<StringSchema>()
schema.title shouldBe "Name"
schema.format shouldBe StringSchemaFormat.Uri
}
// ── StringSchemaFormat ──────────────────────────────────────────────
@Test
fun `should serialize all StringSchemaFormat values`() {
val cases = mapOf(
StringSchemaFormat.Email to "email",
StringSchemaFormat.Uri to "uri",
StringSchemaFormat.Date to "date",
StringSchemaFormat.DateTime to "date-time",
)
for ((format, expectedValue) in cases) {
val schema = StringSchema(format = format)
val json = McpJson.encodeToString(schema)
json shouldContain "\"format\":\"$expectedValue\""
}
}
// ── IntegerSchema ───────────────────────────────────────────────────
@Test
fun `should serialize IntegerSchema with minimal fields`() {
verifySerialization(
IntegerSchema() as PrimitiveSchemaDefinition,
McpJson,
"""{"type": "integer"}""",
)
}
@Test
fun `should serialize IntegerSchema with all fields`() {
verifySerialization(
IntegerSchema(
title = "Age",
description = "User age",
minimum = 0,
maximum = 150,
default = 25,
) as PrimitiveSchemaDefinition,
McpJson,
"""
{
"title": "Age",
"description": "User age",
"minimum": 0,
"maximum": 150,
"default": 25,
"type": "integer"
}
""".trimIndent(),
)
}
@Test
fun `should deserialize IntegerSchema from JSON`() {
val json = """{"type": "integer", "minimum": 1, "maximum": 10}"""
val schema = verifyDeserialization<PrimitiveSchemaDefinition>(McpJson, json)
schema.shouldBeInstanceOf<IntegerSchema>()
schema.minimum shouldBe 1
schema.maximum shouldBe 10
}
// ── DoubleSchema ────────────────────────────────────────────────────
@Test
fun `should serialize DoubleSchema with minimal fields`() {
verifySerialization(
DoubleSchema() as PrimitiveSchemaDefinition,
McpJson,
"""{"type": "number"}""",
)
}
@Test
fun `should serialize DoubleSchema with all fields`() {
verifySerialization(
DoubleSchema(
title = "Score",
description = "Test score",
minimum = 0.0,
maximum = 100.0,
default = 50.0,
) as PrimitiveSchemaDefinition,
McpJson,
"""
{
"title": "Score",
"description": "Test score",
"minimum": 0.0,
"maximum": 100.0,
"default": 50.0,
"type": "number"
}
""".trimIndent(),
)
}
@Test
fun `should deserialize DoubleSchema from JSON`() {
val json = """{"type": "number", "minimum": 0.5}"""
val schema = verifyDeserialization<PrimitiveSchemaDefinition>(McpJson, json)
schema.shouldBeInstanceOf<DoubleSchema>()
schema.minimum shouldBe 0.5
}
// ── BooleanSchema ───────────────────────────────────────────────────
@Test
fun `should serialize BooleanSchema with minimal fields`() {
verifySerialization(
BooleanSchema() as PrimitiveSchemaDefinition,
McpJson,
"""{"type": "boolean"}""",
)
}
@Test
fun `should serialize BooleanSchema with all fields`() {
verifySerialization(
BooleanSchema(
title = "Agree",
description = "Terms acceptance",
default = false,
) as PrimitiveSchemaDefinition,
McpJson,
"""
{
"title": "Agree",
"description": "Terms acceptance",
"default": false,
"type": "boolean"
}
""".trimIndent(),
)
}
@Test
fun `should deserialize BooleanSchema from JSON`() {
val json = """{"type": "boolean", "default": true}"""
val schema = verifyDeserialization<PrimitiveSchemaDefinition>(McpJson, json)
schema.shouldBeInstanceOf<BooleanSchema>()
schema.default shouldBe true
}
// ── UntitledSingleSelectEnumSchema ──────────────────────────────────
@Test
fun `should serialize UntitledSingleSelectEnumSchema`() {
verifySerialization(
UntitledSingleSelectEnumSchema(
title = "Color",
enumValues = listOf("Red", "Green", "Blue"),
default = "Red",
) as PrimitiveSchemaDefinition,
McpJson,
"""
{
"title": "Color",
"enum": ["Red", "Green", "Blue"],
"default": "Red",
"type": "string"
}
""".trimIndent(),
)
}
@Test
fun `should deserialize UntitledSingleSelectEnumSchema from JSON`() {
val json = """
{
"type": "string",
"enum": ["A", "B", "C"]
}
""".trimIndent()
val schema = verifyDeserialization<PrimitiveSchemaDefinition>(McpJson, json)
schema.shouldBeInstanceOf<UntitledSingleSelectEnumSchema>()
schema.enumValues shouldBe listOf("A", "B", "C")
}
// ── TitledSingleSelectEnumSchema ────────────────────────────────────
@Test
fun `should serialize TitledSingleSelectEnumSchema`() {
verifySerialization(
TitledSingleSelectEnumSchema(
title = "Color",
oneOf = listOf(
EnumOption(const = "#FF0000", title = "Red"),
EnumOption(const = "#00FF00", title = "Green"),
),
default = "#FF0000",
) as PrimitiveSchemaDefinition,
McpJson,
"""
{
"title": "Color",
"oneOf": [
{"const": "#FF0000", "title": "Red"},
{"const": "#00FF00", "title": "Green"}
],
"default": "#FF0000",
"type": "string"
}
""".trimIndent(),
)
}
@Test
fun `should deserialize TitledSingleSelectEnumSchema from JSON`() {
val json = """
{
"type": "string",
"oneOf": [
{"const": "a", "title": "Alpha"},
{"const": "b", "title": "Beta"}
]
}
""".trimIndent()
val schema = verifyDeserialization<PrimitiveSchemaDefinition>(McpJson, json)
schema.shouldBeInstanceOf<TitledSingleSelectEnumSchema>()
schema.oneOf shouldHaveSize 2
schema.oneOf[0].const shouldBe "a"
schema.oneOf[0].title shouldBe "Alpha"
}
// ── UntitledMultiSelectEnumSchema ────────────────────────────────────
@Test
fun `should serialize UntitledMultiSelectEnumSchema`() {
verifySerialization(
UntitledMultiSelectEnumSchema(
title = "Colors",
minItems = 1,
maxItems = 3,
items = UntitledMultiSelectEnumSchema.Items(enumValues = listOf("Red", "Green", "Blue")),
default = listOf("Red"),
) as PrimitiveSchemaDefinition,
McpJson,
"""
{
"title": "Colors",
"minItems": 1,
"maxItems": 3,
"items": {
"enum": ["Red", "Green", "Blue"],
"type": "string"
},
"default": ["Red"],
"type": "array"
}
""".trimIndent(),
)
}
@Test
fun `should deserialize UntitledMultiSelectEnumSchema from JSON`() {
val json = """
{
"type": "array",
"items": {
"type": "string",
"enum": ["X", "Y"]
}
}
""".trimIndent()
val schema = verifyDeserialization<PrimitiveSchemaDefinition>(McpJson, json)
schema.shouldBeInstanceOf<UntitledMultiSelectEnumSchema>()
schema.items.enumValues shouldBe listOf("X", "Y")
}
// ── TitledMultiSelectEnumSchema ──────────────────────────────────────
@Test
fun `should serialize TitledMultiSelectEnumSchema`() {
verifySerialization(
TitledMultiSelectEnumSchema(
title = "Colors",
minItems = 1,
maxItems = 2,
items = TitledMultiSelectEnumSchema.Items(
anyOf = listOf(
EnumOption(const = "#FF0000", title = "Red"),
EnumOption(const = "#00FF00", title = "Green"),
),
),
default = listOf("#FF0000"),
) as PrimitiveSchemaDefinition,
McpJson,
"""
{
"title": "Colors",
"minItems": 1,
"maxItems": 2,
"items": {
"anyOf": [
{"const": "#FF0000", "title": "Red"},
{"const": "#00FF00", "title": "Green"}
]
},
"default": ["#FF0000"],
"type": "array"
}
""".trimIndent(),
)
}
@Test
fun `should deserialize TitledMultiSelectEnumSchema from JSON`() {
val json = """
{
"type": "array",
"items": {
"anyOf": [
{"const": "x", "title": "X"},
{"const": "y", "title": "Y"}
]
}
}
""".trimIndent()
val schema = verifyDeserialization<PrimitiveSchemaDefinition>(McpJson, json)
schema.shouldBeInstanceOf<TitledMultiSelectEnumSchema>()
schema.items.anyOf shouldHaveSize 2
schema.items.anyOf[0].const shouldBe "x"
}
// ── LegacyTitledEnumSchema ────────────────────────────────────────────
@Suppress("DEPRECATION")
@Test
fun `should serialize LegacyTitledEnumSchema`() {
verifySerialization(
LegacyTitledEnumSchema(
title = "Status",
enumValues = listOf("opt1", "opt2", "opt3"),
enumNames = listOf("Option One", "Option Two", "Option Three"),
default = "opt1",
) as PrimitiveSchemaDefinition,
McpJson,
"""
{
"title": "Status",
"enum": ["opt1", "opt2", "opt3"],
"enumNames": ["Option One", "Option Two", "Option Three"],
"default": "opt1",
"type": "string"
}
""".trimIndent(),
)
}
@Suppress("DEPRECATION")
@Test
fun `should deserialize LegacyTitledEnumSchema from JSON`() {
val json = """
{
"type": "string",
"enum": ["a", "b"],
"enumNames": ["Alpha", "Beta"]
}
""".trimIndent()
val schema = verifyDeserialization<PrimitiveSchemaDefinition>(McpJson, json)
schema.shouldBeInstanceOf<LegacyTitledEnumSchema>()
schema.enumValues shouldBe listOf("a", "b")
schema.enumNames shouldBe listOf("Alpha", "Beta")
}
// ── Error cases ─────────────────────────────────────────────────────
@Test
fun `should throw on unknown type`() {
val json = """{"type": "unknown"}"""
shouldThrow<SerializationException> {
McpJson.decodeFromString<PrimitiveSchemaDefinition>(json)
}
}
// ── RequestedSchema with typed properties ───────────────────────────
@Test
fun `should round-trip RequestedSchema with mixed property types`() {
val schema = ElicitRequestParams.RequestedSchema(
properties = mapOf(
"name" to StringSchema(title = "Name"),
"age" to IntegerSchema(minimum = 0),
"confirmed" to BooleanSchema(default = false),
"color" to UntitledSingleSelectEnumSchema(enumValues = listOf("Red", "Blue")),
),
required = listOf("name"),
)
verifySerialization(
schema,
McpJson,
"""
{
"properties": {
"name": {"title": "Name", "type": "string"},
"age": {"minimum": 0, "type": "integer"},
"confirmed": {"default": false, "type": "boolean"},
"color": {"enum": ["Red", "Blue"], "type": "string"}
},
"required": ["name"],
"type": "object"
}
""".trimIndent(),
)
}
}

View file

@ -2,8 +2,11 @@ package io.modelcontextprotocol.kotlin.sdk.types.dsl
import io.kotest.assertions.throwables.shouldThrow
import io.kotest.matchers.shouldBe
import io.kotest.matchers.types.shouldBeInstanceOf
import io.modelcontextprotocol.kotlin.sdk.ExperimentalMcpApi
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestFormParams
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestParams
import io.modelcontextprotocol.kotlin.sdk.types.StringSchema
import io.modelcontextprotocol.kotlin.sdk.types.buildElicitRequest
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put
@ -24,14 +27,15 @@ class ElicitationDslTest {
}
request.params.message shouldBe "Provide info"
request.params.requestedSchema.properties["email"] shouldBe buildJsonObject { put("type", "string") }
request.params.requestedSchema.required shouldBe listOf("email")
val formParams = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
formParams.requestedSchema.properties["email"].shouldBeInstanceOf<StringSchema>()
formParams.requestedSchema.required shouldBe listOf("email")
}
@Test
fun `buildElicitRequest should support direct requestedSchema`() {
val schema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject { put("name", buildJsonObject { put("type", "string") }) },
properties = mapOf("name" to StringSchema()),
required = listOf("name"),
)
val request = buildElicitRequest {
@ -39,19 +43,20 @@ class ElicitationDslTest {
requestedSchema(schema)
}
request.params.requestedSchema shouldBe schema
val formParams = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
formParams.requestedSchema shouldBe schema
}
@Test
fun `ElicitRequestedSchemaBuilder should support direct properties assignment`() {
val props = buildJsonObject { put("key", "value") }
val request = buildElicitRequest {
message = "Test"
requestedSchema {
properties(props)
properties(buildJsonObject { put("key", buildJsonObject { put("type", "string") }) })
}
}
request.params.requestedSchema.properties shouldBe props
val formParams = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
formParams.requestedSchema.properties["key"].shouldBeInstanceOf<StringSchema>()
}
@Test

View file

@ -1,8 +1,10 @@
public abstract interface class io/modelcontextprotocol/kotlin/sdk/server/ClientConnection {
public abstract fun createElicitation (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun createElicitation (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public abstract fun createElicitation (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public abstract fun createMessage (Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun createMessage$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public abstract fun getSessionId ()Ljava/lang/String;
@ -22,6 +24,7 @@ public abstract interface class io/modelcontextprotocol/kotlin/sdk/server/Client
public final class io/modelcontextprotocol/kotlin/sdk/server/ClientConnection$DefaultImpls {
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public static synthetic fun createMessage$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public static synthetic fun listRoots$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/ListRootsRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public static synthetic fun notification$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/ServerNotification;Lio/modelcontextprotocol/kotlin/sdk/types/RequestId;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
@ -108,7 +111,9 @@ public class io/modelcontextprotocol/kotlin/sdk/server/Server {
public final fun clientConnection (Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;
public final fun close (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun createElicitation (Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun createElicitation (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/Server;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/Server;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun createMessage (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun createMessage$default (Lio/modelcontextprotocol/kotlin/sdk/server/Server;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun createSession (Lio/modelcontextprotocol/kotlin/sdk/shared/Transport;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
@ -159,7 +164,9 @@ public class io/modelcontextprotocol/kotlin/sdk/server/ServerSession : io/modelc
protected fun assertNotificationCapability (Lio/modelcontextprotocol/kotlin/sdk/types/Method;)V
public fun assertRequestHandlerCapability (Lio/modelcontextprotocol/kotlin/sdk/types/Method;)V
public final fun createElicitation (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun createElicitation (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ServerSession;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ServerSession;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun createMessage (Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun createMessage$default (Lio/modelcontextprotocol/kotlin/sdk/server/ServerSession;Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public fun equals (Ljava/lang/Object;)Z

View file

@ -5,7 +5,9 @@ import io.modelcontextprotocol.kotlin.sdk.shared.RequestOptions
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequest
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageResult
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequest
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestFormParams
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestParams
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestURLParams
import io.modelcontextprotocol.kotlin.sdk.types.ElicitResult
import io.modelcontextprotocol.kotlin.sdk.types.EmptyResult
import io.modelcontextprotocol.kotlin.sdk.types.ListRootsRequest
@ -104,6 +106,24 @@ public interface ClientConnection {
options: RequestOptions? = null,
): ElicitResult
/**
* Sends a URL mode elicitation request to the client, directing the user
* to an external URL for out-of-band interactions.
*
* @param message The message explaining why the interaction is needed.
* @param elicitationId A unique identifier for the elicitation.
* @param url The URL that the user should navigate to.
* @param options Optional request options.
* @return The result of the elicitation request.
* @throws IllegalStateException If the server or client does not support elicitation.
*/
public suspend fun createElicitation(
message: String,
elicitationId: String,
url: String,
options: RequestOptions? = null,
): ElicitResult
/**
* Sends a message to the client requesting elicitation.
* This typically results in a form being displayed to the user.
@ -189,10 +209,16 @@ internal class ClientConnectionImpl(private val session: ServerSession) : Client
}
override suspend fun createElicitation(request: ElicitRequest, options: RequestOptions?): ElicitResult {
with(request.params) {
logger.debug {
"Creating elicitation with message length=${message.length}, " +
"schema properties count=${requestedSchema.properties.size}"
val params = request.params
logger.debug {
when (params) {
is ElicitRequestFormParams ->
"Creating form elicitation with message length=${params.message.length}, " +
"schema properties count=${params.requestedSchema.properties.size}"
is ElicitRequestURLParams ->
"Creating URL elicitation with message length=${params.message.length}, " +
"elicitationId=${params.elicitationId}"
}
}
logger.trace { "ElicitRequest: $request" }
@ -204,7 +230,19 @@ internal class ClientConnectionImpl(private val session: ServerSession) : Client
requestedSchema: ElicitRequestParams.RequestedSchema,
options: RequestOptions?,
): ElicitResult = createElicitation(
request = ElicitRequest(params = ElicitRequestParams(message, requestedSchema)),
request = ElicitRequest(params = ElicitRequestFormParams(message = message, requestedSchema = requestedSchema)),
options = options,
)
override suspend fun createElicitation(
message: String,
elicitationId: String,
url: String,
options: RequestOptions?,
): ElicitResult = createElicitation(
request = ElicitRequest(
params = ElicitRequestURLParams(message = message, elicitationId = elicitationId, url = url),
),
options = options,
)

View file

@ -780,6 +780,30 @@ public open class Server(
options = options,
)
/**
* Triggers URL mode [ClientConnection.createElicitation] request for session by provided [sessionId].
*
* @param sessionId The session ID to create elicitation for.
* @param message The message explaining why the interaction is needed.
* @param elicitationId A unique identifier for the elicitation.
* @param url The URL that the user should navigate to.
* @param options Optional request options.
* @return The created elicitation result.
* @throws IllegalStateException If the server does not support elicitation or if the request fails.
*/
public suspend fun createElicitation(
sessionId: String,
message: String,
elicitationId: String,
url: String,
options: RequestOptions? = null,
): ElicitResult = clientConnection(sessionId).createElicitation(
message = message,
elicitationId = elicitationId,
url = url,
options = options,
)
/**
* Triggers [ClientConnection.sendLoggingMessage] for session by provided [sessionId].
*

View file

@ -382,6 +382,24 @@ public open class ServerSession(
options: RequestOptions? = null,
): ElicitResult = clientConnection.createElicitation(message, requestedSchema, options)
/**
* Sends a URL mode elicitation request to the client, directing the user
* to an external URL for out-of-band interactions.
*
* @param message The message explaining why the interaction is needed.
* @param elicitationId A unique identifier for the elicitation.
* @param url The URL that the user should navigate to.
* @param options Optional request options.
* @return The result of the elicitation request.
* @throws IllegalStateException If the server or client does not support elicitation.
*/
public suspend fun createElicitation(
message: String,
elicitationId: String,
url: String,
options: RequestOptions? = null,
): ElicitResult = clientConnection.createElicitation(message, elicitationId, url, options)
/**
* Sends a logging message notification to the client.
* Messages are filtered based on the current logging level set by the client.