Перейти к содержимому
Выберите тему

Kotlin SDK

Официальный Kotlin SDK для MCP, выпуск 0.15.0 - работает только в эпохе Legacy до редакции 2025-11-25, типы для 2026-07-28 есть лишь в ветке main и помечены экспериментальными

сверено с выпуском 0.15.0 4 октября 2026

По README выпуска это SDK на Kotlin Multiplatform для клиентов и серверов MCP с целями JVM, Native, JS и Wasm.

В списке официальных SDK у Kotlin третий уровень (Tier 3). По правилам уровней третий уровень - это экспериментальные, частично реализованные или специализированные SDK. Минимальных требований по прохождению тестов соответствия для него нет.

Кто сопровождает SDK, ни README выпуска, ни список официальных SDK не говорят.

Проверенный выпуск - 0.15.0 от 28 июля 2026: выпуск на GitHub, пакет io.modelcontextprotocol:kotlin-sdk на Maven Central. Предварительных выпусков нет, линия одна - 0.x.

Минимальные версии README показывает значками: Kotlin 2.2 и новее, JVM 11 и новее.

Пакетов три:

Пакет Что в нём
io.modelcontextprotocol:kotlin-sdk клиент и сервер вместе
io.modelcontextprotocol:kotlin-sdk-client только клиент
io.modelcontextprotocol:kotlin-sdk-server только сервер
build.gradle.kts
repositories {
mavenCentral()
}
dependencies {
// See the badge above for the latest version
implementation("io.modelcontextprotocol:kotlin-sdk:$mcpVersion")
}

Пример взят из документации выпуска 0.15.0 и здесь не запускался.

SDK использует Ktor, но движки Ktor сам не подключает. По README зависимости клиента и сервера Ktor нужно объявить самостоятельно, например io.ktor:ktor-client-cio и io.ktor:ktor-server-netty.

В файле common.kt записано: LATEST_PROTOCOL_VERSION равна 2025-11-25, а в списке SUPPORTED_PROTOCOL_VERSIONS четыре редакции - 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05. Все они относятся к эпохе Legacy.

Строк 2026-07-28 и server/discover в исходном коде выпуска нет.

По коду Client.kt вызов client.connect(transport) отправляет initialize с версией LATEST_PROTOCOL_VERSION, то есть 2025-11-25. Если сервер отвечает версией, которой нет в списке поддерживаемых, подключение завершается ошибкой.

По заметкам к выпуску клиент Streamable HTTP теперь добавляет к запросам POST заголовки Mcp-Method и Mcp-Name. Эти заголовки не делают клиент клиентом Modern: связь по-прежнему начинается с initialize.

По коду ServerSession.kt сервер отвечает той версией, которую попросил клиент, если она есть в списке. Если нет, сервер предлагает 2025-11-25 и пишет предупреждение в журнал.

Транспорты из README выпуска:

Транспорт Что о нём сказано в README
stdio StdioClientTransport и StdioServerTransport
Streamable HTTP StreamableHttpClientTransport, помощники Ktor mcpStreamableHttp() и mcpStatelessStreamableHttp(); рекомендован для удалённых серверов
SSE оставлен для совместимости со старыми клиентами; для новых проектов README советует Streamable HTTP
WebSocket WebSocketClientTransport и серверные средства к нему

Помощник mcpStatelessStreamableHttp() - это режим без сеансов внутри старой эпохи. К жизненному циклу без состояния из редакции 2026-07-28 он не относится.

Server.kt
import io.ktor.server.cio.CIO
import io.ktor.server.engine.embeddedServer
import io.modelcontextprotocol.kotlin.sdk.server.Server
import io.modelcontextprotocol.kotlin.sdk.server.ServerOptions
import io.modelcontextprotocol.kotlin.sdk.server.mcpStreamableHttp
import io.modelcontextprotocol.kotlin.sdk.types.CallToolResult
import io.modelcontextprotocol.kotlin.sdk.types.Implementation
import io.modelcontextprotocol.kotlin.sdk.types.ServerCapabilities
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put
fun main(args: Array<String>) {
val port = args.firstOrNull()?.toIntOrNull() ?: 3000
val mcpServer = Server(
serverInfo = Implementation(
name = "example-server",
version = "1.0.0"
),
options = ServerOptions(
capabilities = ServerCapabilities(
tools = ServerCapabilities.Tools(listChanged = true),
),
)
)
mcpServer.addTool(
name = "example-tool",
description = "An example tool",
inputSchema = ToolSchema(
properties = buildJsonObject {
put("input", buildJsonObject { put("type", "string") })
}
)
) { request ->
CallToolResult(content = listOf(TextContent("Hello, world!")))
}
embeddedServer(CIO, host = "127.0.0.1", port = port) {
mcpStreamableHttp {
mcpServer
}
}.start(wait = true)
}

Пример взят из документации выпуска 0.15.0 и здесь не запускался.

Client.kt
import io.ktor.client.HttpClient
import io.ktor.client.plugins.sse.SSE
import io.modelcontextprotocol.kotlin.sdk.client.Client
import io.modelcontextprotocol.kotlin.sdk.client.StreamableHttpClientTransport
import io.modelcontextprotocol.kotlin.sdk.types.Implementation
import kotlinx.coroutines.runBlocking
fun main(args: Array<String>) = runBlocking {
val url = args.firstOrNull() ?: "http://localhost:3000/mcp"
val httpClient = HttpClient { install(SSE) }
val client = Client(
clientInfo = Implementation(
name = "example-client",
version = "1.0.0"
)
)
val transport = StreamableHttpClientTransport(
client = httpClient,
url = url
)
// Connect to server
client.connect(transport)
// List available tools
val tools = client.listTools().tools
println(tools)
}

Пример взят из документации выпуска 0.15.0 и здесь не запускался.

Tasks. Расширения Tasks в выпуске нет. Есть экспериментальные задачи редакции 2025-11-25, а это другой механизм: редакция 2026-07-28 вынесла задачи из ядра в расширение и изменила их методы. По заметкам к выпускам 0.13.0 и 0.14.0 в SDK добавлены возможность tasks с проверками для методов tasks/* и типы сообщений по SEP-1686 «на уровне формата». В выпуске 0.15.0 методы tasks/get, tasks/result, tasks/list и tasks/cancel объявлены в methods.kt. Есть ли в SDK готовое хранилище и исполнение задач, неизвестно.

MCP Apps. Неизвестно. README выпуска расширение не упоминает. В типах возможностей есть общее поле extensions, и идентификатор io.modelcontextprotocol/ui приведён в комментарии к нему как пример ключа. Готовых средств для MCP Apps в исходном коде выпуска поиск не нашёл, а сам SDK о поддержке ничего не заявляет.

Функция Как с ней обходится выпуск 0.15.0
initialize Единственный способ установить связь
Сеансы Сервер создаёт сеансы; в примере настройки CORS из README разрешён заголовок Mcp-Session-Id
HTTP+SSE Поставляется как обычный транспорт «для совместимости со старыми клиентами»
Roots, Sampling, Logging Описаны в README как рабочие возможности клиента и сервера

На 4 октября 2026 ветка main опережает метку 0.15.0 на 82 изменения. Отличия по эпохам такие.

  • Выпуск 0.15.0. Только Legacy, типов для server/discover нет.
  • Ветка main, не выпущено. Добавлен файл discovery.kt с типами запроса и ответа server/discover, помеченными @ExperimentalMcpApi, и метод server/discover в списке методов. При этом LATEST_PROTOCOL_VERSION в main по-прежнему равна 2025-11-25.

Типы сообщений - это ещё не работающий клиент или сервер Modern. Пользоваться ими из опубликованного пакета нельзя.

  • Умеют ли клиент и сервер в ветке main работать по новому жизненному циклу, или там есть только типы сообщений.
  • Когда выйдет выпуск с поддержкой 2026-07-28: опубликованного плана со сроками в репозитории на метке выпуска нет.
  • Поддержка MCP Apps и наличие исполнения задач.
  • Применяет ли клиент динамическую регистрацию клиента: в модулях самого SDK кода авторизации OAuth поиск не нашёл, он есть только в тестовом клиенте проверки соответствия.
  • Кто сопровождает SDK: README выпуска и список официальных SDK этого не говорят.