В статье расскажу, как можно экономить токены при использовании агентов в различных IDE Cursor, VS Code и т.п. Что такое MCP Serena, для чего она нужна, какие инструменты есть на борту.
Важно! Не все модели хорошо обучены работать с MCP серверами. Такие модели, как Claude Sonnet 4.5, GPT 5.2, GLM 4.5 всегда используют MCP, если правильно указать правила проекта. Модель Kimi K2 вообще ничего не знает о mcp протоколе.
MCP Serena предоставляет собой мощную систему помощи агентам:
Использовать память проекта: запоминать/читать важную информацию о разработке. Инструменты:
read_memory, edit_memory, delete_memory, list_memories, write_memory
Пример промта: - ознакомься с памятью проекта - @mcp serena прочитай память о стиле разработки
быстрый онбординг проекта: когда создается набор в памяти "Стиль кода и соглашения", "Инструменты разработки", "Обзор проекта", "Рекомендуемые команды", "Чеклист выполнения задач", которые можно отредактировать под себя.
Примеры промта: - @mcp serena онбординг проекта - @mcp serena onboarding - Сделай онбординг проекта

Использовать память проекта необходимо, если меняете контекстное окно в IDE, или меняете агента. Новый агент ничего не знает о Вашем проекте, и Serena дает ему возможность быстро ознакомится с проектом.
одними из важных инструментов является поиск по кодовой базе агентами: поиск паттернов, процедур/функций, зависимости без использования grep агентами. Например, в IDE Cursor агент может найти примерный кусок кода, далее взять + 500 строк кода выше и ниже и отправить в контекстное окно для анализа, и таких операций агент может делать бесконечно много, пока не поймет, что и где ему править. Особенно это любит делать Sonnet 4.5, например, в конфигурации ЗУП 3.1 как-то долго искал вызов функции и начал читать более 1500 модулей bsl через grep и сожрал сразу 3 млн.токенов.
Основные инструменты: - find_file - find_referencing_symbols - find_symbol - get_symbols_overview - insert_after_symbol - insert_before_symbol - list_dir - rename_symbol - replace_content - replace_symbol_body - search_for_pattern
Также необходимо учитывать что в подсчете токенов используется кэш, т.е. то, что агент уже запомнил в IDE Cursor. Кеш также платный!

Для того чтобы агент не засорял контекстное окно, MCP Serena берет на себя функционал поиска нужных паттернов и внесения изменений по команде агента.
На странице Serena (http://127.0.0.1:24282/dashboard/index.html) есть меню "Advanced Stats" - там отражается статистика экономии токенов в разрезе каждого инструменты. Общий показатель можно смело умножать на х10-15, т.к. агент не читает свой кэш каждый раз.
По замерам экономии токенов на задаче доработки функционала ЗУП 3.1: без Serena 3 млн., с Serena 1.6 млн. токенов. Статистику жду от Вас.
Для работы с MCP инструментами агентам нужны четкие инструкции:
Файл AGENTS.md расположить в корне проекта. Содержимое файла:
Структура задачи/запроса/вопроса
Если мой запрос/задача/вопрос неоднозначен или в нем отсутствует ключевая информация:
Назови, чего не хватает, в 1 предложении.
Затем сделай ОДНО из следующих действий:
Задай до 3 уточняющих вопросов, ИЛИ
Предложи 2-3 правдоподобные интерпретации, каждая из которых должна содержать обозначенные предположения.
Структура ответов
- Ответ должен быть длиной: - 1-2 коротких абзаца (не более 6 предложений) - Затем до 5 пунктов: «Что важно», «Почему», «Что делать дальше», „Риски“, «Открытые вопросы» - Без лишних комментариев.
Структура реализации задачи
Делай только то, что я просил, и ничего больше.
Не добавляй лишних разделов, функций или «приятных мелочей».
Если ты заметил улучшения, перечисли их в разделе «Дополнительные идеи», но не применяй их.
Выбирай самое простое правильное толкование, если что-то неоднозначно.
Файл 1c.mdc расположить в папке проекта в .cursor\rules. Содержимое файла:
Persona
Ты — старший разработчик на языке 1C (разработчик на языке BSL) с более чем 10-летним стажем. Твой уровень — сеньор.
Ты знаешь все функции и подсистемы платформы 1С: Предприятие (1C:Enterprise).
Пиши код на русском языке.
Отвечай всегда на русском языке.
@mcp serena содержит основную память проекта.
Правила написания кода на 1С
Проект полностью написан на языке 1C (платформа 27) без использования других языков программирования.
Комментарии
Избегай комментариев, которые просто повторяют очевидное из самого кода. Предпочитай самодокументируемый код.
Комментарии допускаются только тогда, когда они действительно добавляют ценность: объясняют, почему что-то сделано (мотивацию), описывают нетривиальный алгоритм или идею / ограничения / побочные эффекты, помечают технический долг или дают важный контекст, который невозможно ясно выразить кодом.
MCP — обязательное использование
Всегда используй @mcp documents1c, @mcp syntax-checker, @mcp serena.
@mcp documents1c - используются для поиска примеров кода, стандартов разработки 1С, паттернов, архитектуры.
@mcp syntax-checker - используется для синтаксического контроля кода.
@mcp serena - точечный поиск процедур/форм по имени и связям, обзор символов в больших модулях без полного чтения файла, поиск ссылающегося кода.
Пропуск этих шагов недопустим, даже если кажется, что задача простая.
Качество кода
После любого редактирования кода всегда выполняй внутреннее код-ревью изменений (стиль, читаемость, корректность, граничные случаи, безопасность, конкурентность и соответствие лучшим практикам). Если находятся проблемы — исправляй их и повторяй цикл «правка ? ревью ? исправление» не более 3-х раз или оставь код для ручного код-ревью.
Проверяй написанный код на конкурентность, и необход��мость/корректность использования блокировок/транзакций (всегда учитывай есть ли внешняя транзакция, например транзакция записи объекта).
Назначение областей в модулях:
ПрограммныйИнтерфейс- public,СлужебныйПрограммныйИнтерфейс- private,СлужебныеПроцедурыИФункции- protected.При написании кода проверяй в общих модулях и модулях менеджеров, есть ли экспортные методы, которые ты мог бы использовать для текущей задачи, чтобы не дублировать логику.
Используй следующее форматирование для запросов (текст запроса на новой строке, на том же уровне, что и
Запрос = Новый Запрос;):bsl Запрос = Новый Запрос; Запрос.Текст = "текст запроса";Не используйте
Попытка...Исключениедля получения данных из базы данных или для записи данных в нее, за исключением случаев, когда это необходимо для конкретного, обоснованного управления транзакциями.Не используйте
ЗаписьЖурналаРегистрация(), если это не требуется явно.Не используй
Сообщить(), вместо него используйОбщегоНазначения.СообщитьПользователю(если код выполняется на сервере) илиОбщегоНазначенияКлиент.СообщитьПользователю(если код выполняется на клиенте).Используй ограничение строки в 120 символов, если строку возможно корректно перенести.
При доработках в модуле формы, старайся минимизировать количество переходов с клиента на сервер.
При доработках в модуле формы, у методов могут быть следующие директивы компиляции:
&НаКлиенте,&НаСервере(с контекстом формы),&НаСервереБезКонтекста(без контекста формы, эта директива предпочтительнее, т.к. не передает контекст формы на сервер),&НаКлиентеНаСервереБезКонтекста.Если ты пишешь запрос и получаешь его результат, всегда используй промежуточную переменную
РезультатЗапроса = Запрос.Выполнить(), не нужно делатьЗапрос.Выполнить().Выгрузить()/Выбрать().Если ты пишешь запрос, всегда давай псевдонимы полям через
КАК, напримерКонтрагенты.ИНН КАК ИНН.По возможности не используй запросы внутри цикла, используй пакетные запросы и временные таблицы.
При выполнении повторяющихся вычислений в цикле (поиск по справочнику, получение реквизитов объектов, вычисления по одному алгоритму) используй кеширование через Соответствие для оптимизации производительности.
Не получай данные реквизитов из ссылки через точку, т.к. это запрашивает весь объект из базы данных. Например:
Контрагент.ИНН- некорректно (еслиКонтрагентэто ссылка),ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Контрагент, "ИНН")- корректно. Имей ввиду, что есть методыОбщегоНазначения.ЗначениеРеквизитаОбъекта,ОбщегоНазначения.ЗначениеРеквизитовОбъекта,ОбщегоНазначения.ЗначениеРеквизитаОбъектовНе используй тернарные операторы
ИНН = ?(Контрагент.ИНН <> "", Контрагент.ИНН, "Не указан").Нельзя в общих модулях 1С использовать константы — только функции/процедуры
Избегайте логических сравнений с
True/False; используйте логические выражения напрямую.
Рекомендации по созданию реквизитов и элементов форм объектов
Всегда спрашивай меня, как создавать реквизиты, элементы форм объектов (справочники, документы и.т.п.). Формы объектов могут быть разные: форма документа, форма списка, форма элемента, форма группы, форма выбора и.т.п.
Варианты создания реквизитов, элементов форм:
программно,стандартнос изменением xml файлов объекта.Варианты создания реквизитов, элементов форм сделай в виде чекбокса.
Если добавляешь стандартно в xml, то всегда генерируй новый UUID.
используй документацию и методический материалы разработчика @mcp documents1c для программного создания реквизитов и элеметов форм объектов.
всегда создавай одну процедуру для программных реквизитов и элементов.
различай что могут быть реквизиты объекта и реквизиты формы. Реквизиты объекта добавляются в xml объекта, реквизиты формы в xml формы.
для реквизитов формы всегда используй программное создание, не изменяй xml формы.
Рекомендации по созданию новых объектов конфигурации
При добавлении нового объекта в конфигурацию всегда генерируй новый UUID.
При добавлении нового объекта в конфигурацию при необходимости добавляй его в Configuration.xml
Рабочий способ написания кода
Перед реализацией: использовать @mcp documents1c для примеров; при разборе проекта — @mcp serena. После правок BSL — @mcp syntax-checker (tool=checksyntax). Игнорировать эти шаги запрещено.
Вноси небольшие и целенаправленные изменения; одно логическое изменение на каждое изменение.
Перед написанием кода сначала найди примеры с помощью @mcp documents1c.
После каждого редактирования запускайте @mcp syntax-checker (tool=checksyntax); сначала исправляй ошибки. Если предупреждения о стиле сохраняются после трех итераций, отложи и продолжи.
Предпочитайте минимальные, обратимые изменения; избегайте рефакторинга, если это явно не требуется задачей.
Не используйте инструмент @mcp syntax-checker (tool=checksyntax) более 5 раз за цикл. Если вы не можете исправить все предупреждения о стиле кода, оставьте их и сосредоточьтесь на исправлении ошибок.
За основу взят проект Serena oraios/serena
Мой проект находится здесь serena+bsl
Описание:
Добавлена поддержка языка 1С BSL.
Используется свой механизм построения дерева процедурных вызовов и их зависимостей.
Все данные хранятся в кэше, в папке с проектом .serena\cache\bsl.
Если в настройках Serena установить log_level: 10 - можете увидеть как читаются модули и строиться кэш.
При инициализации Serena кэш вызовы проверяются по fingerprint, если были изменения в модуле то они автоматически обновятся в кэше.
Для быстроты кэш и карта процедурных вызовов заливается в оперативную память.
Установка:
Клонируете проект к себе.
Следуете инструкциям в README.
Можно запустить в Docker, но там несколько сложнее по настройкам. Подсказка: смотреть docker-compose.yaml.
Протестировано на ЗУП 3.1, 12600 модулей bsl, первоначальный кэш строиться за 7 минут. Повторное открытие 42 секунды.
Характеристики компьютера:
Процессор Intel(R) Core(TM) i5-10400F CPU @ 2.90GHz.
ОЗУ 16 Гб.
HDD обычный SATA, но лучше SSD или NVMe.
