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

Java SDK

Официальный Java SDK для MCP, выпуск 2.0.1 - работает только в эпохе Legacy до редакции 2025-11-25, поддержка 2026-07-28 пока существует лишь как план линии 3.x

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

Java SDK - набор модулей для серверов и клиентов MCP на Java, с синхронным и асинхронным интерфейсом. В списке официальных SDK у него второй уровень (Tier 2). То же сказано в плане развития SDK: «The Java SDK is an official Tier 2 SDK».

По правилам уровней второй уровень - это SDK, который активно сопровождается и движется к полной поддержке спецификации.

Модули выпуска перечислены в README:

Модуль Что в нём
mcp-bom согласованные версии зависимостей
mcp-core основная реализация: stdio, клиент на HttpClient из JDK, сервер на Servlet
mcp-json-jackson3 работа с JSON через Jackson 3
mcp-json-jackson2 работа с JSON через Jackson 2
mcp удобный набор: mcp-core и Jackson 3
mcp-test общие средства тестирования

Проверенный выпуск - 2.0.1 от 19 августа 2026: выпуск на GitHub, пакет io.modelcontextprotocol.sdk:mcp на Maven Central.

В тот же день вышли 1.1.4 и 0.18.4. По плану развития линии 1.x и 0.x получают только исправления безопасности.

Нужна Java 17 или новее: в pom.xml записано java.version 17.

Способ установки описан в руководстве по началу работы: сначала подключается BOM, затем модуль без номера версии.

pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.modelcontextprotocol.sdk</groupId>
<artifactId>mcp-bom</artifactId>
<version>2.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>io.modelcontextprotocol.sdk</groupId>
<artifactId>mcp</artifactId>
</dependency>

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

В документации у BOM стоит номер 2.0.0 и просьба заменить его на последнюю версию с Maven Central. На 4 октября 2026 это 2.0.1.

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

Строки 2026-07-28 и server/discover во всём дереве выпуска встречаются только в файле ROADMAP.md, то есть в плане, а не в коде.

Клиент начинает с initialize. По документации клиента встроенные транспорты StdioClientTransport и HttpClientStreamableHttpTransport объявляют все четыре редакции, поэтому согласование обычно останавливается на самой новой общей.

По коду выпуска клиент просит последнюю редакцию из списка своего транспорта. Для stdio и Streamable HTTP это 2025-11-25. Устаревший транспорт HttpClientSseClientTransport объявляет только 2024-11-05.

Если сервер ответит редакцией, которой нет в списке транспорта, initialize() завершится ошибкой McpError. Сузить список можно, переопределив protocolVersions() в своём транспорте.

По коду McpAsyncServer сервер отвечает той редакцией, которую попросил клиент, если она есть в списке транспорта. Если нет, сервер предлагает самую новую из своих и пишет предупреждение в журнал.

В выпуске есть три вида серверного транспорта: stdio, Streamable HTTP на Servlet и устаревший HTTP+SSE на Servlet.

Встроенной авторизации для сервера нет. README выпуска описывает подключаемые точки авторизации и прямо говорит, что собственной реализации SDK не содержит.

В документации сервера транспорт и сервер показаны отдельными фрагментами. Переменная schema - схема входных данных инструмента, её вы задаёте сами.

Транспорт stdio
StdioServerTransportProvider transportProvider =
new StdioServerTransportProvider(McpJsonDefaults.getMapper());
Сервер с одним инструментом
var server = McpServer.sync(transportProvider)
.toolCall(
Tool.builder("echo", schema).description("Echoes input").build(),
(exchange, request) -> CallToolResult.builder()
.content(List.of(new McpSchema.TextContent(request.arguments().get("text").toString())))
.build()
)
.build();

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

Клиент по Streamable HTTP
McpTransport transport = HttpClientStreamableHttpTransport
.builder("http://your-mcp-server")
.endpoint("/mcp")
.build();
McpSyncClient client = McpClient.sync(transport).build();
InitializeResult initResult = client.initialize();
String negotiatedVersion = initResult.protocolVersion();

Пример собран из двух фрагментов документации выпуска 2.0.1 и здесь не запускался.

Tasks. Нет. Документация и план развития выпуска расширение не упоминают, а поиск слова task по исходному коду ядра выпуска и строки tasks/ по всему дереву ничего не нашёл.

MCP Apps. Неизвестно. Документация выпуска расширение не упоминает. Поиск строк io.modelcontextprotocol/ui и ui:// по дереву выпуска ничего не нашёл.

Функция Как с ней обходится выпуск 2.0.1
initialize Единственный способ установить связь
Сеансы Транспорт Streamable HTTP работает с заголовком Mcp-Session-Id
HTTP+SSE из 2024-11-05 Транспорты поставляются, но помечены @Deprecated. План развития: «SSE transports deprecated in favor of Streamable HTTP»
Roots, Sampling, Logging Методы roots/list, sampling/createMessage и logging/setLevel есть в McpSchema.java

Здесь три разных состояния, и смешивать их нельзя.

  • Выпуск 2.0.1. Редакции до 2025-11-25, эпоха Legacy.
  • Ветка main. На 4 октября 2026 она опережает метку v2.0.1 на 32 изменения, версия в pom.xml - 2.1.0-SNAPSHOT. Файл ProtocolVersions.java в ней по-прежнему заканчивается на 2025-11-25.
  • План. В плане развития сказано, что следующая мажорная линия 3.x реализует редакцию 2026-07-28, включая server/discover и жизненный цикл без состояния, а первые промежуточные выпуски 3.0.0 намечены на сентябрь 2026.
  • Когда выйдет первый выпуск линии 3.x: названный в плане срок прошёл, новой даты нет.
  • Поддержка расширения MCP Apps: SDK о нём не говорит.
  • Применяет ли клиент динамическую регистрацию клиента: в ядре нет встроенной авторизации, а код клиента на этот счёт здесь не разбирался.
  • Кто сопровождает SDK: README выпуска и список официальных SDK этого не говорят.