MAKER получил MCP-сервер: от ТЗ заказчика до кода в 1С – без потери контекста | infolimp.ru

MAKER получил MCP-сервер: от ТЗ заказчика до кода в 1С – без потери контекста

16 июля 2026 · infolimp.ru

Интеграция 1С с AI-моделями через MCP-сервер обещает сквозную передачу контекста от ТЗ до кода. Но за красивой картинкой скрывается ловушка: стандартная реализация MCP теряет контекст при перезапуске сессии, а 1С-специалисты, привыкшие к синхронным вызовам, часто забывают про управление состоянием. Разбираем, как MAKER решает эту проблему и какие грабли ждут на практике.

MCP-сервер в экосистеме 1С: что изменилось?

MAKER — инструмент для разработки на платформе 1С:Предприятие, который теперь поддерживает MCP (Model Context Protocol). Это протокол, позволяющий AI-модели «помнить» предыдущие шаги диалога: от формулировки технического задания до генерации конкретного кода. В классической схеме каждый запрос к LLM (Large Language Model) был изолирован — контекст приходилось передавать явно в каждом сообщении. MCP-сервер хранит историю сессии на своей стороне, экономя трафик и упрощая разработку.

Однако для 1С-специалиста, привыкшего к детерминированным алгоритмам, это создаёт неочевидную проблему: сессия MCP живёт не вечно. При перезапуске сервера, таймауте или ошибке сети контекст теряется, и AI начинает «забывать» требования заказчика. В статье на Infostart.ru (источник) показано, как MAKER решает эту проблему через механизм контрольных точек, но мы пойдём глубже — разберём, почему стандартные подходы к сохранению контекста в 1С не работают.

Ключевой тезис: MCP-сервер — это не «чёрный ящик», а управляемое состояние. Если вы не контролируете время жизни сессии, вы рискуете получить код, который не соответствует последним правкам ТЗ.

Механика под капотом: как MCP хранит контекст

MCP-сервер использует сессионные токены и временные хранилища (обычно in-memory). Каждый запрос от 1С к серверу содержит идентификатор сессии. Сервер накапливает историю сообщений и возвращает ответ, учитывая весь предыдущий диалог. В MAKER это реализовано через HTTP-эндпоинты:

Проблема в том, что стандартный MCP-сервер (например, от OpenAI) не гарантирует долговременное хранение. При перезапуске сервера все сессии сбрасываются. MAKER решает это через персистентное хранилище — сериализацию контекста в файл или базу данных. Но здесь кроется ловушка для 1С-разработчика: сериализация сложных структур (например, таблиц значений) может привести к потере типов данных.

Пример: потеря контекста при перезапуске

Представьте, что вы в диалоге с AI уточняете требования к документу «РеализацияТоваровУслуг». После 10 сообщений сервер перезапускается. Без контрольных точек AI «забывает» все предыдущие уточнения. В MAKER вы можете явно вызвать /session/checkpoint после каждого ключевого шага. Но если вы этого не сделали — контекст потерян.

// Пример вызова контрольной точки через HTTP из 1С
Функция СохранитьКонтекстMCP(ТокенСессии, ДополнительныеДанные) Экспорт
    Запрос = Новый HTTPЗапрос("/session/checkpoint");
    Запрос.Заголовки = Новый Соответствие;
    Запрос.Заголовки.Вставить("Authorization", "Bearer " + ТокенСессии);
    
    // Формируем тело запроса в JSON
    Тело = Новый Структура;
    Тело.Вставить("context", ДополнительныеДанные); // например, последние требования
    ЗаписьJSON = Новый ЗаписьJSON;
    СтрокаJSON = "";
    ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON);
    ЗаписьJSON.ЗаписатьНачалоОбъекта();
    ЗаписьJSON.ЗаписатьИмяСвойства("context");
    ЗаписатьJSON(ЗаписьJSON, ДополнительныеДанные);
    ЗаписьJSON.ЗаписатьКонецОбъекта();
    ЗаписьJSON.Закрыть();
    СтрокаJSON = ЗаписьJSON.Закрыть(); // на самом деле Закрыть() не возвращает строку, нужно использовать другой подход
    
    // Корректный способ: использовать глобальную функцию ЗаписатьЗначениеJSON
    СтрокаJSON = ЗаписатьЗначениеJSON(Тело);
    Запрос.УстановитьТелоИзСтроки(СтрокаJSON, "UTF-8");
    
    HTTPСоединение = Новый HTTPСоединение("localhost", 8080);
    Ответ = HTTPСоединение.ОтправитьДляОбработки(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        Возврат Истина;
    Иначе
        ЗаписьЖурналаРегистрации("MCP", УровеньЖурналаРегистрации.Ошибка, , , 
            "Ошибка сохранения контекста: " + Ответ.КодСостояния);
        Возврат Ложь;
    КонецЕсли;
КонецФункции

Предупреждение: В примере выше использован ЗаписатьЗначениеJSON — это глобальная функция, которая возвращает строку. Не путайте с объектной техникой ЗаписьJSON, где нужно вызывать Закрыть() и затем получать строку через свойство (но такого свойства нет). В реальном коде для простоты используйте ЗаписатьЗначениеJSON.

Сравнение подходов: прямой вызов LLM vs MCP-сервер

Многие 1С-специалисты, знакомые с HTTP-запросами, предпочитают напрямую вызывать API LLM (например, OpenAI), передавая всю историю диалога в каждом запросе. MCP-сервер берёт управление контекстом на себя. У каждого подхода есть условия применимости.

КритерийПрямой вызов LLMMCP-сервер (MAKER)
Управление контекстомПолностью на стороне 1С (нужно хранить историю)На стороне сервера (сессия)
Объём передаваемых данныхРастёт с каждым запросом (вся история)Только новое сообщение (история на сервере)
Устойчивость к сбоямНизкая: при ошибке нужно повторно отправлять всю историюСредняя: при перезапуске сервера контекст теряется без контрольных точек
Сложность реализации в 1СНизкая: достаточно HTTP-запросаСредняя: требуется управление сессиями и контрольными точками
Подходит для длительных диалоговНет (история разрастается)Да (при правильной настройке персистентности)

Вывод: MCP-сервер оправдан, когда диалог с AI длится более 5-10 шагов и требования часто меняются. Для одноразовых запросов (например, «сгенерируй отчёт по шаблону») прямой вызов проще и надёжнее.

Когда MCP-сервер становится узким местом

Если ваш MAKER-сервер работает в контейнере без постоянного хранилища (например, в Docker без volume), то при каждом перезапуске контейнера сессии сбрасываются. Это типичная ошибка DevOps-настройки. В статье на Infostart упоминается, что MAKER поддерживает сохранение контекста в файл, но по умолчанию эта опция отключена. Рекомендуется сразу настроить персистентное хранилище (SQLite или файл на диске).

Практическое руководство: как не потерять контекст

На основе опыта внедрения MCP-сервера в 1С-проектах сформулируем чек-лист для специалиста.

Чек-лист: настройка MCP-сервера в MAKER

  1. Включите персистентное хранение сессий. В конфигурации MAKER укажите путь к файлу или строку подключения к БД.
  2. Настройте таймаут сессии. По умолчанию он может быть 30 минут. Для длительных диалогов увеличьте до 2-3 часов.
  3. Реализуйте контрольные точки. После каждого значимого уточнения ТЗ вызывайте /session/checkpoint. В 1С это можно сделать в обработчике «ПередЗаписью» документа-задания.
  4. Обрабатывайте ошибки восстановления сессии. Если сервер вернул ошибку 404 (сессия не найдена), создайте новую сессию и передайте последний известный контекст из резервной копии.
  5. Логируйте все действия. Используйте ЗаписьЖурналаРегистрации для отслеживания потери контекста.

Типичные ошибки

// Пример создания сессии с таймаутом и обработкой ошибок
Функция СоздатьСессиюMCP() Экспорт
    Запрос = Новый HTTPЗапрос("/session/start");
    Соединение = Новый HTTPСоединение("localhost", 8080, , , , 30); // таймаут 30 сек
    Попытка
        Ответ = Соединение.ОтправитьДляОбработки(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            Чтение = Новый ЧтениеJSON;
            Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("UTF-8"));
            СтруктураОтвета = ПрочитатьJSON(Чтение, Истина);
            Чтение.Закрыть();
            Возврат СтруктураОтвета.token;
        Иначе
            ВызватьИсключение "MCP: ошибка создания сессии, код " + Ответ.КодСостояния;
        КонецЕсли;
    Исключение
        ЗаписьЖурналаРегистрации("MCP", УровеньЖурналаРегистрации.Ошибка, , , 
            "Не удалось создать сессию: " + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
        Возврат Неопределено;
    КонецПопытки;
КонецФункции

Что делать прямо сейчас

Если вы уже используете MAKER или планируете интеграцию с MCP-сервером:

  1. Проверьте настройки персистентности в вашем экземпляре MAKER. Если их нет — добавьте volume для Docker или укажите путь к файлу.
  2. Добавьте в свой код 1С вызов контрольной точки после каждого этапа формирования ТЗ. Это можно автоматизировать через подписку на событие «ИзменениеТЗ».
  3. Настройте мониторинг сессий: если сессия неактивна более 10 минут, сохраняйте её контекст в регистр сведений 1С как резервную копию.
  4. Проведите нагрузочное тестирование: отправьте 50 запросов подряд и проверьте, не теряется ли контекст после перезапуска сервера.

Помните: MCP-сервер — это мощный инструмент, но он требует дисциплины в управлении состоянием. Без контрольных точек вы рискуете получить код, который не соответствует последним требованиям заказчика. А это уже не просто техническая ошибка, а провал коммуникации.

Расширение «НОПик» для 1С — встраиваемый коннектор к внешнему AI с интеллектуальным поиском по базе. Задавайте вопросы обычными словами - AI сам найдёт нужное. 45 дней бесплатно.

Попробовать НОПик →