Конфигурация
Переменные окружения
Обязательные
LICENSE_KEY
Лицензионный ключ. Без него сервер не стартует
YOUR_LICENSE_KEY
Embedding
EMBEDDING_API_BASE
URL OpenAI-совместимого API, включая /v1. Пробуется раньше локальной модели
http://host.docker.internal:1234/v1
EMBEDDING_API_BASE_NO_V1
Передавать базу API дословно, без автодобавления /v1 (значения 1, true, yes) — для шлюзов, отдающих OpenAI-совместимый API без суффикса /v1. С 10.10.2026
false
EMBEDDING_API_KEY
Ключ API (LM Studio значение не проверяет)
lm-studio
EMBEDDING_MODEL
Имя модели — и для API, и для локального режима. У модели Qwen3-Embedding запрос идёт с инструкцией задачи (см. Инструкция к запросу у Qwen3)
intfloat/multilingual-e5-small
EMBEDDING_API_TIMEOUT
Сколько секунд один запрос к embedding API ждёт ответа. Если модель считает на CPU и обрабатывает INDEXING_WORKERS батчей по очереди, последний из них может ждать дольше — увеличьте значение (или уменьшите INDEXING_WORKERS)
600
EMBEDDING_MAX_ATTEMPTS
Сколько раз отправляется один запрос к API эмбеддингов: лимит запросов (429) и ответы 500/502/503 повторяются до этого числа; таймаут и обрыв соединения повторяет попытка пакета. Повторов внутри клиента OpenAI нет
6
BATCH_MAX_RETRIES
Сколько раз пробуется пакет индексации. Пакет отправляет к провайдеру не больше BATCH_MAX_RETRIES × EMBEDDING_MAX_ATTEMPTS запросов (по умолчанию 30; раньше клиент сам повторял каждый запрос ещё дважды — до 90 без настройки). Для провайдера с платой за запрос уменьшите оба значения, например EMBEDDING_MAX_ATTEMPTS=1 и BATCH_MAX_RETRIES=2. Индекс не перестраивается
5
EMBEDDING_ALLOW_OFFLINE_FALLBACK
Можно ли заменить недоступный на старте embedding API встроенной моделью. true — как раньше: после неудачной проверки грузится встроенная модель. false — старт ждёт API (см. подсказку ниже). С 27.09.2026
false, если задан EMBEDDING_API_BASE; иначе true
HF_HOME
Каталог кэша модели; в полный образ модель уложена сюда при сборке
/app/model_cache
HF_HUB_OFFLINE
Запрет загрузок при старте; 0 разрешает докачать модель
1
RESET_CACHE
Очистить кэш моделей при старте (удаляется только содержимое HF_HOME, сам том сохраняется)
false
Пути и данные
1C_BIN_PATH
Смонтированный каталог с shcntx_ru.hbk (папка bin платформы, сама папка с архивом или путь к файлу). Не задан — берётся архив, поставляемый с образом
(не задано)
PLUGIN_DIR
Каталог плагинов; смонтируйте свой, чтобы не пересобирать образ
/app/plugins
PLUGIN_STRICT_DERIVED_STATE
true — упавший hook on_document роняет сборку индекса; false — документ берётся как прочитан, а ошибка считается
false
Индексация
RESET_DATABASE
Разрешить разрушающие операции и очистить индекс
false
INDEX_RETAIN_GENERATIONS
Сколько прошлых поколений индекса хранить для отката
1
INDEXING_WORKERS
Максимум параллельных батчей индексации; запросы к embedding API могут выполняться одновременно
5
INDEXING_BATCH_SIZE
Строк в одной записи при индексации; именно это ограничивает память сборки — уменьшите на машине, которой её не хватает
100
INDEXING_WORKERS ограничивает число одновременно обрабатываемых батчей, но не гарантирует ускорения пропорционально значению. Чтение и подготовка документов должны успевать снабжать пул работой; запись в индекс сериализована. В полном образе локальная модель тоже вызывается последовательно, чтобы избежать конфликтов токенизатора. При работе через API сам сервер допускает параллельные HTTP-запросы, но провайдер может ставить их в очередь.
После изменения переменной пересоздайте контейнер. В начале индексации журнал показывает фактическое INDEXING_WORKERS и предел батчей в обработке. Для проверки конкурентности API сопоставляйте одновременно начатые запросы в журнале MCP и очередь на стороне провайдера; одинаковое время двух прогонов само по себе не означает, что настройка проигнорирована.
Транспорт и HTTP-сессии
USESSE
Использовать SSE-транспорт (для legacy-клиентов)
false
MCP_SESSION_IDLE_TTL_SECONDS
Время простоя сессии Streamable HTTP до уборки
1800
MCP_SESSION_MAX_LIFETIME_SECONDS
Максимальное время жизни сессии
86400
MCP_SESSION_CAP
Максимум одновременных stateful-сессий
1000
MCP_SESSION_CLEANUP_INTERVAL_SECONDS
Интервал сверки времени жизни сессий и метрик
60
/mcp и /mcp/ обслуживаются одним и тем же эндпоинтом напрямую — клиента никогда не просят повторить MCP-запрос через redirect. Счётчики активных сессий и уборки видны в ответе /health.
Тонкая настройка поиска
Значения измерены на этом корпусе и на поставляемой модели; менять их нужно только осознанно.
RELEVANCE_MAX_VECTOR_DISTANCE
Максимальная cosine-distance векторного кандидата; меньше — лучше совпадение
0.35
RELEVANCE_MAX_LEXICAL_RANK
Сколько первых кандидатов лексической дорожки допускается независимо от численного score
2
CHUNK_MAX_TOKENS
Бюджет токенов одного чанка. Задавайте только для API-модели, не сообщающей свой лимит. Изменение вызывает переиндексацию
окно модели
CHUNK_OVERLAP_TOKENS
Сколько предыдущего чанка повторяет следующий. Изменение вызывает переиндексацию
48
CHUNK_MAX_PER_PARENT
Максимум чанков одного документа в одном ответе
3
CHUNK_DUPLICATE_THRESHOLD
Порог схожести, выше которого два чанка одного документа считаются одним ответом
0.85
FILTERED_FETCH_FACTOR
Во сколько раз шире опрашиваются дорожки при заданном doc_type
4
DOCINFO_FALLBACK_CANDIDATES
Предел числа кандидатов, когда имя не совпало точно
5
DOCINFO_AMBIGUITY_CANDIDATES
Предел числа кандидатов в одном ответе для неоднозначного имени
20
LEXICAL_PROFILE
Токенизация лексической дорожки: stemmed, plain, folded, verbatim. Изменение вызывает переиндексацию
stemmed
RESPONSE_MAX_TOKENS
Дополнительно ограничивать ответ в токенах, если модель отдаёт токенизатор. max_chars действует всегда
(не задано)
RESPONSE_CURSOR_SECRET
Ключ подписи курсоров постраничного вывода
(не задано)
Векторная дорожка проходит по distance, лексическая — по рангу. У лексической дорожки в текущем контракте отдельного score-порога нет. Старый RELEVANCE_MIN_LEXICAL_SCORE больше не читается: при его наличии сервер пишет предупреждение и требует перейти на RELEVANCE_MAX_LEXICAL_RANK.
Журналирование
LOG_DIR
Каталог файлов журнала
logs
LOG_FILE
Имя текущего файла журнала
app.log
LOG_MAX_BYTES
Размер, при котором журнал ротируется
10485760 (10 МиБ)
LOG_BACKUP_COUNT
Сколько ротированных файлов хранится
5
LOG_LEVEL
Уровень записи в файл. DEBUG добавляет записи по документам и текст запросов
INFO
LOG_CONSOLE_LEVEL
Уровень вывода в stdout, если он должен отличаться
значение LOG_LEVEL
LOG_PROGRESS_EVERY
Через сколько пакетов писать прогресс индексации
10
Монтируемые тома
E:/bases/mcp_docs
/app/index
Индекс (поколения zvec) — обязательно
E:/bases/mcp_model_cache
/app/model_cache
Кэш embedding-моделей
C:/Program Files/1cv8/X.X.XX.XXXX/bin
/1c_docs
Папка bin платформы, если нужна справка своей версии (только чтение)
E:/plugins/mcp_docs
/app/plugins
Свои плагины
Примеры конфигураций
Минимальная (встроенная CPU-модель)
Рекомендуемая (LM Studio + своя версия платформы)
Light-образ (без PyTorch, embedding только через API)
Локальной модели в light-образе нет: если embedding API недоступен, индекс не строится, /ready отвечает degraded с причиной в поле failure, а процесс продолжает работать.
CPU с выбором модели
Плагины
Сервер поставляется скомпилированным, но расширяется плагинами. Плагин — один Python-файл в /app/plugins с функциями известных имён: ни базового класса, ни декоратора, ни регистрации, ни манифеста. Пустой файл — валидный плагин. Функции нет — hook не срабатывает. Упавший hook перехватывается, пишется в журнал с именем файла и трассировкой и отключается до следующей перезагрузки, но сервер не роняет.
Объявлены пять hooks — on_startup, on_request, on_query, on_result (в рамках вызова) и on_document (формирует индекс) — и две декларативные таблицы: ALIASES (дополнительные имена, которые разрешает docinfo) и TOOL_PRESETS (дополнительные MCP-инструменты как пресеты docsearch и docinfo).
Полный справочник хуков и таблиц
/app/plugin_api.py в образе (читаемый исходник)
Короткая версия
/app/plugins/AGENTS.md
Пример со всеми хуками (закомментирован)
/app/plugins/example.py
Проверить плагин без данных и индекса
docker run --rm -v "$PWD/my_plugin.py:/tmp/my_plugin.py" comol/1c_help_mcp:latest python3 plugin_host.py --dry-run /tmp/my_plugin.py
Что загружено и что отключено
GET /plugins
Перечитать каталог без перезапуска
POST /plugins/reload
Правка call-scoped хука действует со следующего вызова после перезагрузки и ничего не пересобирает. on_document формирует то, что пишется в индекс, поэтому исходник объявившего его файла входит в отпечаток годности индекса: правка делает сохранённый индекс устаревшим, и следующий старт пересобирает его в staging, пока обслуживающее поколение продолжает отвечать.
Общие правила, форма payload каждого хука и готовые примеры: Доработка MCP: система плагинов и справочник хуков HelpSearchServer.
Конфигурация Cursor
mcp.json
Путь к файлу
GPU ускорение
NVIDIA GPU через Docker
Last updated