Skip to content

Commit 25ff913

Browse files
authored
Merge branch 'main' into add-meta-in-call-tool-method
2 parents 32b9c95 + 14e86b2 commit 25ff913

File tree

13 files changed

+187
-18
lines changed

13 files changed

+187
-18
lines changed

.github/workflows/apidocs.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ jobs:
3333
cache: gradle
3434

3535
- name: Setup Gradle
36-
uses: gradle/actions/setup-gradle@v4
36+
uses: gradle/actions/setup-gradle@v5
3737

3838
- name: Generate Dokka Site
3939
run: |-

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
distribution: 'temurin'
2929

3030
- name: Setup Gradle
31-
uses: gradle/actions/setup-gradle@v4
31+
uses: gradle/actions/setup-gradle@v5
3232
with:
3333
add-job-summary: 'always'
3434
cache-read-only: true

.github/workflows/gradle-publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
distribution: 'temurin'
3232

3333
- name: Setup Gradle
34-
uses: gradle/actions/setup-gradle@v4
34+
uses: gradle/actions/setup-gradle@v5
3535

3636
- name: Clean Build with Gradle
3737
run: ./gradlew clean build

README.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,9 @@ val server = Server(
112112
)
113113
)
114114
)
115-
)
115+
){
116+
"This server provides example resources and demonstrates MCP capabilities."
117+
}
116118

117119
// Add a resource
118120
server.addResource(
@@ -156,8 +158,10 @@ fun Application.module() {
156158
prompts = ServerCapabilities.Prompts(listChanged = null),
157159
resources = ServerCapabilities.Resources(subscribe = null, listChanged = null)
158160
)
159-
)
160-
)
161+
),
162+
) {
163+
"This SSE server provides prompts and resources via Server-Sent Events."
164+
}
161165
}
162166
}
163167
```
@@ -184,8 +188,10 @@ fun Application.module() {
184188
prompts = ServerCapabilities.Prompts(listChanged = null),
185189
resources = ServerCapabilities.Resources(subscribe = null, listChanged = null)
186190
)
187-
)
188-
)
191+
),
192+
) {
193+
"Connect via SSE to interact with this MCP server."
194+
}
189195
}
190196
}
191197
}

kotlin-sdk-client/api/kotlin-sdk-client.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public class io/modelcontextprotocol/kotlin/sdk/client/Client : io/modelcontextp
1717
public final fun getPrompt (Lio/modelcontextprotocol/kotlin/sdk/GetPromptRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
1818
public static synthetic fun getPrompt$default (Lio/modelcontextprotocol/kotlin/sdk/client/Client;Lio/modelcontextprotocol/kotlin/sdk/GetPromptRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
1919
public final fun getServerCapabilities ()Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;
20+
public final fun getServerInstructions ()Ljava/lang/String;
2021
public final fun getServerVersion ()Lio/modelcontextprotocol/kotlin/sdk/Implementation;
2122
public final fun listPrompts (Lio/modelcontextprotocol/kotlin/sdk/ListPromptsRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
2223
public static synthetic fun listPrompts$default (Lio/modelcontextprotocol/kotlin/sdk/client/Client;Lio/modelcontextprotocol/kotlin/sdk/ListPromptsRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,14 @@ public open class Client(private val clientInfo: Implementation, options: Client
9393
public var serverCapabilities: ServerCapabilities? = null
9494
private set
9595

96+
/**
97+
* Optional human-readable instructions or description from the server.
98+
*
99+
* @return Instructions provided by the server, or `null` if none were given or initialization is not yet complete.
100+
*/
101+
public var serverInstructions: String? = null
102+
private set
103+
96104
/**
97105
* Retrieves the server's reported version information after initialization.
98106
*
@@ -156,6 +164,7 @@ public open class Client(private val clientInfo: Implementation, options: Client
156164

157165
serverCapabilities = result.capabilities
158166
serverVersion = result.serverInfo
167+
serverInstructions = result.instructions
159168

160169
notification(InitializedNotification())
161170
} catch (error: Throwable) {

kotlin-sdk-core/api/kotlin-sdk-core.api

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -975,16 +975,18 @@ public final class io/modelcontextprotocol/kotlin/sdk/InitializeRequest$Companio
975975

976976
public final class io/modelcontextprotocol/kotlin/sdk/InitializeResult : io/modelcontextprotocol/kotlin/sdk/ServerResult {
977977
public static final field Companion Lio/modelcontextprotocol/kotlin/sdk/InitializeResult$Companion;
978-
public fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;Lio/modelcontextprotocol/kotlin/sdk/Implementation;Lkotlinx/serialization/json/JsonObject;)V
979-
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;Lio/modelcontextprotocol/kotlin/sdk/Implementation;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
978+
public fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;Lio/modelcontextprotocol/kotlin/sdk/Implementation;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;)V
979+
public synthetic fun <init> (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;Lio/modelcontextprotocol/kotlin/sdk/Implementation;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
980980
public final fun component1 ()Ljava/lang/String;
981981
public final fun component2 ()Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;
982982
public final fun component3 ()Lio/modelcontextprotocol/kotlin/sdk/Implementation;
983-
public final fun component4 ()Lkotlinx/serialization/json/JsonObject;
984-
public final fun copy (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;Lio/modelcontextprotocol/kotlin/sdk/Implementation;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/InitializeResult;
985-
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/InitializeResult;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;Lio/modelcontextprotocol/kotlin/sdk/Implementation;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/InitializeResult;
983+
public final fun component4 ()Ljava/lang/String;
984+
public final fun component5 ()Lkotlinx/serialization/json/JsonObject;
985+
public final fun copy (Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;Lio/modelcontextprotocol/kotlin/sdk/Implementation;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;)Lio/modelcontextprotocol/kotlin/sdk/InitializeResult;
986+
public static synthetic fun copy$default (Lio/modelcontextprotocol/kotlin/sdk/InitializeResult;Ljava/lang/String;Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;Lio/modelcontextprotocol/kotlin/sdk/Implementation;Ljava/lang/String;Lkotlinx/serialization/json/JsonObject;ILjava/lang/Object;)Lio/modelcontextprotocol/kotlin/sdk/InitializeResult;
986987
public fun equals (Ljava/lang/Object;)Z
987988
public final fun getCapabilities ()Lio/modelcontextprotocol/kotlin/sdk/ServerCapabilities;
989+
public final fun getInstructions ()Ljava/lang/String;
988990
public final fun getProtocolVersion ()Ljava/lang/String;
989991
public final fun getServerInfo ()Lio/modelcontextprotocol/kotlin/sdk/Implementation;
990992
public fun get_meta ()Lkotlinx/serialization/json/JsonObject;

kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,10 @@ public data class InitializeResult(
512512
val protocolVersion: String = LATEST_PROTOCOL_VERSION,
513513
val capabilities: ServerCapabilities = ServerCapabilities(),
514514
val serverInfo: Implementation,
515+
/**
516+
* Optional instructions from the server to the client about how to use this server.
517+
*/
518+
val instructions: String? = null,
515519
override val _meta: JsonObject = EmptyJsonObject,
516520
) : ServerResult
517521

kotlin-sdk-core/src/commonTest/kotlin/io/modelcontextprotocol/kotlin/sdk/TypesTest.kt

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,4 +394,63 @@ class TypesTest {
394394
assertEquals("id", request.argument.name)
395395
assertEquals("123", request.argument.value)
396396
}
397+
398+
// InitializeResult Tests
399+
@Test
400+
fun `should create InitializeResult with default instructions`() {
401+
val serverInfo = Implementation(name = "test-server", version = "1.0.0")
402+
val result = InitializeResult(
403+
serverInfo = serverInfo,
404+
)
405+
406+
assertEquals(LATEST_PROTOCOL_VERSION, result.protocolVersion)
407+
assertEquals(serverInfo, result.serverInfo)
408+
assertEquals(null, result.instructions)
409+
}
410+
411+
@Test
412+
fun `should create InitializeResult with custom instructions`() {
413+
val serverInfo = Implementation(name = "test-server", version = "1.0.0")
414+
val instructions = "Use this server to perform calculations. Call the 'add' tool to add numbers."
415+
val result = InitializeResult(
416+
serverInfo = serverInfo,
417+
instructions = instructions,
418+
)
419+
420+
assertEquals(LATEST_PROTOCOL_VERSION, result.protocolVersion)
421+
assertEquals(serverInfo, result.serverInfo)
422+
assertEquals(instructions, result.instructions)
423+
}
424+
425+
@Test
426+
fun `should serialize and deserialize InitializeResult with instructions`() {
427+
val serverInfo = Implementation(name = "test-server", version = "1.0.0")
428+
val instructions = "This server provides file system access. Use the 'read' tool to read files."
429+
val result = InitializeResult(
430+
serverInfo = serverInfo,
431+
instructions = instructions,
432+
)
433+
434+
val json = McpJson.encodeToString(result)
435+
val decoded = McpJson.decodeFromString<InitializeResult>(json)
436+
437+
assertEquals(LATEST_PROTOCOL_VERSION, decoded.protocolVersion)
438+
assertEquals(serverInfo, decoded.serverInfo)
439+
assertEquals(instructions, decoded.instructions)
440+
}
441+
442+
@Test
443+
fun `should serialize and deserialize InitializeResult without instructions`() {
444+
val serverInfo = Implementation(name = "test-server", version = "1.0.0")
445+
val result = InitializeResult(
446+
serverInfo = serverInfo,
447+
)
448+
449+
val json = McpJson.encodeToString(result)
450+
val decoded = McpJson.decodeFromString<InitializeResult>(json)
451+
452+
assertEquals(LATEST_PROTOCOL_VERSION, decoded.protocolVersion)
453+
assertEquals(serverInfo, decoded.serverInfo)
454+
assertEquals(null, decoded.instructions)
455+
}
397456
}

kotlin-sdk-server/api/kotlin-sdk-server.api

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ public final class io/modelcontextprotocol/kotlin/sdk/server/RegisteredTool {
4545
}
4646

4747
public class io/modelcontextprotocol/kotlin/sdk/server/Server {
48-
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/Implementation;Lio/modelcontextprotocol/kotlin/sdk/server/ServerOptions;)V
48+
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/Implementation;Lio/modelcontextprotocol/kotlin/sdk/server/ServerOptions;Ljava/lang/String;)V
49+
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/Implementation;Lio/modelcontextprotocol/kotlin/sdk/server/ServerOptions;Lkotlin/jvm/functions/Function0;)V
50+
public synthetic fun <init> (Lio/modelcontextprotocol/kotlin/sdk/Implementation;Lio/modelcontextprotocol/kotlin/sdk/server/ServerOptions;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
4951
public final fun addPrompt (Lio/modelcontextprotocol/kotlin/sdk/Prompt;Lkotlin/jvm/functions/Function2;)V
5052
public final fun addPrompt (Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function2;)V
5153
public static synthetic fun addPrompt$default (Lio/modelcontextprotocol/kotlin/sdk/server/Server;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V
@@ -59,8 +61,11 @@ public class io/modelcontextprotocol/kotlin/sdk/server/Server {
5961
public final fun addTools (Ljava/util/List;)V
6062
public final fun close (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
6163
public final fun connect (Lio/modelcontextprotocol/kotlin/sdk/shared/Transport;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
64+
protected final fun getInstructionsProvider ()Lkotlin/jvm/functions/Function0;
65+
protected final fun getOptions ()Lio/modelcontextprotocol/kotlin/sdk/server/ServerOptions;
6266
public final fun getPrompts ()Ljava/util/Map;
6367
public final fun getResources ()Ljava/util/Map;
68+
protected final fun getServerInfo ()Lio/modelcontextprotocol/kotlin/sdk/Implementation;
6469
public final fun getTools ()Ljava/util/Map;
6570
public final fun onClose (Lkotlin/jvm/functions/Function0;)V
6671
public final fun onConnect (Lkotlin/jvm/functions/Function0;)V
@@ -80,7 +85,7 @@ public final class io/modelcontextprotocol/kotlin/sdk/server/ServerOptions : io/
8085
}
8186

8287
public class io/modelcontextprotocol/kotlin/sdk/server/ServerSession : io/modelcontextprotocol/kotlin/sdk/shared/Protocol {
83-
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/Implementation;Lio/modelcontextprotocol/kotlin/sdk/server/ServerOptions;)V
88+
public fun <init> (Lio/modelcontextprotocol/kotlin/sdk/Implementation;Lio/modelcontextprotocol/kotlin/sdk/server/ServerOptions;Ljava/lang/String;)V
8489
protected fun assertCapabilityForMethod (Lio/modelcontextprotocol/kotlin/sdk/Method;)V
8590
protected fun assertNotificationCapability (Lio/modelcontextprotocol/kotlin/sdk/Method;)V
8691
public fun assertRequestHandlerCapability (Lio/modelcontextprotocol/kotlin/sdk/Method;)V
@@ -90,6 +95,8 @@ public class io/modelcontextprotocol/kotlin/sdk/server/ServerSession : io/modelc
9095
public static synthetic fun createMessage$default (Lio/modelcontextprotocol/kotlin/sdk/server/ServerSession;Lio/modelcontextprotocol/kotlin/sdk/CreateMessageRequest;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
9196
public final fun getClientCapabilities ()Lio/modelcontextprotocol/kotlin/sdk/ClientCapabilities;
9297
public final fun getClientVersion ()Lio/modelcontextprotocol/kotlin/sdk/Implementation;
98+
protected final fun getInstructions ()Ljava/lang/String;
99+
protected final fun getServerInfo ()Lio/modelcontextprotocol/kotlin/sdk/Implementation;
93100
public final fun listRoots (Lkotlinx/serialization/json/JsonObject;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
94101
public static synthetic fun listRoots$default (Lio/modelcontextprotocol/kotlin/sdk/server/ServerSession;Lkotlinx/serialization/json/JsonObject;Lio/modelcontextprotocol/kotlin/sdk/shared/RequestOptions;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
95102
public fun onClose ()V

0 commit comments

Comments
 (0)