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)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1; pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." || 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}" PORT="${MCP_PORT:-3001}"
SERVER_URL="http://localhost:${PORT}/mcp" SERVER_URL="http://localhost:${PORT}/mcp"
RESULTS_DIR="$SCRIPT_DIR/results" 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.github.oshai.kotlinlogging.KotlinLogging
import io.modelcontextprotocol.kotlin.sdk.server.Server import io.modelcontextprotocol.kotlin.sdk.server.Server
import io.modelcontextprotocol.kotlin.sdk.types.AudioContent 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.CallToolResult
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequest import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequest
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequestParams 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.ElicitRequestParams
import io.modelcontextprotocol.kotlin.sdk.types.EmbeddedResource 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.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.LoggingLevel
import io.modelcontextprotocol.kotlin.sdk.types.LoggingMessageNotification import io.modelcontextprotocol.kotlin.sdk.types.LoggingMessageNotification
import io.modelcontextprotocol.kotlin.sdk.types.LoggingMessageNotificationParams 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.ProgressNotificationParams
import io.modelcontextprotocol.kotlin.sdk.types.Role import io.modelcontextprotocol.kotlin.sdk.types.Role
import io.modelcontextprotocol.kotlin.sdk.types.SamplingMessage 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.TextContent
import io.modelcontextprotocol.kotlin.sdk.types.TextResourceContents 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.ToolSchema
import io.modelcontextprotocol.kotlin.sdk.types.UntitledMultiSelectEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.UntitledSingleSelectEnumSchema
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.serialization.json.JsonArray
import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.double import kotlinx.serialization.json.double
@ -187,22 +196,10 @@ fun Server.registerConformanceTools() {
) { request -> ) { request ->
val message = request.arguments?.get("message")?.jsonPrimitive?.content ?: "Please provide input" val message = request.arguments?.get("message")?.jsonPrimitive?.content ?: "Please provide input"
val schema = ElicitRequestParams.RequestedSchema( val schema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject { properties = mapOf(
put( "username" to StringSchema(description = "User's response"),
"username", "email" to StringSchema(description = "User's email address"),
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"))
},
)
},
required = listOf("username", "email"), required = listOf("username", "email"),
) )
val result = createElicitation(message, schema) val result = createElicitation(message, schema)
@ -215,54 +212,17 @@ fun Server.registerConformanceTools() {
description = "test_elicitation_sep1034_defaults", description = "test_elicitation_sep1034_defaults",
) { ) {
val schema = ElicitRequestParams.RequestedSchema( val schema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject { properties = mapOf(
put( "name" to StringSchema(description = "User name", default = "John Doe"),
"name", "age" to IntegerSchema(description = "User age", default = 30),
buildJsonObject { "score" to DoubleSchema(description = "User score", default = 95.5),
put("type", JsonPrimitive("string")) "status" to UntitledSingleSelectEnumSchema(
put("description", JsonPrimitive("User name")) description = "User status",
put("default", JsonPrimitive("John Doe")) enumValues = listOf("active", "inactive", "pending"),
}, default = "active",
) ),
put( "verified" to BooleanSchema(description = "Verification status", default = true),
"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))
},
)
},
required = listOf("name", "age", "score", "status", "verified"), required = listOf("name", "age", "score", "status", "verified"),
) )
val result = createElicitation( val result = createElicitation(
@ -278,122 +238,43 @@ fun Server.registerConformanceTools() {
description = "test_elicitation_sep1330_enums", description = "test_elicitation_sep1330_enums",
) { ) {
val schema = ElicitRequestParams.RequestedSchema( val schema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject { properties = mapOf(
// Untitled single-select // Untitled single-select
put( "untitledSingle" to UntitledSingleSelectEnumSchema(
"untitledSingle", enumValues = listOf("option1", "option2", "option3"),
buildJsonObject { ),
put("type", JsonPrimitive("string"))
put(
"enum",
JsonArray(
listOf(JsonPrimitive("option1"), JsonPrimitive("option2"), JsonPrimitive("option3")),
),
)
},
)
// Titled single-select // Titled single-select
put( "titledSingle" to TitledSingleSelectEnumSchema(
"titledSingle", oneOf = listOf(
buildJsonObject { EnumOption(const = "value1", title = "First Option"),
put("type", JsonPrimitive("string")) EnumOption(const = "value2", title = "Second Option"),
put( EnumOption(const = "value3", title = "Third Option"),
"oneOf", ),
JsonArray( ),
listOf( // Legacy titled (deprecated) — uses enum + enumNames
buildJsonObject { @Suppress("DEPRECATION")
put("const", JsonPrimitive("value1")) "legacyEnum"
put("title", JsonPrimitive("First Option")) to LegacyTitledEnumSchema(
}, enumValues = listOf("opt1", "opt2", "opt3"),
buildJsonObject { enumNames = listOf("Option One", "Option Two", "Option Three"),
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"),
),
),
)
},
)
// Untitled multi-select // Untitled multi-select
put( "untitledMulti" to UntitledMultiSelectEnumSchema(
"untitledMulti", items = UntitledMultiSelectEnumSchema.Items(
buildJsonObject { enumValues = listOf("option1", "option2", "option3"),
put("type", JsonPrimitive("array")) ),
put( ),
"items", // Titled multi-select
buildJsonObject { "titledMulti" to TitledMultiSelectEnumSchema(
put("type", JsonPrimitive("string")) items = TitledMultiSelectEnumSchema.Items(
put( anyOf = listOf(
"enum", EnumOption(const = "value1", title = "First Choice"),
JsonArray( EnumOption(const = "value2", title = "Second Choice"),
listOf( EnumOption(const = "value3", title = "Third Choice"),
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"))
},
),
),
)
},
)
},
)
},
) )
val result = createElicitation( val result = createElicitation(
"Please review and update the form fields with defaults", "Please review and update the form fields with defaults",
@ -538,54 +419,17 @@ fun Server.registerConformanceTools() {
description = "test_client_elicitation_defaults", description = "test_client_elicitation_defaults",
) { ) {
val schema = ElicitRequestParams.RequestedSchema( val schema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject { properties = mapOf(
put( "name" to StringSchema(description = "User name", default = "John Doe"),
"name", "age" to IntegerSchema(description = "User age", default = 30),
buildJsonObject { "score" to DoubleSchema(description = "User score", default = 95.5),
put("type", JsonPrimitive("string")) "status" to UntitledSingleSelectEnumSchema(
put("description", JsonPrimitive("User name")) description = "User status",
put("default", JsonPrimitive("John Doe")) enumValues = listOf("active", "inactive", "pending"),
}, default = "active",
) ),
put( "verified" to BooleanSchema(description = "Verification status", default = true),
"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))
},
)
},
required = emptyList(), required = emptyList(),
) )
val result = createElicitation( 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.ClientCapabilities
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequest import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequest
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageResult 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.ElicitRequestParams
import io.modelcontextprotocol.kotlin.sdk.types.ElicitResult import io.modelcontextprotocol.kotlin.sdk.types.ElicitResult
import io.modelcontextprotocol.kotlin.sdk.types.EmptyJsonObject 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.RootsListChangedNotification
import io.modelcontextprotocol.kotlin.sdk.types.SUPPORTED_PROTOCOL_VERSIONS import io.modelcontextprotocol.kotlin.sdk.types.SUPPORTED_PROTOCOL_VERSIONS
import io.modelcontextprotocol.kotlin.sdk.types.ServerCapabilities 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.TextContent
import io.modelcontextprotocol.kotlin.sdk.types.Tool import io.modelcontextprotocol.kotlin.sdk.types.Tool
import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema
@ -48,7 +50,6 @@ import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.withTimeout import kotlinx.coroutines.withTimeout
import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put import kotlinx.serialization.json.put
import kotlinx.serialization.json.putJsonObject
import kotlin.coroutines.cancellation.CancellationException import kotlin.coroutines.cancellation.CancellationException
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
@ -953,11 +954,7 @@ class ClientTest {
serverSession.createElicitation( serverSession.createElicitation(
message = "Please provide your GitHub username", message = "Please provide your GitHub username",
requestedSchema = ElicitRequestParams.RequestedSchema( requestedSchema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject { properties = mapOf("name" to StringSchema()),
putJsonObject("name") {
put("type", "string")
}
},
required = listOf("name"), required = listOf("name"),
), ),
) )
@ -1061,11 +1058,7 @@ class ClientTest {
val elicitationMessage = "Please provide your GitHub username" val elicitationMessage = "Please provide your GitHub username"
val requestedSchema = ElicitRequestParams.RequestedSchema( val requestedSchema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject { properties = mapOf("name" to StringSchema()),
putJsonObject("name") {
put("type", "string")
}
},
required = listOf("name"), required = listOf("name"),
) )
@ -1076,7 +1069,8 @@ class ClientTest {
client.setElicitationHandler { request -> client.setElicitationHandler { request ->
assertEquals(elicitationMessage, request.params.message) assertEquals(elicitationMessage, request.params.message)
assertEquals(requestedSchema, request.params.requestedSchema) val formParams = request.params as ElicitRequestFormParams
assertEquals(requestedSchema, formParams.requestedSchema)
ElicitResult( ElicitResult(
action = elicitationResultAction, 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 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 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 static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequest$Companion;
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequestParams;)V 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 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 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 static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest$Companion;
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;)V 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 fun setMessage (Ljava/lang/String;)V
} }
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams : io/modelcontextprotocol/kotlin/sdk/types/RequestParams { 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/ElicitRequestParams$Companion; public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams$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/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/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;Lkotlin/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 component1 ()Ljava/lang/String;
public final fun component2 ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema; public final fun component2 ()Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;
public final fun component3-VI-3G7E ()Lkotlinx/serialization/json/JsonObject; public final fun component3 ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
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 final fun component4-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
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 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 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 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 getRequestedSchema ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
public final fun getTask ()Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;
public fun hashCode ()I public fun hashCode ()I
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
} }
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$$serializer : kotlinx/serialization/internal/GeneratedSerializer { 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/ElicitRequestParams$$serializer; public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams$$serializer;
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer; 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 synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor; 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 synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer; 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 class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$Companion {
public final fun serializer ()Lkotlinx/serialization/KSerializer; public final fun serializer ()Lkotlinx/serialization/KSerializer;
} }
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema { public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema$Companion; 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 fun <init> (Ljava/lang/String;Ljava/util/Map;Ljava/util/List;)V
public synthetic fun <init> (Lkotlinx/serialization/json/JsonObject;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun <init> (Ljava/lang/String;Ljava/util/Map;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun component1 ()Lkotlinx/serialization/json/JsonObject; public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/util/List; public final fun component2 ()Ljava/util/Map;
public final fun copy (Lkotlinx/serialization/json/JsonObject;Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema; public final fun component3 ()Ljava/util/List;
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 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 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 getRequired ()Ljava/util/List;
public final fun getSchema ()Ljava/lang/String;
public final fun getType ()Ljava/lang/String; public final fun getType ()Ljava/lang/String;
public fun hashCode ()I public fun hashCode ()I
public fun toString ()Ljava/lang/String; 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 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 final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestedSchemaBuilder {
public fun <init> ()V public fun <init> ()V
public final fun build ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema; 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 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 final class io/modelcontextprotocol/kotlin/sdk/types/Elicitation_dslKt {
public static final fun buildElicitRequest (Lkotlin/jvm/functions/Function1;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest; 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 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 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 static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequest$Companion;
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequestParams;)V 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 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 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 static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/JSONRPCEmptyMessage;
public fun equals (Ljava/lang/Object;)Z 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 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 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 static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ListPromptsRequest$Companion;
public fun <init> ()V 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 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 abstract interface class io/modelcontextprotocol/kotlin/sdk/types/Notification {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/Notification$Companion; public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/Notification$Companion;
public abstract fun getMethod ()Lio/modelcontextprotocol/kotlin/sdk/types/Method; 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 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 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 static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest$Companion;
public fun getCursor ()Ljava/lang/String; 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 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 final class io/modelcontextprotocol/kotlin/sdk/types/Progress {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/Progress$Companion; public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/Progress$Companion;
public fun <init> (DLjava/lang/Double;Ljava/lang/String;)V 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 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 final class io/modelcontextprotocol/kotlin/sdk/types/StopReason {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/StopReason$Companion; 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; 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 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 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 static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequest$Companion;
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequestParams;)V 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 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 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 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 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 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 abstract interface class io/modelcontextprotocol/kotlin/sdk/types/WithMeta {
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/WithMeta$Companion; public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/WithMeta$Companion;
public abstract fun getMeta ()Lkotlinx/serialization/json/JsonObject; 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.JsonObject
import kotlinx.serialization.json.JsonObjectBuilder import kotlinx.serialization.json.JsonObjectBuilder
import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.decodeFromJsonElement
import kotlin.contracts.ExperimentalContracts import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind import kotlin.contracts.InvocationKind
import kotlin.contracts.contract import kotlin.contracts.contract
@ -223,6 +224,9 @@ public class ElicitRequestedSchemaBuilder @PublishedApi internal constructor() {
val properties = requireNotNull(properties) { val properties = requireNotNull(properties) {
"Missing required field 'properties'. Use properties { put(\"fieldName\", schema) }" "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 package io.modelcontextprotocol.kotlin.sdk.types
import kotlinx.serialization.EncodeDefault import kotlinx.serialization.EncodeDefault
import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.SerialName import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.json.JsonObject 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 * Supports two modes: form mode ([ElicitRequestFormParams]) for collecting structured data
* or dialogs presented by the client. The server defines a schema for the requested data, * in-band, and URL mode ([ElicitRequestURLParams]) for directing the user to an external URL.
* and the client presents an appropriate UI to collect this information.
* *
* @property params The elicitation parameters including the message and requested schema. * @property params The elicitation parameters — either form or URL mode.
*/ */
@Serializable @Serializable
public data class ElicitRequest(override val params: ElicitRequestParams) : ServerRequest { public data class ElicitRequest(override val params: ElicitRequestParams) : ServerRequest {
@OptIn(ExperimentalSerializationApi::class)
@EncodeDefault @EncodeDefault
public override val method: Method = Method.Defined.ElicitationCreate 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. * A restricted subset of JSON Schema defining the structure of the requested data.
*/ */
public val requestedSchema: ElicitRequestParams.RequestedSchema @Deprecated(
get() = params.requestedSchema "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. * 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 * Implementations: [ElicitRequestFormParams], [ElicitRequestURLParams].
* 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.
*/ */
@Serializable @Serializable(with = ElicitRequestParamsSerializer::class)
public data class ElicitRequestParams( public sealed interface ElicitRequestParams : RequestParams {
val message: String, public val message: String
val requestedSchema: RequestedSchema,
@SerialName("_meta")
override val meta: RequestMeta? = null,
) : RequestParams {
/** /**
* A restricted JSON Schema for elicitation requests. * 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 * Only supports top-level primitive properties without nesting. Each property
* represents a field in the form or dialog presented to the user. * 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. * @property properties A map of property names to their schema definitions.
* Each property must be a primitive type (string, number, boolean). * Each property must be a primitive type (string, number, boolean).
* @property required Optional list of property names that must be provided by the user. * @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. * @property type Always "object" for elicitation schemas.
*/ */
@Serializable @Serializable
public data class RequestedSchema(val properties: JsonObject, val required: List<String>? = null) { public data class RequestedSchema(
@OptIn(ExperimentalSerializationApi::class) @SerialName($$"$schema")
val schema: String? = null,
val properties: Map<String, PrimitiveSchemaDefinition>,
val required: List<String>? = null,
) {
@EncodeDefault @EncodeDefault
val type: String = "object" 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. * Collects non-sensitive structured data from the user via a form presented by the client.
* @property content The submitted form data, only present when [action] is [Action.Accept]. *
* Contains values matching the requested schema, where keys correspond * @property message The message to present to the user describing what information is being requested.
* to property names and values are primitives (string, number, or boolean). * @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. * @property meta Optional metadata for this response.
* @throws IllegalArgumentException if content is provided with a non-accept action.
*/ */
@Serializable @Serializable
public data class ElicitResult( 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.JsonContentPolymorphicSerializer
import kotlinx.serialization.json.JsonElement import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonPrimitive import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.contentOrNull
import kotlinx.serialization.json.jsonObject import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.longOrNull import kotlinx.serialization.json.longOrNull
@ -420,3 +421,80 @@ internal object RequestIdPolymorphicSerializer : JsonContentPolymorphicSerialize
else -> throw SerializationException("Invalid RequestId type: $element") 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 package io.modelcontextprotocol.kotlin.sdk.types
import io.kotest.assertions.json.shouldEqualJson 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.verifyDeserialization
import io.modelcontextprotocol.kotlin.test.utils.verifySerialization import io.modelcontextprotocol.kotlin.test.utils.verifySerialization
import kotlinx.serialization.json.boolean import kotlinx.serialization.json.boolean
import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.int import kotlinx.serialization.json.int
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive import kotlinx.serialization.json.jsonPrimitive
import kotlinx.serialization.json.put import kotlinx.serialization.json.put
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertNotNull
import kotlin.test.assertNull
class ElicitationTest { class ElicitationTest {
// ── Form mode ───────────────────────────────────────────────────────
@Test @Test
@Suppress("LongMethod") fun `should serialize form mode ElicitRequest`() {
fun `should serialize ElicitRequest with requested schema`() {
val request = ElicitRequest( val request = ElicitRequest(
ElicitRequestParams( ElicitRequestFormParams(
message = "Provide repository details", message = "Provide repository details",
requestedSchema = ElicitRequestParams.RequestedSchema( requestedSchema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject { properties = mapOf(
put( "owner" to StringSchema(description = "GitHub organization"),
"owner", "repository" to StringSchema(title = "Repository name"),
buildJsonObject { "private" to BooleanSchema(description = "Is the repository private?"),
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?")
},
)
},
required = listOf("owner", "repository"), required = listOf("owner", "repository"),
), ),
meta = RequestMeta( meta = RequestMeta(
buildJsonObject { buildJsonObject { put("progressToken", "token-42") },
put("progressToken", "token-42")
},
), ),
), ),
) )
@ -68,16 +49,16 @@ class ElicitationTest {
"requestedSchema": { "requestedSchema": {
"properties": { "properties": {
"owner": { "owner": {
"type": "string", "description": "GitHub organization",
"description": "GitHub organization" "type": "string"
}, },
"repository": { "repository": {
"type": "string", "title": "Repository name",
"title": "Repository name" "type": "string"
}, },
"private": { "private": {
"type": "boolean", "description": "Is the repository private?",
"description": "Is the repository private?" "type": "boolean"
} }
}, },
"required": ["owner", "repository"], "required": ["owner", "repository"],
@ -85,7 +66,8 @@ class ElicitationTest {
}, },
"_meta": { "_meta": {
"progressToken": "token-42" "progressToken": "token-42"
} },
"mode": "form"
} }
} }
""".trimIndent(), """.trimIndent(),
@ -93,22 +75,16 @@ class ElicitationTest {
} }
@Test @Test
fun `should deserialize ElicitRequest from JSON`() { fun `should deserialize form mode ElicitRequest with explicit mode`() {
val json = """ val json = """
{ {
"method": "elicitation/create", "method": "elicitation/create",
"params": { "params": {
"message": "Tell us about the repository", "mode": "form",
"message": "Enter your name",
"requestedSchema": { "requestedSchema": {
"properties": { "properties": {
"name": { "name": {"type": "string", "title": "Full name"}
"type": "string",
"title": "Repository name"
},
"stars": {
"type": "number",
"description": "GitHub stars"
}
}, },
"type": "object" "type": "object"
} }
@ -117,27 +93,121 @@ class ElicitationTest {
""".trimIndent() """.trimIndent()
val request = verifyDeserialization<ElicitRequest>(McpJson, json) 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 val params = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
assertEquals("Tell us about the repository", params.message) val nameSchema = params.requestedSchema.properties["name"].shouldBeInstanceOf<StringSchema>()
assertNull(params.meta) nameSchema.title shouldBe "Full name"
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)
} }
@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 @Test
fun `should serialize and deserialize accept result with content`() { fun `should serialize and deserialize accept result with content`() {
val result = ElicitResult( val result = ElicitResult(
@ -169,17 +239,15 @@ class ElicitationTest {
""".trimIndent() """.trimIndent()
val decoded = verifyDeserialization<ElicitResult>(McpJson, json) val decoded = verifyDeserialization<ElicitResult>(McpJson, json)
assertEquals(ElicitResult.Action.Accept, decoded.action) decoded.action shouldBe ElicitResult.Action.Accept
val content = decoded.content val content = decoded.content.shouldNotBeNull()
assertNotNull(content) content["repository"]?.jsonPrimitive?.content shouldBe "kotlin-sdk"
assertEquals("kotlin-sdk", content["repository"]?.jsonPrimitive?.content) content["stars"]?.jsonPrimitive?.int shouldBe 128
assertEquals(128, content["stars"]?.jsonPrimitive?.int) content["private"]?.jsonPrimitive?.boolean shouldBe false
assertEquals(false, content["private"]?.jsonPrimitive?.boolean)
val meta = decoded.meta val meta = decoded.meta.shouldNotBeNull()
assertNotNull(meta) meta["submittedAt"]?.jsonPrimitive?.content shouldBe "2025-01-12T15:00:58Z"
assertEquals("2025-01-12T15:00:58Z", meta["submittedAt"]?.jsonPrimitive?.content)
} }
@Test @Test
@ -194,14 +262,14 @@ class ElicitationTest {
""".trimIndent() """.trimIndent()
val result = verifyDeserialization<ElicitResult>(McpJson, json) val result = verifyDeserialization<ElicitResult>(McpJson, json)
assertEquals(ElicitResult.Action.Decline, result.action) result.action shouldBe ElicitResult.Action.Decline
assertNull(result.content) result.content.shouldBeNull()
assertEquals("User skipped", result.meta?.get("reason")?.jsonPrimitive?.content) result.meta?.get("reason")?.jsonPrimitive?.content shouldBe "User skipped"
} }
@Test @Test
fun `should require content only for accept action`() { fun `should require content only for accept action`() {
assertFailsWith<IllegalArgumentException> { shouldThrow<IllegalArgumentException> {
ElicitResult( ElicitResult(
action = ElicitResult.Action.Cancel, action = ElicitResult.Action.Cancel,
content = buildJsonObject { put("value", "ignored") }, 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.assertions.throwables.shouldThrow
import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldBe
import io.kotest.matchers.types.shouldBeInstanceOf
import io.modelcontextprotocol.kotlin.sdk.ExperimentalMcpApi 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.ElicitRequestParams
import io.modelcontextprotocol.kotlin.sdk.types.StringSchema
import io.modelcontextprotocol.kotlin.sdk.types.buildElicitRequest import io.modelcontextprotocol.kotlin.sdk.types.buildElicitRequest
import kotlinx.serialization.json.buildJsonObject import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put import kotlinx.serialization.json.put
@ -24,14 +27,15 @@ class ElicitationDslTest {
} }
request.params.message shouldBe "Provide info" request.params.message shouldBe "Provide info"
request.params.requestedSchema.properties["email"] shouldBe buildJsonObject { put("type", "string") } val formParams = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
request.params.requestedSchema.required shouldBe listOf("email") formParams.requestedSchema.properties["email"].shouldBeInstanceOf<StringSchema>()
formParams.requestedSchema.required shouldBe listOf("email")
} }
@Test @Test
fun `buildElicitRequest should support direct requestedSchema`() { fun `buildElicitRequest should support direct requestedSchema`() {
val schema = ElicitRequestParams.RequestedSchema( val schema = ElicitRequestParams.RequestedSchema(
properties = buildJsonObject { put("name", buildJsonObject { put("type", "string") }) }, properties = mapOf("name" to StringSchema()),
required = listOf("name"), required = listOf("name"),
) )
val request = buildElicitRequest { val request = buildElicitRequest {
@ -39,19 +43,20 @@ class ElicitationDslTest {
requestedSchema(schema) requestedSchema(schema)
} }
request.params.requestedSchema shouldBe schema val formParams = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
formParams.requestedSchema shouldBe schema
} }
@Test @Test
fun `ElicitRequestedSchemaBuilder should support direct properties assignment`() { fun `ElicitRequestedSchemaBuilder should support direct properties assignment`() {
val props = buildJsonObject { put("key", "value") }
val request = buildElicitRequest { val request = buildElicitRequest {
message = "Test" message = "Test"
requestedSchema { 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 @Test

View file

@ -1,8 +1,10 @@
public abstract interface class io/modelcontextprotocol/kotlin/sdk/server/ClientConnection { 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 (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;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;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;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 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 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; 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 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;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;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 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 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; 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 clientConnection (Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;
public final fun close (Lkotlin/coroutines/Continuation;)Ljava/lang/Object; 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;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;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 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 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; 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 protected fun assertNotificationCapability (Lio/modelcontextprotocol/kotlin/sdk/types/Method;)V
public fun assertRequestHandlerCapability (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;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;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 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 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 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.CreateMessageRequest
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageResult import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageResult
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequest 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.ElicitRequestParams
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestURLParams
import io.modelcontextprotocol.kotlin.sdk.types.ElicitResult import io.modelcontextprotocol.kotlin.sdk.types.ElicitResult
import io.modelcontextprotocol.kotlin.sdk.types.EmptyResult import io.modelcontextprotocol.kotlin.sdk.types.EmptyResult
import io.modelcontextprotocol.kotlin.sdk.types.ListRootsRequest import io.modelcontextprotocol.kotlin.sdk.types.ListRootsRequest
@ -104,6 +106,24 @@ public interface ClientConnection {
options: RequestOptions? = null, options: RequestOptions? = null,
): ElicitResult ): 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. * Sends a message to the client requesting elicitation.
* This typically results in a form being displayed to the user. * 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 { override suspend fun createElicitation(request: ElicitRequest, options: RequestOptions?): ElicitResult {
with(request.params) { val params = request.params
logger.debug { logger.debug {
"Creating elicitation with message length=${message.length}, " + when (params) {
"schema properties count=${requestedSchema.properties.size}" 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" } logger.trace { "ElicitRequest: $request" }
@ -204,7 +230,19 @@ internal class ClientConnectionImpl(private val session: ServerSession) : Client
requestedSchema: ElicitRequestParams.RequestedSchema, requestedSchema: ElicitRequestParams.RequestedSchema,
options: RequestOptions?, options: RequestOptions?,
): ElicitResult = createElicitation( ): 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, options = options,
) )

View file

@ -780,6 +780,30 @@ public open class Server(
options = options, 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]. * Triggers [ClientConnection.sendLoggingMessage] for session by provided [sessionId].
* *

View file

@ -382,6 +382,24 @@ public open class ServerSession(
options: RequestOptions? = null, options: RequestOptions? = null,
): ElicitResult = clientConnection.createElicitation(message, requestedSchema, options) ): 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. * Sends a logging message notification to the client.
* Messages are filtered based on the current logging level set by the client. * Messages are filtered based on the current logging level set by the client.