Нейросеть для 1С: как повзрослел бесплатный MCP-сервер mcp-1c за сорок релизов
Когда полгода назад mcp-1c анонсировали как «бесплатный MCP-мост», сообщество встретило его с осторожностью: очередная обёртка, работающая через внешнюю компоненту или COM. Но 40 релизов позже проект стал тем, чего не хватало экосистеме — зрелым инструментом, который не просто транслирует HTTP-запросы в платформу 1С, а управляет жизненным циклом сессий, адаптирует protocol buffers под метаданные конфигурации и решает проблемы, которые обычно всплывают через месяц после интеграции. Мы разобрали историю изменений и собрали ключевые узлы, где даже опытный разработчик может споткнуться.
Эволюция mcp-1c: от SSH-туннеля к полноценному протоколу
Первая версия mcp-1c (v0.1, июнь 2024) представляла собой, по сути, адаптер между HTTP из Model Context Protocol и COM-объектом V83.COMConnector. Сессию приходилось держать вручную, каждый вызов открывал новое соединение. К 10-му релизу добавили пул соединений, но он падал при одновременном обращении к разным информационным базам с разными версиями платформы.
Как протокол взаимодействия перестал быть «чёрным ящиком»
Начиная с v0.13 (сентябрь 2024) разработчики mcp-1c отказались от универсального Выполнить(ТекстЗапроса) в пользу специализированных эндпоинтов для каждой сущности: /document/{name}, /catalog/{name}, /query. Это сняло главную проблему — безопасность: теперь нельзя выполнить произвольный код через один запрос, даже если злоумышленник получил доступ к MCP-ключу. Но породило новую — пришлось научиться маппить типы полей 1С (например, ХранилищеЗначения) на стандартные типы JSON. Подход mcp-1c: использовать base64 для бинарных данных и отдельный эндпоинт /upload для файлов больше 1 МБ.
«MCP-сервер для 1С — это не прокси, а прослойка, которая должна знать о метаданных конфигурации не меньше, чем сама платформа. Без этого любой вызов приведёт к ОшибкаПриВызовеМетодаКонтекста или утечке сессии.» — из комментария разработчика kuznechik в чате проекта.
Типовой код интеграции (v1.0+)
// Пример: программное обращение к MCP-серверу mcp-1c из 1С (через HTTPСоединение)
MCPBaseURL = "http://localhost:8080/api/v1";
APIKey = "секретный_ключ_из_настроек";
HTTP = Новый HTTPСоединение(MCPBaseURL, 60); // таймаут 60 сек
// 1. Получить объект документа "ЗаказПокупателя" с кодом "П-001"
Тело = Новый Структура;
Тело.Вставить("objectId", "П-001");
ДанныеJSON = ЗаписатьJSONВСтроку(Тело);
Запрос = Новый HTTPЗапрос("/document/ЗаказПокупателя/read");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + APIKey);
Запрос.УстановитьТелоИзСтроки(ДанныеJSON);
Попытка
Ответ = HTTP.ОтправитьДляОбработки(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Результат = ЧтениеJSONИзСтроки(Ответ.ПолучитьТелоКакСтроку());
// Результат — Структура с полями документа
Иначе
ВызватьИсключение "MCP-сервер вернул " + Ответ.КодСостояния + ": " + Ответ.ПолучитьТелоКакСтроку();
КонецЕсли;
Исключение
ЗаписьЖурналаРегистрации("MCP_Error", УровеньЖурналаРегистрации.Ошибка,,,
КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
// 2. Создать новый заказ (используем общий эндпоинт /query)
ЗапросСоздания = Новый HTTPЗапрос("/query/execute");
// Тело запроса — JSON с описанием объекта
... // через реальный API ИТС
Три грабли, которые mcp-1c научился обходить (и которые вы можете пропустить)
Грабля 1: Сериализация сложных типов (ХранилищеЗначения и ссылки)
В первых версиях mcp-1c пытался сериализовать поля типа ХранилищеЗначения как строку в кодировке Base64, но клиентская LLM (Large Language Model) часто обрезала её из-за ограничения токенов. Начиная с v0.24 сервер начал возвращать два поля: data (base64) и metadata (размер, хеш). Если размер превышает 500 КБ — предлагает скачать через отдельный эндпоинт /blob/{id}. Это незаметно, если тестировать на маленьких файлах, но в продуктиве, когда начинают передавать изображения из ПланОбмена.Образ, интеграция просто виснет.
Грабля 2: Таймауты и асинхронность
MCP-протокол подразумевает синхронные вызовы (запрос-ответ). Но сложные отчёты или перепроведение документа могут длиться больше 30 секунд. mcp-1c v0.30 ввёл механизм «long-running operations»: при превышении таймаута сервер возвращает идентификатор задачи, а клиент должен опрашивать статус. Типичная ошибка — не обрабатывать код 202 Accepted и считать, что запрос упал. В настройках MCP-клиента (например, в Claude Desktop) нужно выставить connection_timeout: 0 (бесконечно) и добавить логику polling.
«Самая частая поддержка в mcp-1c чате: „У меня всё падает, когда запускаю обработку закрытия месяца“. Ответ — переходите на асинхронный режим, не ждите синхронно». — модератор сообщества mcp-1c.
Грабля 3: Управление контекстом сессии и блокировки
MCP-сервер для 1С должен открывать сессию через COMСоединение. Если один и тот же пользователь одновременно делает два запроса, возникают блокировки из-за монопольного доступа (если база файловая). mcp-1c начиная с v0.36 реализует пул сессий с изоляцией по ключу пользователя (берется из заголовка X-User-ID). Если такого заголовка нет — все запросы идут в одну сессию, что гарантированно приводит к deadlock'у при параллельных записях. Многие разработчики забывают этот заголовок, и сервер работает до первого одновременного обращения.
Сравнение подходов: mcp-1c vs Self-hosted vs Платные аналоги
Лицензии на коммерческие MCP-шлюзы (например, Ai2b) стоят от 100 000 руб. за инсталляцию и требуют установки компонент на сервер 1С. Самописный вариант на Python с python-1c даёт гибкость, но требует поддержки протокола MCP, что отнимает 2–3 недели на первую реализацию. mcp-1c занимает промежуточное положение: бесплатен, поддерживает как REST, так и WebSocket, обновляется каждые 2–3 недели, но не гарантирует стабильность при нестандартных конфигурациях (например, с разделением данных). Выбор стоит делать исходя из объёма изменений конфигурации: если ваша базовая конфигурация — типовой ЗУП 3.1, mcp-1c подходит сразу; если два десятка доработок — потребуется завести фичу-реквест.
Практические рекомендации: что делать прямо сейчас
Если вы уже используете mcp-1c или только планируете внедрение — проверьте следующие точки, где чаще всего ошибаются опытные коллеги:
Чек-лист для рабочая среда-внедрения mcp-1c
- Версия сервера: не ниже v0.38 (в ней исправлена утечка COM-объектов при долгих запросах).
- Тайм-ауты: настройте в MCP-клиенте
connection_timeout=0; если LLM-хост (например, OpenAI) сам обрывает соединение через 60 с — увеличьте лимит, разрешивmax_retries=3. - Пул сессий: обязательно передавайте заголовок
X-User-ID(уникальный идентификатор пользователя 1С или GUID сессии). Без него — блокировки. - Журнал: включите логирование уровня DEBUG в
mcp-1c.conf; при ошибках проверьте сначала лог сервера, не вините LLM. - Обновление метаданных: после изменения конфигурации (добавление нового реквизита) перезапустите mcp-1c; сервер кеширует описание метаданных при старте. Иначе новые поля будут недоступны.
Типичные ошибки
- Использование запроса
/query/executeдля выполнения произвольного кода — опасно: mcp-1c по умолчанию блокирует операторыВыполнить(),ВставитьСтроку(),УдалитьСтроку()вне разрешённых эндпоинтов. Если нужно выполнить нестандартное действие — расширяйте конфигурацию сервера через файлallowlist.txt. - Передача бинарных данных (>10 MB) через JSON — сервер уходит в OOM. Используйте эндпоинт
/uploadс multipart/form-data. - Игнорирование версии платформы 1С: mcp-1c v0.40 не поддерживает 8.3.22 (нужен флаг совместимости).
Что дальше? Сценарий Apollo вместо REST
В релизе v0.40 (март 2025) анонсирована поддержка GraphQL-стиля через эндпоинт /graphql — это позволит LLM-моделям запрашивать только нужные поля, снижая нагрузку на COM-соединение. Фактически mcp-1c превращается не просто в MCP-сервер, а в шлюз к данным 1С с семантическим разбором запросов на естественном языке. Именно этого не хватало для промышленного использования нейросетей в учёте — чтобы модель «понимала», что Остатки товаров на складе — это вызов к регистру накопления, а не к справочнику.
«mcp-1c — это сейчас единственный инструмент, где LLM может сама построить запрос к 1С, не зная структуры метаданных. Плата за это — необходимость тонкой настройки контекста. Но 40 релизов превратили прототип в production-инструмент».
Статья на Infostart подробно разбирает внутреннюю архитектуру сервера и его роадмап. Рекомендуем прочитать её, если вы планируете интегрировать нейросеть в свои продукты на 1С — там описаны конкретные кейсы и ссылки на реальные конфигурации.
Попробовать НОПик →