@@ -24,6 +24,7 @@ import io.modelcontextprotocol.kotlin.sdk.Role
24
24
import io.modelcontextprotocol.kotlin.sdk.SUPPORTED_PROTOCOL_VERSIONS
25
25
import io.modelcontextprotocol.kotlin.sdk.ServerCapabilities
26
26
import io.modelcontextprotocol.kotlin.sdk.TextContent
27
+ import io.modelcontextprotocol.kotlin.sdk.Tool
27
28
import kotlinx.coroutines.CompletableDeferred
28
29
import kotlinx.coroutines.TimeoutCancellationException
29
30
import kotlinx.coroutines.cancel
@@ -38,6 +39,7 @@ import org.junit.jupiter.api.Test
38
39
import io.modelcontextprotocol.kotlin.sdk.server.Server
39
40
import io.modelcontextprotocol.kotlin.sdk.server.ServerOptions
40
41
import io.modelcontextprotocol.kotlin.sdk.shared.AbstractTransport
42
+ import org.junit.jupiter.api.assertInstanceOf
41
43
import kotlin.coroutines.cancellation.CancellationException
42
44
import kotlin.test.assertEquals
43
45
import kotlin.test.assertFailsWith
@@ -494,5 +496,79 @@ class ClientTest {
494
496
}
495
497
}
496
498
499
+ @Test
500
+ fun `JSONRPCRequest with ToolsList method and default params returns list of tools` () = runTest {
501
+ val serverOptions = ServerOptions (
502
+ capabilities = ServerCapabilities (
503
+ tools = ServerCapabilities .Tools (null )
504
+ )
505
+ )
506
+ val server = Server (
507
+ Implementation (name = " test server" , version = " 1.0" ),
508
+ serverOptions
509
+ )
510
+
511
+ server.setRequestHandler<InitializeRequest >(Method .Defined .Initialize ) { request, _ ->
512
+ InitializeResult (
513
+ protocolVersion = LATEST_PROTOCOL_VERSION ,
514
+ capabilities = ServerCapabilities (
515
+ resources = ServerCapabilities .Resources (null , null ),
516
+ tools = ServerCapabilities .Tools (null )
517
+ ),
518
+ serverInfo = Implementation (name = " test" , version = " 1.0" )
519
+ )
520
+ }
521
+ val serverListToolsResult = ListToolsResult (
522
+ tools = listOf (
523
+ Tool (
524
+ name = " testTool" ,
525
+ description = " testTool description" ,
526
+ inputSchema = Tool .Input ()
527
+ )
528
+ ), nextCursor = null
529
+ )
530
+
531
+ server.setRequestHandler<ListToolsRequest >(Method .Defined .ToolsList ) { request, _ ->
532
+ serverListToolsResult
533
+ }
534
+
535
+ val (clientTransport, serverTransport) = InMemoryTransport .createLinkedPair()
536
+
537
+ val client = Client (
538
+ clientInfo = Implementation (name = " test client" , version = " 1.0" ),
539
+ options = ClientOptions (
540
+ capabilities = ClientCapabilities (sampling = EmptyJsonObject ),
541
+ )
542
+ )
543
+
544
+ var receivedMessage: JSONRPCMessage ? = null
545
+ clientTransport.onMessage { msg ->
546
+ receivedMessage = msg
547
+ }
548
+
549
+ listOf (
550
+ launch {
551
+ client.connect(clientTransport)
552
+ },
553
+ launch {
554
+ server.connect(serverTransport)
555
+ }
556
+ ).joinAll()
557
+
558
+ val serverCapabilities = client.serverCapabilities
559
+ assertEquals(ServerCapabilities .Tools (null ), serverCapabilities?.tools)
560
+
561
+ val request = JSONRPCRequest (
562
+ method = Method .Defined .ToolsList .value
563
+ )
564
+ clientTransport.send(request)
565
+
566
+ assertInstanceOf<JSONRPCResponse >(receivedMessage)
567
+ val receivedAsResponse = receivedMessage as JSONRPCResponse
568
+ assertEquals(request.id, receivedAsResponse.id)
569
+ assertEquals(request.jsonrpc, receivedAsResponse.jsonrpc)
570
+ assertEquals(serverListToolsResult, receivedAsResponse.result)
571
+ assertEquals(null , receivedAsResponse.error)
572
+ }
497
573
498
574
}
0 commit comments