- Kotlin 98%
- TypeScript 1.7%
- Shell 0.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Bumps `kotlin` from 2.2.0 to 2.2.10. Updates `org.jetbrains.kotlin:kotlin-gradle-plugin` from 2.2.0 to 2.2.10 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/JetBrains/kotlin/releases">org.jetbrains.kotlin:kotlin-gradle-plugin's releases</a>.</em></p> <blockquote> <h2>Kotlin 2.2.10</h2> <h2>Changelog</h2> <h3>Compiler</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-79276"><code>KT-79276</code></a> Dexing fails with "Cannot read field X because <!-- raw HTML omitted --> is null" with 2.2.0</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-79442"><code>KT-79442</code></a> "Multiple annotations of type kotlin.coroutines.jvm.internal.DebugMetadata": 2.2.0-Beta1 generates broken code with JVM default suspend methods in interfaces</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78815"><code>KT-78815</code></a> <code>Symbol not found: __ZNSt3__117bad_function_callD1Ev</code> error on iOS 15.5 simulator in Xcode 16.3 after update to 2.2.0-Beta2</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78501"><code>KT-78501</code></a> K2: Missing [ABSTRACT_SUPER_CALL] diagnostics for delegated interface method leads to AssertionError: isCompiledToJvmDefault during IR lowering</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78479"><code>KT-78479</code></a> IR lowering failed / Unexpected null argument for composable call</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-76477"><code>KT-76477</code></a> Kotlin/Native: fix compiler performance reporting in sources->klib and klibs->binary</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78736"><code>KT-78736</code></a> Missing [NOT_YET_SUPPORTED_IN_INLINE] diagnostics because of incorrect context update</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-77685"><code>KT-77685</code></a> "IllegalArgumentException: Sequence contains more than one matching element"</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-76365"><code>KT-76365</code></a> K2: Missing ABSTRACT_SUPER_CALL</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78352"><code>KT-78352</code></a> False-positive IDENTITY_SENSITIVE_OPERATIONS_WITH_VALUE_TYPE when comparing with equality operator (==)</li> </ul> <h3>Compose compiler</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-78479"><code>KT-78479</code></a> Ensure that default transform affects functions entered through a call</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78490"><code>KT-78490</code></a> Fix visibility for default wrappers of protected methods</li> <li><a href="https://issuetracker.google.com/issues/408492167"><code>b/408492167</code></a> Emit parameter names in Compose source information</li> </ul> <h3>JavaScript</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-79050"><code>KT-79050</code></a> KJS / IC: "Unexpected body of primary constructor for processing irClass"</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-79089"><code>KT-79089</code></a> KJS: Could not load reporter / Cannot find module 'mocha' when running jsNode tests</li> </ul> <h3>Native</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-79075"><code>KT-79075</code></a> Stuck on Kotlin_getSourceInfo_core_symbolication</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-76178"><code>KT-76178</code></a> LLVM Update: symbol '__ZnwmSt19__type_descriptor_t' missing</li> </ul> <h3>Native. Runtime. Memory</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-78925"><code>KT-78925</code></a> Crash SIGABRT on Apple Watch after updating Kotlin to 2.2.0</li> </ul> <h3>Tools. CLI</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-77445"><code>KT-77445</code></a> UNRESOLVED_REFERENCE when importing classes from kotlin-stdlib</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78263"><code>KT-78263</code></a> java.lang.NoClassDefFoundError: Could not initialize class com.intellij.psi.impl.PsiSubstitutorImpl</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78318"><code>KT-78318</code></a> Unresolved reference when compiling kotlin/JS project on fresh master</li> </ul> <h3>Tools. Compiler Plugins</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-78490"><code>KT-78490</code></a> "AssertionError: SyntheticAccessorLowering should not attempt to modify other files" when calling protected open composable with default argument</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78038"><code>KT-78038</code></a> Make jvm-abi-gen compiler plugin output classloader-friendly</li> </ul> <h3>Tools. Gradle</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-77023"><code>KT-77023</code></a> Support creating KotlinJvmAndroidCompilation in KotlinBaseApiPlugin</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md">org.jetbrains.kotlin:kotlin-gradle-plugin's changelog</a>.</em></p> <blockquote> <h2>2.2.10</h2> <h3>Compiler</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-79276"><code>KT-79276</code></a> Dexing fails with "Cannot read field X because <!-- raw HTML omitted --> is null" with 2.2.0</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-79442"><code>KT-79442</code></a> "Multiple annotations of type kotlin.coroutines.jvm.internal.DebugMetadata": 2.2.0-Beta1 generates broken code with JVM default suspend methods in interfaces</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78815"><code>KT-78815</code></a> <code>Symbol not found: __ZNSt3__117bad_function_callD1Ev</code> error on iOS 15.5 simulator in Xcode 16.3 after update to 2.2.0-Beta2</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78501"><code>KT-78501</code></a> K2: Missing [ABSTRACT_SUPER_CALL] diagnostics for delegated interface method leads to AssertionError: isCompiledToJvmDefault during IR lowering</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78479"><code>KT-78479</code></a> IR lowering failed / Unexpected null argument for composable call</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-76477"><code>KT-76477</code></a> Kotlin/Native: fix compiler performance reporting in sources->klib and klibs->binary</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78736"><code>KT-78736</code></a> Missing [NOT_YET_SUPPORTED_IN_INLINE] diagnostics because of incorrect context update</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-77685"><code>KT-77685</code></a> "IllegalArgumentException: Sequence contains more than one matching element"</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-76365"><code>KT-76365</code></a> K2: Missing ABSTRACT_SUPER_CALL</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78352"><code>KT-78352</code></a> False-positive IDENTITY_SENSITIVE_OPERATIONS_WITH_VALUE_TYPE when comparing with equality operator (==)</li> </ul> <h3>Compose compiler</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-78479"><code>KT-78479</code></a> Ensure that default transform affects functions entered through a call</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78490"><code>KT-78490</code></a> Fix visibility for default wrappers of protected methods</li> <li><a href="https://issuetracker.google.com/issues/408492167"><code>b/408492167</code></a> Emit parameter names in Compose source information</li> </ul> <h3>JavaScript</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-79050"><code>KT-79050</code></a> KJS / IC: "Unexpected body of primary constructor for processing irClass"</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-79089"><code>KT-79089</code></a> KJS: Could not load reporter / Cannot find module 'mocha' when running jsNode tests</li> </ul> <h3>Native</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-79075"><code>KT-79075</code></a> Stuck on Kotlin_getSourceInfo_core_symbolication</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-76178"><code>KT-76178</code></a> LLVM Update: symbol '__ZnwmSt19__type_descriptor_t' missing</li> </ul> <h3>Native. Runtime. Memory</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-78925"><code>KT-78925</code></a> Crash SIGABRT on Apple Watch after updating Kotlin to 2.2.0</li> </ul> <h3>Tools. CLI</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-77445"><code>KT-77445</code></a> UNRESOLVED_REFERENCE when importing classes from kotlin-stdlib</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78263"><code>KT-78263</code></a> java.lang.NoClassDefFoundError: Could not initialize class com.intellij.psi.impl.PsiSubstitutorImpl</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78318"><code>KT-78318</code></a> Unresolved reference when compiling kotlin/JS project on fresh master</li> </ul> <h3>Tools. Compiler Plugins</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-78490"><code>KT-78490</code></a> "AssertionError: SyntheticAccessorLowering should not attempt to modify other files" when calling protected open composable with default argument</li> <li><a href="https://youtrack.jetbrains.com/issue/KT-78038"><code>KT-78038</code></a> Make jvm-abi-gen compiler plugin output classloader-friendly</li> </ul> <h3>Tools. Gradle</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KT-77023"><code>KT-77023</code></a> Support creating KotlinJvmAndroidCompilation in KotlinBaseApiPlugin</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
| .github | ||
| buildSrc | ||
| docs | ||
| gradle | ||
| kotlin-sdk | ||
| kotlin-sdk-client | ||
| kotlin-sdk-core | ||
| kotlin-sdk-server | ||
| kotlin-sdk-test | ||
| samples | ||
| .editorconfig | ||
| .gitignore | ||
| build.gradle.kts | ||
| CODE_OF_CONDUCT.md | ||
| CONTRIBUTING.md | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| LICENSE | ||
| README.md | ||
| settings.gradle.kts | ||
MCP Kotlin SDK
Kotlin Multiplatform implementation of the Model Context Protocol (MCP), providing both client and server capabilities for integrating with LLM surfaces across various platforms.
Overview
The Model Context Protocol allows applications to provide context for LLMs in a standardized way, separating the concerns of providing context from the actual LLM interaction. This SDK implements the MCP specification for Kotlin, enabling you to build applications that can communicate using MCP on the JVM, WebAssembly and iOS.
- Build MCP clients that can connect to any MCP server
- Create MCP servers that expose resources, prompts and tools
- Use standard transports like stdio, SSE, and WebSocket
- Handle all MCP protocol messages and lifecycle events
Samples
- kotlin-mcp-server: demonstrates a multiplatform (JVM, Wasm) MCP server setup with various features and transports.
- weather-stdio-server: shows how to build a Kotlin MCP server providing weather forecast and alerts using STDIO transport.
- kotlin-mcp-client: demonstrates building an interactive Kotlin MCP client that connects to an MCP server via STDIO and integrates with Anthropic’s API.
Installation
Add the new repository to your build file:
repositories {
mavenCentral()
}
Add the dependency:
dependencies {
// See the badge above for the latest version
implementation("io.modelcontextprotocol:kotlin-sdk:$mcpVersion")
}
MCP SDK uses Ktor, but does not come with a specific engine dependency. You should add Ktor client and/or Ktor server dependency to your project yourself, e.g.:
dependencies {
// for client:
implementation("io.ktor:ktor-client-cio:$ktorVersion")
// for server:
implementation("io.ktor:ktor-server-netty:$ktorVersion")
}
Quick Start
Creating a Client
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.client.StdioClientTransport
import io.modelcontextprotocol.kotlin.sdk.Implementation
val client = Client(
clientInfo = Implementation(
name = "example-client",
version = "1.0.0"
)
)
val transport = StdioClientTransport(
inputStream = processInputStream,
outputStream = processOutputStream
)
// Connect to server
client.connect(transport)
// List available resources
val resources = client.listResources()
// Read a specific resource
val resourceContent = client.readResource(
ReadResourceRequest(uri = "file:///example.txt")
)
Creating a Server
import io.modelcontextprotocol.kotlin.sdk.server.Server
import io.modelcontextprotocol.kotlin.sdk.server.ServerOptions
import io.modelcontextprotocol.kotlin.sdk.server.StdioServerTransport
import io.modelcontextprotocol.kotlin.sdk.ServerCapabilities
val server = Server(
serverInfo = Implementation(
name = "example-server",
version = "1.0.0"
),
options = ServerOptions(
capabilities = ServerCapabilities(
resources = ServerCapabilities.Resources(
subscribe = true,
listChanged = true
)
)
)
)
// Add a resource
server.addResource(
uri = "file:///example.txt",
name = "Example Resource",
description = "An example text file",
mimeType = "text/plain"
) { request ->
ReadResourceResult(
contents = listOf(
TextResourceContents(
text = "This is the content of the example resource.",
uri = request.uri,
mimeType = "text/plain"
)
)
)
}
// Start server with stdio transport
val transport = StdioServerTransport()
server.connect(transport)
Using SSE Transport
Directly in Ktor's Application:
import io.ktor.server.application.*
import io.modelcontextprotocol.kotlin.sdk.server.mcp
fun Application.module() {
mcp {
Server(
serverInfo = Implementation(
name = "example-sse-server",
version = "1.0.0"
),
options = ServerOptions(
capabilities = ServerCapabilities(
prompts = ServerCapabilities.Prompts(listChanged = null),
resources = ServerCapabilities.Resources(subscribe = null, listChanged = null)
)
)
)
}
}
Inside a custom Ktor's Route:
import io.ktor.server.application.*
import io.ktor.server.sse.SSE
import io.modelcontextprotocol.kotlin.sdk.server.mcp
fun Application.module() {
install(SSE)
routing {
route("myRoute") {
mcp {
Server(
serverInfo = Implementation(
name = "example-sse-server",
version = "1.0.0"
),
options = ServerOptions(
capabilities = ServerCapabilities(
prompts = ServerCapabilities.Prompts(listChanged = null),
resources = ServerCapabilities.Resources(subscribe = null, listChanged = null)
)
)
)
}
}
}
}
Contributing
Please see the contribution guide and the Code of conduct before contributing.
License
This project is licensed under the MIT License—see the LICENSE file for details.