# MCP Kotlin SDK: установка, версии и редакции протокола

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

Страница: https://mcpdoc.ru/sdk/kotlin/
Указатель сайта: https://mcpdoc.ru/llms.txt

Kotlin SDK - официальный SDK третьего уровня (Tier 3) для Kotlin Multiplatform. Выпуск 0.15.0 понимает редакции до `2025-11-25` включительно и работает только через рукопожатие `initialize`. Редакции `2026-07-28` в выпуске нет. В ветке `main` появились экспериментальные типы для `server/discover`, но последняя версия протокола там по-прежнему `2025-11-25`.

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

Совместимость Legacy редакция 2025-11-25 и старше: рукопожатие initialize и сессии

- **Проверенная версия:** 0.15.0, выпуск от 2026-07-28

- **Новейшая поддерживаемая редакция:** 2025-11-25

- **С сервером только Modern:** не работает

- **С сервером только Legacy:** работает

- **Переход на старую редакцию:** нет

- **Использует устаревшее:** Roots, Sampling, Logging, транспорт HTTP+SSE

- **Сохраняет удалённое в редакции 2026-07-28:** сессии, рукопожатие initialize

- **Расширение Tasks:** нет

- **Расширение MCP Apps:** неизвестно

- **Проверено:** 2026-10-04

- **Источник:** [github.com](https://github.com/modelcontextprotocol/kotlin-sdk/releases/tag/0.15.0)

## Что это

По [README выпуска](https://github.com/modelcontextprotocol/kotlin-sdk/blob/0.15.0/README.md) это SDK на Kotlin Multiplatform для клиентов и серверов MCP с целями JVM, Native, JS и Wasm.

В [списке официальных SDK](https://modelcontextprotocol.io/docs/sdk) у Kotlin третий уровень (Tier 3). По [правилам уровней](https://modelcontextprotocol.io/community/sdk-tiers) третий уровень - это экспериментальные, частично реализованные или специализированные SDK. Минимальных требований по прохождению тестов соответствия для него нет.

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

## Выпуск и установка

Проверенный выпуск - 0.15.0 от 28 июля 2026: [выпуск на GitHub](https://github.com/modelcontextprotocol/kotlin-sdk/releases/tag/0.15.0), пакет [`io.modelcontextprotocol:kotlin-sdk`](https://central.sonatype.com/artifact/io.modelcontextprotocol/kotlin-sdk) на Maven Central. Предварительных выпусков нет, линия одна - 0.x.

Выпуск 0.15.0 вышел 28 июля 2026, в день, которым названа редакция `2026-07-28`. Это совпадение дат. Сам выпуск говорит на `2025-11-25`.

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

Пакетов три:

| Пакет | Что в нём |
|---|---|
| `io.modelcontextprotocol:kotlin-sdk` | клиент и сервер вместе |
| `io.modelcontextprotocol:kotlin-sdk-client` | только клиент |
| `io.modelcontextprotocol:kotlin-sdk-server` | только сервер |

```kotlin title="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`](https://github.com/modelcontextprotocol/kotlin-sdk/blob/0.15.0/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/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` в исходном коде выпуска нет.

Клиент, собранный на выпуске 0.15.0, не сможет работать с сервером, который понимает только Modern: такой сервер не отвечает на `initialize`. Сервер, собранный на 0.15.0, не сможет обслужить клиента, который понимает только Modern: такой клиент не начинает с `initialize`. Связь возможна, если другая сторона поддерживает обе эпохи.

## Что клиент отправляет по умолчанию

По коду [`Client.kt`](https://github.com/modelcontextprotocol/kotlin-sdk/blob/0.15.0/kotlin-sdk-client/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/client/Client.kt) вызов `client.connect(transport)` отправляет `initialize` с версией `LATEST_PROTOCOL_VERSION`, то есть `2025-11-25`. Если сервер отвечает версией, которой нет в списке поддерживаемых, подключение завершается ошибкой.

По [заметкам к выпуску](https://github.com/modelcontextprotocol/kotlin-sdk/releases/tag/0.15.0) клиент Streamable HTTP теперь добавляет к запросам POST заголовки `Mcp-Method` и `Mcp-Name`. Эти заголовки не делают клиент клиентом Modern: связь по-прежнему начинается с `initialize`.

## Что принимает сервер

По коду [`ServerSession.kt`](https://github.com/modelcontextprotocol/kotlin-sdk/blob/0.15.0/kotlin-sdk-server/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/server/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` он не относится.

## Минимальный сервер

```kotlin title="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 и здесь не запускался.

## Минимальный клиент

```kotlin title="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](https://github.com/modelcontextprotocol/kotlin-sdk/releases/tag/0.13.0) и [0.14.0](https://github.com/modelcontextprotocol/kotlin-sdk/releases/tag/0.14.0) в SDK добавлены возможность `tasks` с проверками для методов `tasks/*` и типы сообщений по SEP-1686 «на уровне формата». В выпуске 0.15.0 методы `tasks/get`, `tasks/result`, `tasks/list` и `tasks/cancel` объявлены в [`methods.kt`](https://github.com/modelcontextprotocol/kotlin-sdk/blob/0.15.0/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/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

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

- **Выпуск 0.15.0.** Только Legacy, типов для `server/discover` нет.
- **Ветка `main`, не выпущено.** Добавлен файл [`discovery.kt`](https://github.com/modelcontextprotocol/kotlin-sdk/blob/main/kotlin-sdk-core/src/commonMain/kotlin/io/modelcontextprotocol/kotlin/sdk/types/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](https://mcpdoc.ru/sdk/) - сравнение официальных SDK по эпохам.
- [Редакции и версии](https://mcpdoc.ru/protocol/versions/) - чем Modern отличается от Legacy.
- [Две эпохи на одном сервере](https://mcpdoc.ru/deployment/dual-era/) - как сервер старой эпохи сосуществует с новыми клиентами.
- [Транспорты](https://mcpdoc.ru/protocol/transports/) - stdio, Streamable HTTP и устаревший HTTP+SSE.
