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 | только сервер |
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 он не относится.
Минимальный сервер
Заголовок раздела «Минимальный сервер»import io.ktor.server.cio.CIOimport io.ktor.server.engine.embeddedServerimport io.modelcontextprotocol.kotlin.sdk.server.Serverimport io.modelcontextprotocol.kotlin.sdk.server.ServerOptionsimport io.modelcontextprotocol.kotlin.sdk.server.mcpStreamableHttpimport io.modelcontextprotocol.kotlin.sdk.types.CallToolResultimport io.modelcontextprotocol.kotlin.sdk.types.Implementationimport io.modelcontextprotocol.kotlin.sdk.types.ServerCapabilitiesimport io.modelcontextprotocol.kotlin.sdk.types.TextContentimport io.modelcontextprotocol.kotlin.sdk.types.ToolSchemaimport kotlinx.serialization.json.buildJsonObjectimport 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 и здесь не запускался.
Минимальный клиент
Заголовок раздела «Минимальный клиент»import io.ktor.client.HttpClientimport io.ktor.client.plugins.sse.SSEimport io.modelcontextprotocol.kotlin.sdk.client.Clientimport io.modelcontextprotocol.kotlin.sdk.client.StreamableHttpClientTransportimport io.modelcontextprotocol.kotlin.sdk.types.Implementationimport 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 как рабочие возможности клиента и сервера |
Выпуск и ветка main
Заголовок раздела «Выпуск и ветка main»На 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 этого не говорят.
Что читать дальше
Заголовок раздела «Что читать дальше»- Все SDK - сравнение официальных SDK по эпохам.
- Редакции и версии - чем Modern отличается от Legacy.
- Две эпохи на одном сервере - как сервер старой эпохи сосуществует с новыми клиентами.
- Транспорты - stdio, Streamable HTTP и устаревший HTTP+SSE.