Skip to content

Commit 476655b

Browse files
committed
feat(client): add a convenience method to set the elicitation handler
1 parent 3865234 commit 476655b

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

api/kotlin-sdk.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2872,6 +2872,7 @@ public class io/modelcontextprotocol/kotlin/sdk/client/Client : io/modelcontextp
28722872
public final fun removeRoot (Ljava/lang/String;)Z
28732873
public final fun removeRoots (Ljava/util/List;)I
28742874
public final fun sendRootsListChanged (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
2875+
public final fun setElicitationHandler (Lkotlin/jvm/functions/Function1;)V
28752876
public final fun setLoggingLevel (Lio/modelcontextprotocol/kotlin/sdk/LoggingLevel;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
28762877
public static synthetic fun setLoggingLevel$default (Lio/modelcontextprotocol/kotlin/sdk/client/Client;Lio/modelcontextprotocol/kotlin/sdk/LoggingLevel;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
28772878
public final fun subscribeResource (Lio/modelcontextprotocol/kotlin/sdk/SubscribeRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;

src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/client/Client.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import io.modelcontextprotocol.kotlin.sdk.ClientCapabilities
88
import io.modelcontextprotocol.kotlin.sdk.CompatibilityCallToolResult
99
import io.modelcontextprotocol.kotlin.sdk.CompleteRequest
1010
import io.modelcontextprotocol.kotlin.sdk.CompleteResult
11+
import io.modelcontextprotocol.kotlin.sdk.CreateElicitationRequest
12+
import io.modelcontextprotocol.kotlin.sdk.CreateElicitationResult
1113
import io.modelcontextprotocol.kotlin.sdk.EmptyRequestResult
1214
import io.modelcontextprotocol.kotlin.sdk.GetPromptRequest
1315
import io.modelcontextprotocol.kotlin.sdk.GetPromptResult
@@ -579,6 +581,24 @@ public open class Client(
579581
notification(RootsListChangedNotification())
580582
}
581583

584+
/**
585+
* Sets the elicitation handler.
586+
*
587+
* @param handler The elicitation handler.
588+
* @throws IllegalStateException if the client does not support elicitation.
589+
*/
590+
public fun setElicitationHandler(handler: (CreateElicitationRequest) -> CreateElicitationResult) {
591+
if (capabilities.elicitation == null) {
592+
logger.error { "Failed to set elicitation handler: Client does not support elicitation" }
593+
throw IllegalStateException("Client does not support elicitation.")
594+
}
595+
logger.info { "Setting the elicitation handler" }
596+
597+
setRequestHandler<CreateElicitationRequest>(Method.Defined.ElicitationCreate) { request, _ ->
598+
handler(request)
599+
}
600+
}
601+
582602
// --- Internal Handlers ---
583603

584604
private suspend fun handleListRoots(): ListRootsResult {

src/jvmTest/kotlin/client/ClientTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -869,7 +869,7 @@ class ClientTest {
869869
put("name", "octocat")
870870
}
871871

872-
client.setRequestHandler<CreateElicitationRequest>(Method.Defined.ElicitationCreate) { request, _ ->
872+
client.setElicitationHandler { request ->
873873
assertEquals(elicitationMessage, request.message)
874874
assertEquals(requestedSchema, request.requestedSchema)
875875

0 commit comments

Comments
 (0)