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:
parent
ad072325c9
commit
fdecf6bdf5
15 changed files with 1838 additions and 384 deletions
|
|
@ -9,7 +9,7 @@ set -uo pipefail
|
|||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" || exit 1; pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." || exit 1; pwd)"
|
||||
|
||||
CONFORMANCE_VERSION="0.1.15"
|
||||
CONFORMANCE_VERSION="0.1.16"
|
||||
PORT="${MCP_PORT:-3001}"
|
||||
SERVER_URL="http://localhost:${PORT}/mcp"
|
||||
RESULTS_DIR="$SCRIPT_DIR/results"
|
||||
|
|
|
|||
|
|
@ -3,12 +3,17 @@ package io.modelcontextprotocol.kotlin.sdk.conformance
|
|||
import io.github.oshai.kotlinlogging.KotlinLogging
|
||||
import io.modelcontextprotocol.kotlin.sdk.server.Server
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.AudioContent
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.BooleanSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.CallToolResult
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequest
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequestParams
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.DoubleSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestParams
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.EmbeddedResource
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.EnumOption
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ImageContent
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.IntegerSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.LegacyTitledEnumSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.LoggingLevel
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.LoggingMessageNotification
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.LoggingMessageNotificationParams
|
||||
|
|
@ -16,11 +21,15 @@ import io.modelcontextprotocol.kotlin.sdk.types.ProgressNotification
|
|||
import io.modelcontextprotocol.kotlin.sdk.types.ProgressNotificationParams
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.Role
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.SamplingMessage
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.StringSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.TextResourceContents
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.TitledMultiSelectEnumSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.TitledSingleSelectEnumSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.UntitledMultiSelectEnumSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.UntitledSingleSelectEnumSchema
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.serialization.json.JsonArray
|
||||
import kotlinx.serialization.json.JsonPrimitive
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
import kotlinx.serialization.json.double
|
||||
|
|
@ -187,22 +196,10 @@ fun Server.registerConformanceTools() {
|
|||
) { request ->
|
||||
val message = request.arguments?.get("message")?.jsonPrimitive?.content ?: "Please provide input"
|
||||
val schema = ElicitRequestParams.RequestedSchema(
|
||||
properties = buildJsonObject {
|
||||
put(
|
||||
"username",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("string"))
|
||||
put("description", JsonPrimitive("User's response"))
|
||||
},
|
||||
)
|
||||
put(
|
||||
"email",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("string"))
|
||||
put("description", JsonPrimitive("User's email address"))
|
||||
},
|
||||
)
|
||||
},
|
||||
properties = mapOf(
|
||||
"username" to StringSchema(description = "User's response"),
|
||||
"email" to StringSchema(description = "User's email address"),
|
||||
),
|
||||
required = listOf("username", "email"),
|
||||
)
|
||||
val result = createElicitation(message, schema)
|
||||
|
|
@ -215,54 +212,17 @@ fun Server.registerConformanceTools() {
|
|||
description = "test_elicitation_sep1034_defaults",
|
||||
) {
|
||||
val schema = ElicitRequestParams.RequestedSchema(
|
||||
properties = buildJsonObject {
|
||||
put(
|
||||
"name",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("string"))
|
||||
put("description", JsonPrimitive("User name"))
|
||||
put("default", JsonPrimitive("John Doe"))
|
||||
},
|
||||
)
|
||||
put(
|
||||
"age",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("integer"))
|
||||
put("description", JsonPrimitive("User age"))
|
||||
put("default", JsonPrimitive(30))
|
||||
},
|
||||
)
|
||||
put(
|
||||
"score",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("number"))
|
||||
put("description", JsonPrimitive("User score"))
|
||||
put("default", JsonPrimitive(95.5))
|
||||
},
|
||||
)
|
||||
put(
|
||||
"status",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("string"))
|
||||
put("description", JsonPrimitive("User status"))
|
||||
put("default", JsonPrimitive("active"))
|
||||
put(
|
||||
"enum",
|
||||
JsonArray(
|
||||
listOf(JsonPrimitive("active"), JsonPrimitive("inactive"), JsonPrimitive("pending")),
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
put(
|
||||
"verified",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("boolean"))
|
||||
put("description", JsonPrimitive("Verification status"))
|
||||
put("default", JsonPrimitive(true))
|
||||
},
|
||||
)
|
||||
},
|
||||
properties = mapOf(
|
||||
"name" to StringSchema(description = "User name", default = "John Doe"),
|
||||
"age" to IntegerSchema(description = "User age", default = 30),
|
||||
"score" to DoubleSchema(description = "User score", default = 95.5),
|
||||
"status" to UntitledSingleSelectEnumSchema(
|
||||
description = "User status",
|
||||
enumValues = listOf("active", "inactive", "pending"),
|
||||
default = "active",
|
||||
),
|
||||
"verified" to BooleanSchema(description = "Verification status", default = true),
|
||||
),
|
||||
required = listOf("name", "age", "score", "status", "verified"),
|
||||
)
|
||||
val result = createElicitation(
|
||||
|
|
@ -278,122 +238,43 @@ fun Server.registerConformanceTools() {
|
|||
description = "test_elicitation_sep1330_enums",
|
||||
) {
|
||||
val schema = ElicitRequestParams.RequestedSchema(
|
||||
properties = buildJsonObject {
|
||||
properties = mapOf(
|
||||
// Untitled single-select
|
||||
put(
|
||||
"untitledSingle",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("string"))
|
||||
put(
|
||||
"enum",
|
||||
JsonArray(
|
||||
listOf(JsonPrimitive("option1"), JsonPrimitive("option2"), JsonPrimitive("option3")),
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
"untitledSingle" to UntitledSingleSelectEnumSchema(
|
||||
enumValues = listOf("option1", "option2", "option3"),
|
||||
),
|
||||
// Titled single-select
|
||||
put(
|
||||
"titledSingle",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("string"))
|
||||
put(
|
||||
"oneOf",
|
||||
JsonArray(
|
||||
listOf(
|
||||
buildJsonObject {
|
||||
put("const", JsonPrimitive("value1"))
|
||||
put("title", JsonPrimitive("First Option"))
|
||||
},
|
||||
buildJsonObject {
|
||||
put("const", JsonPrimitive("value2"))
|
||||
put("title", JsonPrimitive("Second Option"))
|
||||
},
|
||||
buildJsonObject {
|
||||
put("const", JsonPrimitive("value3"))
|
||||
put("title", JsonPrimitive("Third Option"))
|
||||
},
|
||||
),
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
// Legacy titled (deprecated) - uses enum + enumNames arrays
|
||||
put(
|
||||
"legacyEnum",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("string"))
|
||||
put(
|
||||
"enum",
|
||||
JsonArray(listOf(JsonPrimitive("opt1"), JsonPrimitive("opt2"), JsonPrimitive("opt3"))),
|
||||
)
|
||||
put(
|
||||
"enumNames",
|
||||
JsonArray(
|
||||
listOf(
|
||||
JsonPrimitive("Option One"),
|
||||
JsonPrimitive("Option Two"),
|
||||
JsonPrimitive("Option Three"),
|
||||
),
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
"titledSingle" to TitledSingleSelectEnumSchema(
|
||||
oneOf = listOf(
|
||||
EnumOption(const = "value1", title = "First Option"),
|
||||
EnumOption(const = "value2", title = "Second Option"),
|
||||
EnumOption(const = "value3", title = "Third Option"),
|
||||
),
|
||||
),
|
||||
// Legacy titled (deprecated) — uses enum + enumNames
|
||||
@Suppress("DEPRECATION")
|
||||
"legacyEnum"
|
||||
to LegacyTitledEnumSchema(
|
||||
enumValues = listOf("opt1", "opt2", "opt3"),
|
||||
enumNames = listOf("Option One", "Option Two", "Option Three"),
|
||||
),
|
||||
// Untitled multi-select
|
||||
put(
|
||||
"untitledMulti",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("array"))
|
||||
put(
|
||||
"items",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("string"))
|
||||
put(
|
||||
"enum",
|
||||
JsonArray(
|
||||
listOf(
|
||||
JsonPrimitive("option1"),
|
||||
JsonPrimitive("option2"),
|
||||
JsonPrimitive("option3"),
|
||||
),
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
},
|
||||
)
|
||||
// Titled multi-select - uses items.anyOf with const/title pairs
|
||||
put(
|
||||
"titledMulti",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("array"))
|
||||
put(
|
||||
"items",
|
||||
buildJsonObject {
|
||||
put(
|
||||
"anyOf",
|
||||
JsonArray(
|
||||
listOf(
|
||||
buildJsonObject {
|
||||
put("const", JsonPrimitive("value1"))
|
||||
put("title", JsonPrimitive("First Choice"))
|
||||
},
|
||||
buildJsonObject {
|
||||
put("const", JsonPrimitive("value2"))
|
||||
put("title", JsonPrimitive("Second Choice"))
|
||||
},
|
||||
buildJsonObject {
|
||||
put("const", JsonPrimitive("value3"))
|
||||
put("title", JsonPrimitive("Third Choice"))
|
||||
},
|
||||
),
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
},
|
||||
)
|
||||
},
|
||||
"untitledMulti" to UntitledMultiSelectEnumSchema(
|
||||
items = UntitledMultiSelectEnumSchema.Items(
|
||||
enumValues = listOf("option1", "option2", "option3"),
|
||||
),
|
||||
),
|
||||
// Titled multi-select
|
||||
"titledMulti" to TitledMultiSelectEnumSchema(
|
||||
items = TitledMultiSelectEnumSchema.Items(
|
||||
anyOf = listOf(
|
||||
EnumOption(const = "value1", title = "First Choice"),
|
||||
EnumOption(const = "value2", title = "Second Choice"),
|
||||
EnumOption(const = "value3", title = "Third Choice"),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
val result = createElicitation(
|
||||
"Please review and update the form fields with defaults",
|
||||
|
|
@ -538,54 +419,17 @@ fun Server.registerConformanceTools() {
|
|||
description = "test_client_elicitation_defaults",
|
||||
) {
|
||||
val schema = ElicitRequestParams.RequestedSchema(
|
||||
properties = buildJsonObject {
|
||||
put(
|
||||
"name",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("string"))
|
||||
put("description", JsonPrimitive("User name"))
|
||||
put("default", JsonPrimitive("John Doe"))
|
||||
},
|
||||
)
|
||||
put(
|
||||
"age",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("integer"))
|
||||
put("description", JsonPrimitive("User age"))
|
||||
put("default", JsonPrimitive(30))
|
||||
},
|
||||
)
|
||||
put(
|
||||
"score",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("number"))
|
||||
put("description", JsonPrimitive("User score"))
|
||||
put("default", JsonPrimitive(95.5))
|
||||
},
|
||||
)
|
||||
put(
|
||||
"status",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("string"))
|
||||
put("description", JsonPrimitive("User status"))
|
||||
put("default", JsonPrimitive("active"))
|
||||
put(
|
||||
"enum",
|
||||
JsonArray(
|
||||
listOf(JsonPrimitive("active"), JsonPrimitive("inactive"), JsonPrimitive("pending")),
|
||||
),
|
||||
)
|
||||
},
|
||||
)
|
||||
put(
|
||||
"verified",
|
||||
buildJsonObject {
|
||||
put("type", JsonPrimitive("boolean"))
|
||||
put("description", JsonPrimitive("Verification status"))
|
||||
put("default", JsonPrimitive(true))
|
||||
},
|
||||
)
|
||||
},
|
||||
properties = mapOf(
|
||||
"name" to StringSchema(description = "User name", default = "John Doe"),
|
||||
"age" to IntegerSchema(description = "User age", default = 30),
|
||||
"score" to DoubleSchema(description = "User score", default = 95.5),
|
||||
"status" to UntitledSingleSelectEnumSchema(
|
||||
description = "User status",
|
||||
enumValues = listOf("active", "inactive", "pending"),
|
||||
default = "active",
|
||||
),
|
||||
"verified" to BooleanSchema(description = "Verification status", default = true),
|
||||
),
|
||||
required = emptyList(),
|
||||
)
|
||||
val result = createElicitation(
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import io.modelcontextprotocol.kotlin.sdk.shared.TransportSendOptions
|
|||
import io.modelcontextprotocol.kotlin.sdk.types.ClientCapabilities
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequest
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageResult
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestFormParams
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestParams
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitResult
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.EmptyJsonObject
|
||||
|
|
@ -35,6 +36,7 @@ import io.modelcontextprotocol.kotlin.sdk.types.Root
|
|||
import io.modelcontextprotocol.kotlin.sdk.types.RootsListChangedNotification
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.SUPPORTED_PROTOCOL_VERSIONS
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ServerCapabilities
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.StringSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.Tool
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema
|
||||
|
|
@ -48,7 +50,6 @@ import kotlinx.coroutines.test.runTest
|
|||
import kotlinx.coroutines.withTimeout
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
import kotlinx.serialization.json.put
|
||||
import kotlinx.serialization.json.putJsonObject
|
||||
import kotlin.coroutines.cancellation.CancellationException
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
|
@ -953,11 +954,7 @@ class ClientTest {
|
|||
serverSession.createElicitation(
|
||||
message = "Please provide your GitHub username",
|
||||
requestedSchema = ElicitRequestParams.RequestedSchema(
|
||||
properties = buildJsonObject {
|
||||
putJsonObject("name") {
|
||||
put("type", "string")
|
||||
}
|
||||
},
|
||||
properties = mapOf("name" to StringSchema()),
|
||||
required = listOf("name"),
|
||||
),
|
||||
)
|
||||
|
|
@ -1061,11 +1058,7 @@ class ClientTest {
|
|||
|
||||
val elicitationMessage = "Please provide your GitHub username"
|
||||
val requestedSchema = ElicitRequestParams.RequestedSchema(
|
||||
properties = buildJsonObject {
|
||||
putJsonObject("name") {
|
||||
put("type", "string")
|
||||
}
|
||||
},
|
||||
properties = mapOf("name" to StringSchema()),
|
||||
required = listOf("name"),
|
||||
)
|
||||
|
||||
|
|
@ -1076,7 +1069,8 @@ class ClientTest {
|
|||
|
||||
client.setElicitationHandler { request ->
|
||||
assertEquals(elicitationMessage, request.params.message)
|
||||
assertEquals(requestedSchema, request.params.requestedSchema)
|
||||
val formParams = request.params as ElicitRequestFormParams
|
||||
assertEquals(requestedSchema, formParams.requestedSchema)
|
||||
|
||||
ElicitResult(
|
||||
action = elicitationResultAction,
|
||||
|
|
|
|||
|
|
@ -336,6 +336,40 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/BlobResourceContents
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/BooleanSchema : io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema$Companion;
|
||||
public fun <init> ()V
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/lang/Boolean;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;)Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getDefault ()Ljava/lang/Boolean;
|
||||
public final fun getDescription ()Ljava/lang/String;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/BooleanSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/BooleanSchema;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/BooleanSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/CallToolRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequest$Companion;
|
||||
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/CallToolRequestParams;)V
|
||||
|
|
@ -1134,6 +1168,44 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/CustomRequest$Compan
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/DoubleSchema : io/modelcontextprotocol/kotlin/sdk/types/NumberSchemaDefinition {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema$Companion;
|
||||
public fun <init> ()V
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/lang/Double;
|
||||
public final fun component4 ()Ljava/lang/Double;
|
||||
public final fun component5 ()Ljava/lang/Double;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;)Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Double;Ljava/lang/Double;Ljava/lang/Double;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getDefault ()Ljava/lang/Double;
|
||||
public final fun getDescription ()Ljava/lang/String;
|
||||
public final fun getMaximum ()Ljava/lang/Double;
|
||||
public final fun getMinimum ()Ljava/lang/Double;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/DoubleSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/DoubleSchema;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/DoubleSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequest : io/modelcontextprotocol/kotlin/sdk/types/ServerRequest {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest$Companion;
|
||||
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;)V
|
||||
|
|
@ -1176,49 +1248,63 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestBuilder
|
|||
public final fun setMessage (Ljava/lang/String;)V
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams : io/modelcontextprotocol/kotlin/sdk/types/RequestParams {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$Companion;
|
||||
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams : io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams$Companion;
|
||||
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
|
||||
public final fun component3-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
|
||||
public final fun copy-EDEVuBg (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;
|
||||
public static synthetic fun copy-EDEVuBg$default (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;
|
||||
public final fun component2 ()Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;
|
||||
public final fun component3 ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
|
||||
public final fun component4-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
|
||||
public final fun copy-6R815Ik (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;
|
||||
public static synthetic fun copy-6R815Ik$default (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getMessage ()Ljava/lang/String;
|
||||
public fun getMessage ()Ljava/lang/String;
|
||||
public fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
|
||||
public final fun getMode ()Ljava/lang/String;
|
||||
public final fun getRequestedSchema ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
|
||||
public final fun getTask ()Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$$serializer;
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams;)V
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams : io/modelcontextprotocol/kotlin/sdk/types/RequestParams {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$Companion;
|
||||
public abstract fun getMessage ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema$Companion;
|
||||
public fun <init> (Lkotlinx/serialization/json/JsonObject;Ljava/util/List;)V
|
||||
public synthetic fun <init> (Lkotlinx/serialization/json/JsonObject;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Lkotlinx/serialization/json/JsonObject;
|
||||
public final fun component2 ()Ljava/util/List;
|
||||
public final fun copy (Lkotlinx/serialization/json/JsonObject;Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
|
||||
public fun <init> (Ljava/lang/String;Ljava/util/Map;Ljava/util/List;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/util/Map;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/util/Map;
|
||||
public final fun component3 ()Ljava/util/List;
|
||||
public final fun copy (Ljava/lang/String;Ljava/util/Map;Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Ljava/lang/String;Ljava/util/Map;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getProperties ()Lkotlinx/serialization/json/JsonObject;
|
||||
public final fun getProperties ()Ljava/util/Map;
|
||||
public final fun getRequired ()Ljava/util/List;
|
||||
public final fun getSchema ()Ljava/lang/String;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
|
|
@ -1239,6 +1325,43 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams : io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams$Companion;
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lkotlinx/serialization/json/JsonObject;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/lang/String;
|
||||
public final fun component4 ()Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;
|
||||
public final fun component5-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
|
||||
public final fun copy-4asOmiE (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams;
|
||||
public static synthetic fun copy-4asOmiE$default (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getElicitationId ()Ljava/lang/String;
|
||||
public fun getMessage ()Ljava/lang/String;
|
||||
public fun getMeta-VI-3G7E ()Lkotlinx/serialization/json/JsonObject;
|
||||
public final fun getMode ()Ljava/lang/String;
|
||||
public final fun getTask ()Lio/modelcontextprotocol/kotlin/sdk/types/TaskMetadata;
|
||||
public final fun getUrl ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestURLParams$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitRequestedSchemaBuilder {
|
||||
public fun <init> ()V
|
||||
public final fun build ()Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;
|
||||
|
|
@ -1294,6 +1417,11 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitResult$Compani
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ElicitationKt {
|
||||
public static final fun ElicitRequestParams-EDEVuBg (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;
|
||||
public static synthetic fun ElicitRequestParams-EDEVuBg$default (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestFormParams;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/Elicitation_dslKt {
|
||||
public static final fun buildElicitRequest (Lkotlin/jvm/functions/Function1;)Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest;
|
||||
}
|
||||
|
|
@ -1360,6 +1488,43 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/EmptyResult$Companio
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/EnumOption {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption$Companion;
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption;Ljava/lang/String;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getConst ()Ljava/lang/String;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/EnumOption$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/EnumOption;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/EnumOption$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition : io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition$Companion;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/GetPromptRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequest$Companion;
|
||||
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/GetPromptRequestParams;)V
|
||||
|
|
@ -1955,6 +2120,44 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/InitializedNotificat
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/IntegerSchema : io/modelcontextprotocol/kotlin/sdk/types/NumberSchemaDefinition {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema$Companion;
|
||||
public fun <init> ()V
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/lang/Integer;
|
||||
public final fun component4 ()Ljava/lang/Integer;
|
||||
public final fun component5 ()Ljava/lang/Integer;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;)Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Integer;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getDefault ()Ljava/lang/Integer;
|
||||
public final fun getDescription ()Ljava/lang/String;
|
||||
public final fun getMaximum ()Ljava/lang/Integer;
|
||||
public final fun getMinimum ()Ljava/lang/Integer;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/IntegerSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/IntegerSchema;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/IntegerSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/JSONRPCEmptyMessage : io/modelcontextprotocol/kotlin/sdk/types/JSONRPCMessage {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/JSONRPCEmptyMessage;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
|
|
@ -2119,6 +2322,43 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/JsonUtilsKt {
|
|||
public static final fun toJson (Ljava/util/Map;)Ljava/util/Map;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema$Companion;
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/util/List;
|
||||
public final fun component4 ()Ljava/util/List;
|
||||
public final fun component5 ()Ljava/lang/String;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getDefault ()Ljava/lang/String;
|
||||
public final fun getDescription ()Ljava/lang/String;
|
||||
public final fun getEnumNames ()Ljava/util/List;
|
||||
public final fun getEnumValues ()Ljava/util/List;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/LegacyTitledEnumSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/ListPromptsRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest, io/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/ListPromptsRequest$Companion;
|
||||
public fun <init> ()V
|
||||
|
|
@ -2796,6 +3036,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/ModelPreferences$Com
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/MultiSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/MultiSelectEnumSchema$Companion;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/MultiSelectEnumSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/Notification {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/Notification$Companion;
|
||||
public abstract fun getMethod ()Lio/modelcontextprotocol/kotlin/sdk/types/Method;
|
||||
|
|
@ -2814,6 +3062,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/NotificationParams$C
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/NumberSchemaDefinition : io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/NumberSchemaDefinition$Companion;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/NumberSchemaDefinition$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest : io/modelcontextprotocol/kotlin/sdk/types/Request {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/PaginatedRequest$Companion;
|
||||
public fun getCursor ()Ljava/lang/String;
|
||||
|
|
@ -2917,6 +3173,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/PingRequest_dslKt {
|
|||
public static final fun buildPingRequest (Lkotlin/jvm/functions/Function1;)Lio/modelcontextprotocol/kotlin/sdk/types/PingRequest;
|
||||
}
|
||||
|
||||
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition$Companion;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/Progress {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/Progress$Companion;
|
||||
public fun <init> (DLjava/lang/Double;Ljava/lang/String;)V
|
||||
|
|
@ -4141,6 +4405,14 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/SetLevelRequestParam
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/SingleSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/EnumSchemaDefinition {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/SingleSelectEnumSchema$Companion;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/SingleSelectEnumSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/StopReason {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/StopReason$Companion;
|
||||
public static final synthetic fun box-impl (Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/StopReason;
|
||||
|
|
@ -4174,6 +4446,61 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/StopReason$Companion
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/StringSchema : io/modelcontextprotocol/kotlin/sdk/types/PrimitiveSchemaDefinition {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema$Companion;
|
||||
public fun <init> ()V
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;Ljava/lang/String;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/lang/Integer;
|
||||
public final fun component4 ()Ljava/lang/Integer;
|
||||
public final fun component5 ()Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
|
||||
public final fun component6 ()Ljava/lang/String;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getDefault ()Ljava/lang/String;
|
||||
public final fun getDescription ()Ljava/lang/String;
|
||||
public final fun getFormat ()Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
|
||||
public final fun getMaxLength ()Ljava/lang/Integer;
|
||||
public final fun getMinLength ()Ljava/lang/Integer;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/StringSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/StringSchema;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/StringSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat : java/lang/Enum {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat$Companion;
|
||||
public static final field Date Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
|
||||
public static final field DateTime Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
|
||||
public static final field Email Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
|
||||
public static final field Uri Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
|
||||
public static fun getEntries ()Lkotlin/enums/EnumEntries;
|
||||
public static fun valueOf (Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
|
||||
public static fun values ()[Lio/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/StringSchemaFormat$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/SubscribeRequest : io/modelcontextprotocol/kotlin/sdk/types/ClientRequest {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequest$Companion;
|
||||
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/types/SubscribeRequestParams;)V
|
||||
|
|
@ -4503,6 +4830,107 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/TextResourceContents
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/MultiSelectEnumSchema {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Companion;
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;Ljava/util/List;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/lang/Integer;
|
||||
public final fun component4 ()Ljava/lang/Integer;
|
||||
public final fun component5 ()Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;
|
||||
public final fun component6 ()Ljava/util/List;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getDefault ()Ljava/util/List;
|
||||
public final fun getDescription ()Ljava/lang/String;
|
||||
public final fun getItems ()Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;
|
||||
public final fun getMaxItems ()Ljava/lang/Integer;
|
||||
public final fun getMinItems ()Ljava/lang/Integer;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items$Companion;
|
||||
public fun <init> (Ljava/util/List;)V
|
||||
public final fun component1 ()Ljava/util/List;
|
||||
public final fun copy (Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getAnyOf ()Ljava/util/List;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledMultiSelectEnumSchema$Items$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/SingleSelectEnumSchema {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema$Companion;
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/util/List;
|
||||
public final fun component4 ()Ljava/lang/String;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getDefault ()Ljava/lang/String;
|
||||
public final fun getDescription ()Ljava/lang/String;
|
||||
public final fun getOneOf ()Ljava/util/List;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/TitledSingleSelectEnumSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/Tool : io/modelcontextprotocol/kotlin/sdk/types/WithMeta {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/Tool$Companion;
|
||||
public fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ToolSchema;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ToolSchema;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ToolAnnotations;Ljava/util/List;Lio/modelcontextprotocol/kotlin/sdk/types/ToolExecution;Lkotlinx/serialization/json/JsonObject;)V
|
||||
|
|
@ -4793,6 +5221,108 @@ public final class io/modelcontextprotocol/kotlin/sdk/types/UnsubscribeRequestPa
|
|||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/MultiSelectEnumSchema {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Companion;
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;Ljava/util/List;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/lang/Integer;
|
||||
public final fun component4 ()Ljava/lang/Integer;
|
||||
public final fun component5 ()Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;
|
||||
public final fun component6 ()Ljava/util/List;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;Ljava/lang/Integer;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getDefault ()Ljava/util/List;
|
||||
public final fun getDescription ()Ljava/lang/String;
|
||||
public final fun getItems ()Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;
|
||||
public final fun getMaxItems ()Ljava/lang/Integer;
|
||||
public final fun getMinItems ()Ljava/lang/Integer;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items$Companion;
|
||||
public fun <init> (Ljava/util/List;)V
|
||||
public final fun component1 ()Ljava/util/List;
|
||||
public final fun copy (Ljava/util/List;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;Ljava/util/List;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getEnumValues ()Ljava/util/List;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledMultiSelectEnumSchema$Items$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema : io/modelcontextprotocol/kotlin/sdk/types/SingleSelectEnumSchema {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema$Companion;
|
||||
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)V
|
||||
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
|
||||
public final fun component1 ()Ljava/lang/String;
|
||||
public final fun component2 ()Ljava/lang/String;
|
||||
public final fun component3 ()Ljava/util/List;
|
||||
public final fun component4 ()Ljava/lang/String;
|
||||
public final fun copy (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema;
|
||||
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
public final fun getDefault ()Ljava/lang/String;
|
||||
public final fun getDescription ()Ljava/lang/String;
|
||||
public final fun getEnumValues ()Ljava/util/List;
|
||||
public final fun getTitle ()Ljava/lang/String;
|
||||
public final fun getType ()Ljava/lang/String;
|
||||
public fun hashCode ()I
|
||||
public fun toString ()Ljava/lang/String;
|
||||
}
|
||||
|
||||
public final synthetic class io/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
|
||||
public static final field INSTANCE Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema$$serializer;
|
||||
public final fun childSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
public final fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema;
|
||||
public synthetic fun deserialize (Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object;
|
||||
public final fun getDescriptor ()Lkotlinx/serialization/descriptors/SerialDescriptor;
|
||||
public final fun serialize (Lkotlinx/serialization/encoding/Encoder;Lio/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema;)V
|
||||
public synthetic fun serialize (Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V
|
||||
public fun typeParametersSerializers ()[Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public final class io/modelcontextprotocol/kotlin/sdk/types/UntitledSingleSelectEnumSchema$Companion {
|
||||
public final fun serializer ()Lkotlinx/serialization/KSerializer;
|
||||
}
|
||||
|
||||
public abstract interface class io/modelcontextprotocol/kotlin/sdk/types/WithMeta {
|
||||
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/types/WithMeta$Companion;
|
||||
public abstract fun getMeta ()Lkotlinx/serialization/json/JsonObject;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import io.modelcontextprotocol.kotlin.sdk.ExperimentalMcpApi
|
|||
import kotlinx.serialization.json.JsonObject
|
||||
import kotlinx.serialization.json.JsonObjectBuilder
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
import kotlinx.serialization.json.decodeFromJsonElement
|
||||
import kotlin.contracts.ExperimentalContracts
|
||||
import kotlin.contracts.InvocationKind
|
||||
import kotlin.contracts.contract
|
||||
|
|
@ -223,6 +224,9 @@ public class ElicitRequestedSchemaBuilder @PublishedApi internal constructor() {
|
|||
val properties = requireNotNull(properties) {
|
||||
"Missing required field 'properties'. Use properties { put(\"fieldName\", schema) }"
|
||||
}
|
||||
return ElicitRequestParams.RequestedSchema(properties, required)
|
||||
val typedProperties: Map<String, PrimitiveSchemaDefinition> = properties.mapValues { (_, value) ->
|
||||
McpJson.decodeFromJsonElement<PrimitiveSchemaDefinition>(value)
|
||||
}
|
||||
return ElicitRequestParams.RequestedSchema(properties = typedProperties, required = required)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,23 +1,20 @@
|
|||
package io.modelcontextprotocol.kotlin.sdk.types
|
||||
|
||||
import kotlinx.serialization.EncodeDefault
|
||||
import kotlinx.serialization.ExperimentalSerializationApi
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
import kotlinx.serialization.json.JsonObject
|
||||
|
||||
/**
|
||||
* A request from the server to elicit additional information from the user via the client.
|
||||
* Represents an `elicitation/create` request from the server to the client.
|
||||
*
|
||||
* This request type allows servers to prompt users for structured input through forms
|
||||
* or dialogs presented by the client. The server defines a schema for the requested data,
|
||||
* and the client presents an appropriate UI to collect this information.
|
||||
* Supports two modes: form mode ([ElicitRequestFormParams]) for collecting structured data
|
||||
* in-band, and URL mode ([ElicitRequestURLParams]) for directing the user to an external URL.
|
||||
*
|
||||
* @property params The elicitation parameters including the message and requested schema.
|
||||
* @property params The elicitation parameters — either form or URL mode.
|
||||
*/
|
||||
@Serializable
|
||||
public data class ElicitRequest(override val params: ElicitRequestParams) : ServerRequest {
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
@EncodeDefault
|
||||
public override val method: Method = Method.Defined.ElicitationCreate
|
||||
|
||||
|
|
@ -30,8 +27,13 @@ public data class ElicitRequest(override val params: ElicitRequestParams) : Serv
|
|||
/**
|
||||
* A restricted subset of JSON Schema defining the structure of the requested data.
|
||||
*/
|
||||
public val requestedSchema: ElicitRequestParams.RequestedSchema
|
||||
get() = params.requestedSchema
|
||||
@Deprecated(
|
||||
"Use (params as ElicitRequestFormParams).requestedSchema",
|
||||
ReplaceWith("(params as ElicitRequestFormParams).requestedSchema"),
|
||||
DeprecationLevel.WARNING,
|
||||
)
|
||||
public val requestedSchema: ElicitRequestParams.RequestedSchema?
|
||||
get() = (params as? ElicitRequestFormParams)?.requestedSchema
|
||||
|
||||
/**
|
||||
* Metadata for this request. May include a progressToken for out-of-band progress notifications.
|
||||
|
|
@ -41,23 +43,13 @@ public data class ElicitRequest(override val params: ElicitRequestParams) : Serv
|
|||
}
|
||||
|
||||
/**
|
||||
* Parameters for an elicitation/create request.
|
||||
* Represents the parameters for an `elicitation/create` request.
|
||||
*
|
||||
* @property message The message to present to the user. This should clearly explain
|
||||
* what information is being requested and why.
|
||||
* @property requestedSchema A restricted subset of JSON Schema defining the structure
|
||||
* of the requested data. Only top-level properties are allowed,
|
||||
* without nesting.
|
||||
* @property meta Optional metadata for this request. May include a progressToken for
|
||||
* out-of-band progress notifications.
|
||||
* Implementations: [ElicitRequestFormParams], [ElicitRequestURLParams].
|
||||
*/
|
||||
@Serializable
|
||||
public data class ElicitRequestParams(
|
||||
val message: String,
|
||||
val requestedSchema: RequestedSchema,
|
||||
@SerialName("_meta")
|
||||
override val meta: RequestMeta? = null,
|
||||
) : RequestParams {
|
||||
@Serializable(with = ElicitRequestParamsSerializer::class)
|
||||
public sealed interface ElicitRequestParams : RequestParams {
|
||||
public val message: String
|
||||
|
||||
/**
|
||||
* A restricted JSON Schema for elicitation requests.
|
||||
|
|
@ -65,6 +57,7 @@ public data class ElicitRequestParams(
|
|||
* Only supports top-level primitive properties without nesting. Each property
|
||||
* represents a field in the form or dialog presented to the user.
|
||||
*
|
||||
* @property schema Optional URI to a JSON Schema definition.
|
||||
* @property properties A map of property names to their schema definitions.
|
||||
* Each property must be a primitive type (string, number, boolean).
|
||||
* @property required Optional list of property names that must be provided by the user.
|
||||
|
|
@ -72,24 +65,102 @@ public data class ElicitRequestParams(
|
|||
* @property type Always "object" for elicitation schemas.
|
||||
*/
|
||||
@Serializable
|
||||
public data class RequestedSchema(val properties: JsonObject, val required: List<String>? = null) {
|
||||
@OptIn(ExperimentalSerializationApi::class)
|
||||
public data class RequestedSchema(
|
||||
@SerialName($$"$schema")
|
||||
val schema: String? = null,
|
||||
val properties: Map<String, PrimitiveSchemaDefinition>,
|
||||
val required: List<String>? = null,
|
||||
) {
|
||||
@EncodeDefault
|
||||
val type: String = "object"
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The client's response to an [ElicitRequest].
|
||||
* Creates an [ElicitRequestFormParams] for backwards compatibility.
|
||||
*
|
||||
* Represents the user's action and, if accepted, the submitted form data.
|
||||
* @param message The message to present to the user.
|
||||
* @param requestedSchema The JSON Schema for the requested data.
|
||||
* @param meta Optional request metadata.
|
||||
* @return A configured [ElicitRequestFormParams] instance.
|
||||
*/
|
||||
@Deprecated(
|
||||
"Use ElicitRequestFormParams instead",
|
||||
ReplaceWith("ElicitRequestFormParams(message, requestedSchema = requestedSchema, meta = meta)"),
|
||||
DeprecationLevel.WARNING,
|
||||
)
|
||||
@Suppress("FunctionNaming", "FunctionName")
|
||||
public fun ElicitRequestParams(
|
||||
message: String,
|
||||
requestedSchema: ElicitRequestParams.RequestedSchema,
|
||||
meta: RequestMeta? = null,
|
||||
): ElicitRequestFormParams = ElicitRequestFormParams(
|
||||
message = message,
|
||||
requestedSchema = requestedSchema,
|
||||
meta = meta,
|
||||
)
|
||||
|
||||
/**
|
||||
* Represents form mode parameters for an `elicitation/create` request.
|
||||
*
|
||||
* @property action The user action in response to the elicitation prompt.
|
||||
* @property content The submitted form data, only present when [action] is [Action.Accept].
|
||||
* Contains values matching the requested schema, where keys correspond
|
||||
* to property names and values are primitives (string, number, or boolean).
|
||||
* Collects non-sensitive structured data from the user via a form presented by the client.
|
||||
*
|
||||
* @property message The message to present to the user describing what information is being requested.
|
||||
* @property task If specified, the caller is requesting task-augmented execution. The request
|
||||
* will return a [CreateTaskResult] immediately, and the actual result can be retrieved
|
||||
* later via `tasks/result`.
|
||||
* @property requestedSchema A restricted subset of JSON Schema. Only top-level properties
|
||||
* are allowed, without nesting.
|
||||
* @property meta Optional metadata. May include a progressToken for out-of-band progress notifications.
|
||||
*/
|
||||
@Serializable
|
||||
public data class ElicitRequestFormParams(
|
||||
override val message: String,
|
||||
val task: TaskMetadata? = null,
|
||||
val requestedSchema: ElicitRequestParams.RequestedSchema,
|
||||
@SerialName("_meta")
|
||||
override val meta: RequestMeta? = null,
|
||||
) : ElicitRequestParams {
|
||||
@EncodeDefault
|
||||
public val mode: String = "form"
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents URL mode parameters for an `elicitation/create` request.
|
||||
*
|
||||
* Directs the user to an external URL for out-of-band interactions (e.g., OAuth flows,
|
||||
* payment processing, or entering sensitive credentials) that must not pass through the MCP client.
|
||||
*
|
||||
* @property message The message explaining why the interaction is needed.
|
||||
* @property elicitationId A unique identifier for this elicitation. The client MUST treat
|
||||
* this ID as an opaque value.
|
||||
* @property url The URL that the user should navigate to.
|
||||
* @property task If specified, the caller is requesting task-augmented execution. The request
|
||||
* will return a [CreateTaskResult] immediately, and the actual result can be retrieved
|
||||
* later via `tasks/result`.
|
||||
* @property meta Optional metadata. May include a progressToken for out-of-band progress notifications.
|
||||
*/
|
||||
@Serializable
|
||||
public data class ElicitRequestURLParams(
|
||||
override val message: String,
|
||||
val elicitationId: String,
|
||||
val url: String,
|
||||
val task: TaskMetadata? = null,
|
||||
@SerialName("_meta")
|
||||
override val meta: RequestMeta? = null,
|
||||
) : ElicitRequestParams {
|
||||
@EncodeDefault
|
||||
public val mode: String = "url"
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents the client's response to an [ElicitRequest].
|
||||
*
|
||||
* @property action The user action in response to the elicitation.
|
||||
* @property content The submitted form data, only present when [action] is [Action.Accept]
|
||||
* and mode was form. Contains values matching the requested schema. Omitted for
|
||||
* URL mode responses.
|
||||
* @property meta Optional metadata for this response.
|
||||
* @throws IllegalArgumentException if content is provided with a non-accept action.
|
||||
*/
|
||||
@Serializable
|
||||
public data class ElicitResult(
|
||||
|
|
|
|||
|
|
@ -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>)
|
||||
}
|
||||
|
|
@ -12,6 +12,7 @@ import kotlinx.serialization.encoding.Encoder
|
|||
import kotlinx.serialization.json.JsonContentPolymorphicSerializer
|
||||
import kotlinx.serialization.json.JsonElement
|
||||
import kotlinx.serialization.json.JsonPrimitive
|
||||
import kotlinx.serialization.json.contentOrNull
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import kotlinx.serialization.json.longOrNull
|
||||
|
|
@ -420,3 +421,80 @@ internal object RequestIdPolymorphicSerializer : JsonContentPolymorphicSerialize
|
|||
else -> throw SerializationException("Invalid RequestId type: $element")
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// ElicitationParams Serializers
|
||||
// ============================================================================
|
||||
|
||||
internal object ElicitRequestParamsSerializer : JsonContentPolymorphicSerializer<ElicitRequestParams>(
|
||||
ElicitRequestParams::class,
|
||||
) {
|
||||
@Suppress("ThrowsCount")
|
||||
override fun selectDeserializer(element: JsonElement): DeserializationStrategy<ElicitRequestParams> {
|
||||
val mode = when (val modeElement = element.jsonObject["mode"]) {
|
||||
null -> null
|
||||
|
||||
is JsonPrimitive -> {
|
||||
if (!modeElement.isString) {
|
||||
throw SerializationException("Invalid 'mode' type: expected string but was: $modeElement")
|
||||
}
|
||||
modeElement.contentOrNull
|
||||
}
|
||||
|
||||
else -> throw SerializationException("Invalid 'mode' type: expected string but was: $modeElement")
|
||||
}
|
||||
return when (mode) {
|
||||
"url" -> ElicitRequestURLParams.serializer()
|
||||
"form", null -> ElicitRequestFormParams.serializer()
|
||||
else -> throw SerializationException("Unsupported elicitation mode: '$mode'")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// PrimitiveSchemaDefinition Serializers
|
||||
// ============================================================================
|
||||
|
||||
internal object PrimitiveSchemaDefinitionSerializer : JsonContentPolymorphicSerializer<PrimitiveSchemaDefinition>(
|
||||
PrimitiveSchemaDefinition::class,
|
||||
) {
|
||||
@Suppress("ThrowsCount")
|
||||
override fun selectDeserializer(element: JsonElement): DeserializationStrategy<PrimitiveSchemaDefinition> {
|
||||
val obj = element.jsonObject
|
||||
val typeElement = obj["type"]
|
||||
?: throw SerializationException("Missing 'type' in PrimitiveSchemaDefinition: $element")
|
||||
val type = if (typeElement is JsonPrimitive && typeElement.isString) {
|
||||
typeElement.content
|
||||
} else {
|
||||
throw SerializationException("Expected 'type' to be a string but was: $typeElement")
|
||||
}
|
||||
return when (type) {
|
||||
"boolean" -> BooleanSchema.serializer()
|
||||
"integer" -> IntegerSchema.serializer()
|
||||
"number" -> DoubleSchema.serializer()
|
||||
"string" -> selectStringTypeDeserializer(obj)
|
||||
"array" -> selectArrayTypeDeserializer(obj)
|
||||
else -> throw SerializationException("Unknown PrimitiveSchemaDefinition type: '$type'")
|
||||
}
|
||||
}
|
||||
|
||||
private fun selectArrayTypeDeserializer(
|
||||
obj: Map<String, JsonElement>,
|
||||
): DeserializationStrategy<PrimitiveSchemaDefinition> {
|
||||
val items = obj["items"]?.jsonObject
|
||||
return when {
|
||||
items != null && "anyOf" in items -> TitledMultiSelectEnumSchema.serializer()
|
||||
else -> UntitledMultiSelectEnumSchema.serializer()
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
private fun selectStringTypeDeserializer(
|
||||
obj: Map<String, JsonElement>,
|
||||
): DeserializationStrategy<PrimitiveSchemaDefinition> = when {
|
||||
"enumNames" in obj -> LegacyTitledEnumSchema.serializer()
|
||||
"enum" in obj -> UntitledSingleSelectEnumSchema.serializer()
|
||||
"oneOf" in obj -> TitledSingleSelectEnumSchema.serializer()
|
||||
else -> StringSchema.serializer()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,58 +1,39 @@
|
|||
package io.modelcontextprotocol.kotlin.sdk.types
|
||||
|
||||
import io.kotest.assertions.json.shouldEqualJson
|
||||
import io.kotest.assertions.throwables.shouldThrow
|
||||
import io.kotest.matchers.nulls.shouldBeNull
|
||||
import io.kotest.matchers.nulls.shouldNotBeNull
|
||||
import io.kotest.matchers.shouldBe
|
||||
import io.kotest.matchers.types.shouldBeInstanceOf
|
||||
import io.modelcontextprotocol.kotlin.test.utils.verifyDeserialization
|
||||
import io.modelcontextprotocol.kotlin.test.utils.verifySerialization
|
||||
import kotlinx.serialization.json.boolean
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
import kotlinx.serialization.json.int
|
||||
import kotlinx.serialization.json.jsonObject
|
||||
import kotlinx.serialization.json.jsonPrimitive
|
||||
import kotlinx.serialization.json.put
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertFailsWith
|
||||
import kotlin.test.assertNotNull
|
||||
import kotlin.test.assertNull
|
||||
|
||||
class ElicitationTest {
|
||||
|
||||
// ── Form mode ───────────────────────────────────────────────────────
|
||||
|
||||
@Test
|
||||
@Suppress("LongMethod")
|
||||
fun `should serialize ElicitRequest with requested schema`() {
|
||||
fun `should serialize form mode ElicitRequest`() {
|
||||
val request = ElicitRequest(
|
||||
ElicitRequestParams(
|
||||
ElicitRequestFormParams(
|
||||
message = "Provide repository details",
|
||||
requestedSchema = ElicitRequestParams.RequestedSchema(
|
||||
properties = buildJsonObject {
|
||||
put(
|
||||
"owner",
|
||||
buildJsonObject {
|
||||
put("type", "string")
|
||||
put("description", "GitHub organization")
|
||||
},
|
||||
)
|
||||
put(
|
||||
"repository",
|
||||
buildJsonObject {
|
||||
put("type", "string")
|
||||
put("title", "Repository name")
|
||||
},
|
||||
)
|
||||
put(
|
||||
"private",
|
||||
buildJsonObject {
|
||||
put("type", "boolean")
|
||||
put("description", "Is the repository private?")
|
||||
},
|
||||
)
|
||||
},
|
||||
properties = mapOf(
|
||||
"owner" to StringSchema(description = "GitHub organization"),
|
||||
"repository" to StringSchema(title = "Repository name"),
|
||||
"private" to BooleanSchema(description = "Is the repository private?"),
|
||||
),
|
||||
required = listOf("owner", "repository"),
|
||||
),
|
||||
meta = RequestMeta(
|
||||
buildJsonObject {
|
||||
put("progressToken", "token-42")
|
||||
},
|
||||
buildJsonObject { put("progressToken", "token-42") },
|
||||
),
|
||||
),
|
||||
)
|
||||
|
|
@ -68,16 +49,16 @@ class ElicitationTest {
|
|||
"requestedSchema": {
|
||||
"properties": {
|
||||
"owner": {
|
||||
"type": "string",
|
||||
"description": "GitHub organization"
|
||||
"description": "GitHub organization",
|
||||
"type": "string"
|
||||
},
|
||||
"repository": {
|
||||
"type": "string",
|
||||
"title": "Repository name"
|
||||
"title": "Repository name",
|
||||
"type": "string"
|
||||
},
|
||||
"private": {
|
||||
"type": "boolean",
|
||||
"description": "Is the repository private?"
|
||||
"description": "Is the repository private?",
|
||||
"type": "boolean"
|
||||
}
|
||||
},
|
||||
"required": ["owner", "repository"],
|
||||
|
|
@ -85,7 +66,8 @@ class ElicitationTest {
|
|||
},
|
||||
"_meta": {
|
||||
"progressToken": "token-42"
|
||||
}
|
||||
},
|
||||
"mode": "form"
|
||||
}
|
||||
}
|
||||
""".trimIndent(),
|
||||
|
|
@ -93,22 +75,16 @@ class ElicitationTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun `should deserialize ElicitRequest from JSON`() {
|
||||
fun `should deserialize form mode ElicitRequest with explicit mode`() {
|
||||
val json = """
|
||||
{
|
||||
"method": "elicitation/create",
|
||||
"params": {
|
||||
"message": "Tell us about the repository",
|
||||
"mode": "form",
|
||||
"message": "Enter your name",
|
||||
"requestedSchema": {
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"title": "Repository name"
|
||||
},
|
||||
"stars": {
|
||||
"type": "number",
|
||||
"description": "GitHub stars"
|
||||
}
|
||||
"name": {"type": "string", "title": "Full name"}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
|
|
@ -117,27 +93,121 @@ class ElicitationTest {
|
|||
""".trimIndent()
|
||||
|
||||
val request = verifyDeserialization<ElicitRequest>(McpJson, json)
|
||||
assertEquals(Method.Defined.ElicitationCreate, request.method)
|
||||
request.method shouldBe Method.Defined.ElicitationCreate
|
||||
request.message shouldBe "Enter your name"
|
||||
|
||||
val params = request.params
|
||||
assertEquals("Tell us about the repository", params.message)
|
||||
assertNull(params.meta)
|
||||
|
||||
val schema = params.requestedSchema
|
||||
assertEquals("object", schema.type)
|
||||
assertNull(schema.required)
|
||||
|
||||
val nameDefinition = schema.properties["name"]?.jsonObject
|
||||
assertNotNull(nameDefinition)
|
||||
assertEquals("string", nameDefinition["type"]?.jsonPrimitive?.content)
|
||||
assertEquals("Repository name", nameDefinition["title"]?.jsonPrimitive?.content)
|
||||
|
||||
val starsDefinition = schema.properties["stars"]?.jsonObject
|
||||
assertNotNull(starsDefinition)
|
||||
assertEquals("number", starsDefinition["type"]?.jsonPrimitive?.content)
|
||||
assertEquals("GitHub stars", starsDefinition["description"]?.jsonPrimitive?.content)
|
||||
val params = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
|
||||
val nameSchema = params.requestedSchema.properties["name"].shouldBeInstanceOf<StringSchema>()
|
||||
nameSchema.title shouldBe "Full name"
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should deserialize form mode ElicitRequest without mode field`() {
|
||||
val json = """
|
||||
{
|
||||
"method": "elicitation/create",
|
||||
"params": {
|
||||
"message": "Enter your name",
|
||||
"requestedSchema": {
|
||||
"properties": {
|
||||
"name": {"type": "string"}
|
||||
},
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
|
||||
val request = McpJson.decodeFromString<ElicitRequest>(json)
|
||||
request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
|
||||
request.params.message shouldBe "Enter your name"
|
||||
}
|
||||
|
||||
// ── URL mode ────────────────────────────────────────────────────────
|
||||
|
||||
@Test
|
||||
fun `should serialize URL mode ElicitRequest`() {
|
||||
val request = ElicitRequest(
|
||||
ElicitRequestURLParams(
|
||||
message = "Please provide your API key",
|
||||
elicitationId = "550e8400-e29b-41d4-a716-446655440000",
|
||||
url = "https://mcp.example.com/ui/set_api_key",
|
||||
),
|
||||
)
|
||||
|
||||
verifySerialization(
|
||||
request,
|
||||
McpJson,
|
||||
"""
|
||||
{
|
||||
"method": "elicitation/create",
|
||||
"params": {
|
||||
"message": "Please provide your API key",
|
||||
"elicitationId": "550e8400-e29b-41d4-a716-446655440000",
|
||||
"url": "https://mcp.example.com/ui/set_api_key",
|
||||
"mode": "url"
|
||||
}
|
||||
}
|
||||
""".trimIndent(),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should deserialize URL mode ElicitRequest`() {
|
||||
val json = """
|
||||
{
|
||||
"method": "elicitation/create",
|
||||
"params": {
|
||||
"mode": "url",
|
||||
"message": "Authorize access",
|
||||
"elicitationId": "id-123",
|
||||
"url": "https://example.com/auth"
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
|
||||
val request = verifyDeserialization<ElicitRequest>(McpJson, json)
|
||||
val params = request.params.shouldBeInstanceOf<ElicitRequestURLParams>()
|
||||
params.message shouldBe "Authorize access"
|
||||
params.elicitationId shouldBe "id-123"
|
||||
params.url shouldBe "https://example.com/auth"
|
||||
}
|
||||
|
||||
// ── Deprecated compat ───────────────────────────────────────────────
|
||||
|
||||
@Test
|
||||
@Suppress("DEPRECATION")
|
||||
fun `deprecated factory function should create ElicitRequestFormParams`() {
|
||||
val schema = ElicitRequestParams.RequestedSchema(
|
||||
properties = mapOf("name" to StringSchema()),
|
||||
)
|
||||
val params = ElicitRequestParams(message = "Test", requestedSchema = schema)
|
||||
params.shouldBeInstanceOf<ElicitRequestFormParams>()
|
||||
params.message shouldBe "Test"
|
||||
params.requestedSchema shouldBe schema
|
||||
}
|
||||
|
||||
@Test
|
||||
@Suppress("DEPRECATION")
|
||||
fun `deprecated requestedSchema should return schema for form mode`() {
|
||||
val schema = ElicitRequestParams.RequestedSchema(
|
||||
properties = mapOf("x" to BooleanSchema()),
|
||||
)
|
||||
val request = ElicitRequest(ElicitRequestFormParams(message = "m", requestedSchema = schema))
|
||||
request.requestedSchema shouldBe schema
|
||||
}
|
||||
|
||||
@Test
|
||||
@Suppress("DEPRECATION")
|
||||
fun `deprecated requestedSchema should return null for URL mode`() {
|
||||
val request = ElicitRequest(
|
||||
ElicitRequestURLParams(message = "m", elicitationId = "id", url = "https://example.com"),
|
||||
)
|
||||
request.requestedSchema.shouldBeNull()
|
||||
}
|
||||
|
||||
// ── ElicitResult ────────────────────────────────────────────────────
|
||||
|
||||
@Test
|
||||
fun `should serialize and deserialize accept result with content`() {
|
||||
val result = ElicitResult(
|
||||
|
|
@ -169,17 +239,15 @@ class ElicitationTest {
|
|||
""".trimIndent()
|
||||
|
||||
val decoded = verifyDeserialization<ElicitResult>(McpJson, json)
|
||||
assertEquals(ElicitResult.Action.Accept, decoded.action)
|
||||
decoded.action shouldBe ElicitResult.Action.Accept
|
||||
|
||||
val content = decoded.content
|
||||
assertNotNull(content)
|
||||
assertEquals("kotlin-sdk", content["repository"]?.jsonPrimitive?.content)
|
||||
assertEquals(128, content["stars"]?.jsonPrimitive?.int)
|
||||
assertEquals(false, content["private"]?.jsonPrimitive?.boolean)
|
||||
val content = decoded.content.shouldNotBeNull()
|
||||
content["repository"]?.jsonPrimitive?.content shouldBe "kotlin-sdk"
|
||||
content["stars"]?.jsonPrimitive?.int shouldBe 128
|
||||
content["private"]?.jsonPrimitive?.boolean shouldBe false
|
||||
|
||||
val meta = decoded.meta
|
||||
assertNotNull(meta)
|
||||
assertEquals("2025-01-12T15:00:58Z", meta["submittedAt"]?.jsonPrimitive?.content)
|
||||
val meta = decoded.meta.shouldNotBeNull()
|
||||
meta["submittedAt"]?.jsonPrimitive?.content shouldBe "2025-01-12T15:00:58Z"
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -194,14 +262,14 @@ class ElicitationTest {
|
|||
""".trimIndent()
|
||||
|
||||
val result = verifyDeserialization<ElicitResult>(McpJson, json)
|
||||
assertEquals(ElicitResult.Action.Decline, result.action)
|
||||
assertNull(result.content)
|
||||
assertEquals("User skipped", result.meta?.get("reason")?.jsonPrimitive?.content)
|
||||
result.action shouldBe ElicitResult.Action.Decline
|
||||
result.content.shouldBeNull()
|
||||
result.meta?.get("reason")?.jsonPrimitive?.content shouldBe "User skipped"
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `should require content only for accept action`() {
|
||||
assertFailsWith<IllegalArgumentException> {
|
||||
shouldThrow<IllegalArgumentException> {
|
||||
ElicitResult(
|
||||
action = ElicitResult.Action.Cancel,
|
||||
content = buildJsonObject { put("value", "ignored") },
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -2,8 +2,11 @@ package io.modelcontextprotocol.kotlin.sdk.types.dsl
|
|||
|
||||
import io.kotest.assertions.throwables.shouldThrow
|
||||
import io.kotest.matchers.shouldBe
|
||||
import io.kotest.matchers.types.shouldBeInstanceOf
|
||||
import io.modelcontextprotocol.kotlin.sdk.ExperimentalMcpApi
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestFormParams
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestParams
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.StringSchema
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.buildElicitRequest
|
||||
import kotlinx.serialization.json.buildJsonObject
|
||||
import kotlinx.serialization.json.put
|
||||
|
|
@ -24,14 +27,15 @@ class ElicitationDslTest {
|
|||
}
|
||||
|
||||
request.params.message shouldBe "Provide info"
|
||||
request.params.requestedSchema.properties["email"] shouldBe buildJsonObject { put("type", "string") }
|
||||
request.params.requestedSchema.required shouldBe listOf("email")
|
||||
val formParams = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
|
||||
formParams.requestedSchema.properties["email"].shouldBeInstanceOf<StringSchema>()
|
||||
formParams.requestedSchema.required shouldBe listOf("email")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `buildElicitRequest should support direct requestedSchema`() {
|
||||
val schema = ElicitRequestParams.RequestedSchema(
|
||||
properties = buildJsonObject { put("name", buildJsonObject { put("type", "string") }) },
|
||||
properties = mapOf("name" to StringSchema()),
|
||||
required = listOf("name"),
|
||||
)
|
||||
val request = buildElicitRequest {
|
||||
|
|
@ -39,19 +43,20 @@ class ElicitationDslTest {
|
|||
requestedSchema(schema)
|
||||
}
|
||||
|
||||
request.params.requestedSchema shouldBe schema
|
||||
val formParams = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
|
||||
formParams.requestedSchema shouldBe schema
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `ElicitRequestedSchemaBuilder should support direct properties assignment`() {
|
||||
val props = buildJsonObject { put("key", "value") }
|
||||
val request = buildElicitRequest {
|
||||
message = "Test"
|
||||
requestedSchema {
|
||||
properties(props)
|
||||
properties(buildJsonObject { put("key", buildJsonObject { put("type", "string") }) })
|
||||
}
|
||||
}
|
||||
request.params.requestedSchema.properties shouldBe props
|
||||
val formParams = request.params.shouldBeInstanceOf<ElicitRequestFormParams>()
|
||||
formParams.requestedSchema.properties["key"].shouldBeInstanceOf<StringSchema>()
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
public abstract interface class io/modelcontextprotocol/kotlin/sdk/server/ClientConnection {
|
||||
public abstract fun createElicitation (Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public abstract fun createElicitation (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public abstract fun createElicitation (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public abstract fun createMessage (Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public static synthetic fun createMessage$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public abstract fun getSessionId ()Ljava/lang/String;
|
||||
|
|
@ -22,6 +24,7 @@ public abstract interface class io/modelcontextprotocol/kotlin/sdk/server/Client
|
|||
public final class io/modelcontextprotocol/kotlin/sdk/server/ClientConnection$DefaultImpls {
|
||||
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public static synthetic fun createMessage$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public static synthetic fun listRoots$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/ListRootsRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public static synthetic fun notification$default (Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;Lio/modelcontextprotocol/kotlin/sdk/types/ServerNotification;Lio/modelcontextprotocol/kotlin/sdk/types/RequestId;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
|
|
@ -108,7 +111,9 @@ public class io/modelcontextprotocol/kotlin/sdk/server/Server {
|
|||
public final fun clientConnection (Ljava/lang/String;)Lio/modelcontextprotocol/kotlin/sdk/server/ClientConnection;
|
||||
public final fun close (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public final fun createElicitation (Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public final fun createElicitation (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/Server;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/Server;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public final fun createMessage (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public static synthetic fun createMessage$default (Lio/modelcontextprotocol/kotlin/sdk/server/Server;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public final fun createSession (Lio/modelcontextprotocol/kotlin/sdk/shared/Transport;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
|
|
@ -159,7 +164,9 @@ public class io/modelcontextprotocol/kotlin/sdk/server/ServerSession : io/modelc
|
|||
protected fun assertNotificationCapability (Lio/modelcontextprotocol/kotlin/sdk/types/Method;)V
|
||||
public fun assertRequestHandlerCapability (Lio/modelcontextprotocol/kotlin/sdk/types/Method;)V
|
||||
public final fun createElicitation (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public final fun createElicitation (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ServerSession;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/types/ElicitRequestParams$RequestedSchema;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public static synthetic fun createElicitation$default (Lio/modelcontextprotocol/kotlin/sdk/server/ServerSession;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public final fun createMessage (Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public static synthetic fun createMessage$default (Lio/modelcontextprotocol/kotlin/sdk/server/ServerSession;Lio/modelcontextprotocol/kotlin/sdk/types/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
|
||||
public fun equals (Ljava/lang/Object;)Z
|
||||
|
|
|
|||
|
|
@ -5,7 +5,9 @@ import io.modelcontextprotocol.kotlin.sdk.shared.RequestOptions
|
|||
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageRequest
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.CreateMessageResult
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequest
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestFormParams
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestParams
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitRequestURLParams
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ElicitResult
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.EmptyResult
|
||||
import io.modelcontextprotocol.kotlin.sdk.types.ListRootsRequest
|
||||
|
|
@ -104,6 +106,24 @@ public interface ClientConnection {
|
|||
options: RequestOptions? = null,
|
||||
): ElicitResult
|
||||
|
||||
/**
|
||||
* Sends a URL mode elicitation request to the client, directing the user
|
||||
* to an external URL for out-of-band interactions.
|
||||
*
|
||||
* @param message The message explaining why the interaction is needed.
|
||||
* @param elicitationId A unique identifier for the elicitation.
|
||||
* @param url The URL that the user should navigate to.
|
||||
* @param options Optional request options.
|
||||
* @return The result of the elicitation request.
|
||||
* @throws IllegalStateException If the server or client does not support elicitation.
|
||||
*/
|
||||
public suspend fun createElicitation(
|
||||
message: String,
|
||||
elicitationId: String,
|
||||
url: String,
|
||||
options: RequestOptions? = null,
|
||||
): ElicitResult
|
||||
|
||||
/**
|
||||
* Sends a message to the client requesting elicitation.
|
||||
* This typically results in a form being displayed to the user.
|
||||
|
|
@ -189,10 +209,16 @@ internal class ClientConnectionImpl(private val session: ServerSession) : Client
|
|||
}
|
||||
|
||||
override suspend fun createElicitation(request: ElicitRequest, options: RequestOptions?): ElicitResult {
|
||||
with(request.params) {
|
||||
logger.debug {
|
||||
"Creating elicitation with message length=${message.length}, " +
|
||||
"schema properties count=${requestedSchema.properties.size}"
|
||||
val params = request.params
|
||||
logger.debug {
|
||||
when (params) {
|
||||
is ElicitRequestFormParams ->
|
||||
"Creating form elicitation with message length=${params.message.length}, " +
|
||||
"schema properties count=${params.requestedSchema.properties.size}"
|
||||
|
||||
is ElicitRequestURLParams ->
|
||||
"Creating URL elicitation with message length=${params.message.length}, " +
|
||||
"elicitationId=${params.elicitationId}"
|
||||
}
|
||||
}
|
||||
logger.trace { "ElicitRequest: $request" }
|
||||
|
|
@ -204,7 +230,19 @@ internal class ClientConnectionImpl(private val session: ServerSession) : Client
|
|||
requestedSchema: ElicitRequestParams.RequestedSchema,
|
||||
options: RequestOptions?,
|
||||
): ElicitResult = createElicitation(
|
||||
request = ElicitRequest(params = ElicitRequestParams(message, requestedSchema)),
|
||||
request = ElicitRequest(params = ElicitRequestFormParams(message = message, requestedSchema = requestedSchema)),
|
||||
options = options,
|
||||
)
|
||||
|
||||
override suspend fun createElicitation(
|
||||
message: String,
|
||||
elicitationId: String,
|
||||
url: String,
|
||||
options: RequestOptions?,
|
||||
): ElicitResult = createElicitation(
|
||||
request = ElicitRequest(
|
||||
params = ElicitRequestURLParams(message = message, elicitationId = elicitationId, url = url),
|
||||
),
|
||||
options = options,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -780,6 +780,30 @@ public open class Server(
|
|||
options = options,
|
||||
)
|
||||
|
||||
/**
|
||||
* Triggers URL mode [ClientConnection.createElicitation] request for session by provided [sessionId].
|
||||
*
|
||||
* @param sessionId The session ID to create elicitation for.
|
||||
* @param message The message explaining why the interaction is needed.
|
||||
* @param elicitationId A unique identifier for the elicitation.
|
||||
* @param url The URL that the user should navigate to.
|
||||
* @param options Optional request options.
|
||||
* @return The created elicitation result.
|
||||
* @throws IllegalStateException If the server does not support elicitation or if the request fails.
|
||||
*/
|
||||
public suspend fun createElicitation(
|
||||
sessionId: String,
|
||||
message: String,
|
||||
elicitationId: String,
|
||||
url: String,
|
||||
options: RequestOptions? = null,
|
||||
): ElicitResult = clientConnection(sessionId).createElicitation(
|
||||
message = message,
|
||||
elicitationId = elicitationId,
|
||||
url = url,
|
||||
options = options,
|
||||
)
|
||||
|
||||
/**
|
||||
* Triggers [ClientConnection.sendLoggingMessage] for session by provided [sessionId].
|
||||
*
|
||||
|
|
|
|||
|
|
@ -382,6 +382,24 @@ public open class ServerSession(
|
|||
options: RequestOptions? = null,
|
||||
): ElicitResult = clientConnection.createElicitation(message, requestedSchema, options)
|
||||
|
||||
/**
|
||||
* Sends a URL mode elicitation request to the client, directing the user
|
||||
* to an external URL for out-of-band interactions.
|
||||
*
|
||||
* @param message The message explaining why the interaction is needed.
|
||||
* @param elicitationId A unique identifier for the elicitation.
|
||||
* @param url The URL that the user should navigate to.
|
||||
* @param options Optional request options.
|
||||
* @return The result of the elicitation request.
|
||||
* @throws IllegalStateException If the server or client does not support elicitation.
|
||||
*/
|
||||
public suspend fun createElicitation(
|
||||
message: String,
|
||||
elicitationId: String,
|
||||
url: String,
|
||||
options: RequestOptions? = null,
|
||||
): ElicitResult = clientConnection.createElicitation(message, elicitationId, url, options)
|
||||
|
||||
/**
|
||||
* Sends a logging message notification to the client.
|
||||
* Messages are filtered based on the current logging level set by the client.
|
||||
|
|
|
|||
Loading…
Reference in a new issue