Class McpRootsBootstrapper
Согласно MCP-спецификации сервер сам должен один раз дёрнуть roots/list
после notifications/initialized, если клиент объявил roots-capability.
Уведомление notifications/roots/list_changed — только для последующих
изменений. Если клиент (например, Claude Code 2.1.178 на Windows) объявляет
пустой набор и не шлёт list_changed, без проактивного запроса сервер не узнает
об открытых workspace-folder'ах и все workspace-зависимые tools падают
с «No registered workspace».
Spring AI 2.0 не предоставляет post-initialize hook, поэтому запрашиваем roots
лениво: при первом получении McpSyncServerExchange в любом tool-вызове.
Бутстрап однократный — попытка фиксируется флагом, повторных запросов не идёт.
Уведомления roots/list_changed (если клиент их шлёт) продолжают обрабатываться
штатно через McpRootsChangeConsumer.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidbootstrapIfNeeded(@Nullable McpSyncServerExchange exchange) При первом вызове запрашивает у клиентаroots/list, если он объявил roots-capability, и передаёт ответ вMcpRootsChangeConsumer.
-
Constructor Details
-
McpRootsBootstrapper
@ConstructorProperties("rootsConsumer") public McpRootsBootstrapper(McpRootsChangeConsumer rootsConsumer)
-
-
Method Details
-
bootstrapIfNeeded
При первом вызове запрашивает у клиентаroots/list, если он объявил roots-capability, и передаёт ответ вMcpRootsChangeConsumer. Повторные вызовы — no-op (включая случаи когда клиент не поддерживает roots или запрос упал с ошибкой).- Parameters:
exchange- exchange tool-вызова, через который выполняется запрос.
-