Всем привет! На связи команда Explyt Spring. Недавно у нас вышел очередной релиз, который включает поддержку MCP Server plugin. Мы добавили “тулы”, облегчающие работу со Spring проектами для LLM. Ранее у нас уже была статья, в которой мы рассказывали об интеграции с Explyt AI плагином. Это были простые промпты для генерации: DTO, Entity, SQL скриптов и прочего. Несмотря на свою простоту, они добавляли в промпт необходимую информацию для выполнения конкретного действия: необходимый файл, тип БД - который подключен к проекту, библиотека для работы с Entity - javax или jakarta и прочее. Теперь пришло время добавить полноценные агентские Spring "тулы" для LLM, чтобы более точно понимать контекст Spring приложения.

MCP Server Plugin

Начиная с версии 2025.2, IDEA имеет встроенный bundled плагин MCP Server, который есть также в Community Edition и OpenIDE в аналогичной версии и имеет открытый исходный код. А это значит, что вся основная работа уже сделана и уже есть вся необходимая инфраструктура: готовый сервис – доступный по URL и базовый набор “тулов” от JetBrains. Данные "тулы" реализованы с учетом код-модели IDEA и используют ее базовые функции для рефакторинга, поиска элементов в коде и прочее. Благодаря этому “рефакторинги” которые вызывает LLM, через JetBrains тулы, выполняются максимально точно, так как будто вы вызвали этот функционал руками из IDEA.

И нам нужно всего лишь реализовать определенную точку расширения плагина MCP Server, чтобы добавить туда свой “тул”. Далее подключаем данный MCP Server к любому AI плагину для IDEA, который поддерживает данный функционал – работу с LLM в агентском режиме. Так мы сможем использовать все тулы, которые там реализованы.

Создаем свой тул

Для того чтобы создать свой инструмент, нужно реализовать точку расширения McpToolset и добавить ее реализацию в plugin.xml.

Вот так будет выглядеть простейший набор тулов:

class TestToolset : McpToolset {

    @McpTool("my_best_tool1")
    @McpDescription(description = "My first tool")
    fun myBestTool1(
        @McpDescription("Path to the project root") projectPath: String
    ): String {
        return "I am best tool from $projectPath"
    }

    @McpTool("my_best_tool2")
    @McpDescription(description = "My second tool")
    fun myBestTool2(
        @McpDescription("Arg1") arg1: String,
        @McpDescription("Arg2") arg2: Int,
    ): String {
        return "I am tool with params $arg1 & $arg2"
    }
}

Мы создали класс, в котором описываем тулы. 

  • Аннотация McpTool задает имя тула. Если не указывать значение, то по дефолту будет имя метода. 

  • Аннотация McpDescription задает описание тула и его параметров. Это самая важная часть, от которой зависит, когда LLM будет вызывать тул и с какими параметрами. Надо написать их так, чтобы она смогла понять, что вы от нее хотите. 

  • Результат можно вернуть в виде строки, примитивного типа или объекта, который можно сериализовать в JSON. По умолчанию, MCP Server плагин использует Kotlin Serialization.

Explyt Spring Tools

У себя в плагине мы реализовали следующий тулы для Spring Boot приложений:

  • explyt_get_spring_boot_applications – возвращает все рутовые точки для всех Spring Boot проектов в текущей рабочей области пользователя. Также добавляет в ответ версию Spring Boot и список подключенных Spring Boot Starters, тип билд системы и пр.

  • explyt_get_project_beans_by_spring_boot_application  для конкретного Spring Boot приложения возвращает список всех “бинов” проекта. Для того что экономить токены, мы отдаем не все “бины” сразу, а есть второй аргумент - тип “бина” который мы хотим получить: Repository, Controller, Aspect и прочее. 

Давайте посмотрим и проверим как это работает. Мы будем использовать Explyt плагин для работы с LLM, он поддерживает агентский режим, подключение внешних MCP серверов и предоставляет все необходимые возможности для работы с кодом:

Подключение MCP сервера
Подключение MCP сервера

Вот так подключаем bundled MCP Server к Explyt плагину – все готово. Далее идем проверять, что получилось. Спросим у модели про наличие Spring Boot проектов и контроллеров в нем:

Видно, что были использованы только наши тулы, которые мы только что создали. Теперь давайте выключим их (Explyt плагин предоставляет такую возможность) и попробуем снова такие же запросы, но с дефолтными “тулами” без Spring:

Видно что был использован гораздо больший набор тулов, а значит модель “съела” больше токенов и выполнила гораздо больше действий, чтобы просканировать и проанализировать файлы в проекте, что также увеличивает вероятность ошибки. Поиск “бинов” и поддержка Dependency Injection – это сильная сторона Explyt Spring плагина, что позволяет нам в подобных случаях обеспечивать большую точность при меньших затратах: как по времени, так и по токенам. Данные тулы могут помочь при разработке Spring Boot приложения, чтобы LLM лучше понимала контекст приложения, с меньшими затратами ресурсов - когда потребуется доработать проект под различные запросы пользователя.

Заключение 

Мы верим, что AI-ассистенты — это не замена разработчику, а мощный инструмент, который берет на себя самую скучную и повторяющуюся работу, освобождая наше время для архитектуры, оптимизации и решения сложных задач. Надеемся, что наши MCP “тулы” для Spring помогут вам в ежедневной работе. Функциональность доступна начиная с версии IDEA 2025.2 и только для Spring Boot проектов.

А с какими еще рутинными задачами в Spring вы сталкиваетесь ежедневно? Что вы бы хотели автоматизировать в первую очередь? Будем рады обсудить в комментариях!

Приглашаем вас попробовать наш плагин, а также делиться своими отзывами и предложениями. Ваша обратная связь поможет нам сделать инструмент более полезным и удобным. Для багрепортов и фичриквестов — GitHub Issues и Telegram-чат с командой Explyt Spring плагина. Также напоминаем, что Spring плагин имеет открытый исходный код, который доступен на GitHub