Конфигурация
Переменные окружения MCP сервера
Обязательные
LICENSE_KEY
Лицензионный ключ
YOUR_LICENSE_KEY
NEO4J_URI
URI подключения к Neo4j
bolt://neo4j:7687
NEO4J_USERNAME
Пользователь Neo4j
neo4j
NEO4J_USER
Устаревший алиас NEO4J_USERNAME. Если заданы обе переменные, приоритет у NEO4J_USERNAME, а выбор пишется в лог
—
NEO4J_PASSWORD
Пароль Neo4j. Значения по умолчанию нет: в образе пароль не зашит, и запуск без этой переменной завершается ошибкой аутентификации Neo4j
Обязательно
Источники метаданных и кода
METADATA_DIRECTORY
Каталог с текстовым отчётом Конфигуратора. Может быть пустым при работе по Designer XML
/app/metadata
METADATA_SOURCE
auto — синтез из Designer XML, иначе дескрипторы проекта 1C:EDT, иначе готовый *.txt; report — требовать отчёт; xml — только Designer-выгрузка, отчёт игнорируется, EDT-корень отклоняется; edt — только проект 1C:EDT, отчёт не ищется и не пишется
auto
GENERATED_REPORT_DIRECTORY
Кэш синтезированного отчёта; не должен находиться внутри CODE_EXPORT_PATH
INGESTION_STATE_DIRECTORY/generated-report
CODE_EXPORT_PATH
Корень Designer XML-выгрузки или проекта 1C:EDT. Для Designer XML служит источником и BSL/форм, и синтеза отчёта
—
METADATA_FILES
Каталог дополнительных детальных файлов метаданных
—
Синтез отчёта поддерживает Designer XML (каталог с Configuration.xml) и выполняется в фоновой стадии metadata_ingest.
Готовый текстовый отчёт больше не нужен. При METADATA_SOURCE=auto сначала берётся Designer XML-выгрузка, иначе проект 1C:EDT, и только если выгрузки нет — лежащий рядом *.txt. Отчёт на английском ScriptVariant не строит реквизиты, ТЧ и формы; выгрузка это умеет. При METADATA_SOURCE=edt метаданные читаются прямо из .mdo. Не поддерживается на EDT только синтез отчёта: METADATA_SOURCE=xml на EDT-корне возвращает unsupported_by_edt. Формат EDT для остальных контуров по-прежнему включается через SOURCE_FORMAT_ADAPTERS_ENABLED=true и SOURCE_FORMAT=edt.
При METADATA_SOURCE=auto выгрузка старше любого *.txt в METADATA_DIRECTORY. Чтобы читать именно отчёт, задайте METADATA_SOURCE=report. Если каталог отчёта не используется, не монтируйте его и не занимайте под что-либо другое.
Управление индексацией
RESET_DATABASE
Переиндексировать при запуске
false
ASYNC_VECTOR_INDEXING
Индексация векторов в фоне (неблокирующая)
true
BACKGROUND_POST_INDEXING
Пост-обработка индексов в фоне после старта
true
INDEX_BATCH_SIZE
Количество объектов, обрабатываемых за один пакет при создании векторного индекса
512
GRAPH_FORM_XML_BATCH_SIZE
Сколько управляемых форм вместе проходят bulk-поиск владельцев и проверку resume. Запись этой пачки может дополнительно делиться по GRAPH_FORM_XML_BATCH_MAX_ROWS. Значение 1 возвращает прежний путь «по одной форме». Допустимый диапазон 1..500, значение вне диапазона отклоняется при старте
50
GRAPH_FORM_XML_BATCH_MAX_ROWS
Порог сброса накопленных строк, проверяемый после добавления целой формы; это не жёсткий предел транзакции. Форма крупнее порога записывается отдельно и сама может превысить это значение. Минимум 1, значение ниже отклоняется при старте
20000
MAX_TOKENS_PER_BATCH
Максимальное количество токенов в одном пакете запроса к API эмбеддингов
28000
EMBEDDING_REQUEST_CONCURRENCY
Количество параллельных запросов к API эмбеддингов
6
EMBEDDING_MAX_TOKENS
Максимальное количество токенов на один текст при генерации эмбеддингов. Определяется автоматически по модели, но можно переопределить
(авто)
EMBEDDING_CHUNK_TARGET_TOKENS
Целевой размер чанка при разбивке длинных текстов
(авто)
EMBEDDING_CHUNK_OVERLAP_TOKENS
Перекрытие чанков при разбивке длинных текстов
(авто)
GRAPH_FORM_XML_BATCH_SIZE и GRAPH_FORM_XML_BATCH_MAX_ROWS описывают текущий beta-кандидат исходников. Наличие этого контракта в конкретном опубликованном образе проверяйте по release notes перед изменением настроек.
В актуальном исходном коде структурная транзакция ставит свойству form_xml_structure_state значение pending, а после сохранения reference evidence — complete. Resume пропускает только завершённые формы. Если evidence не сохранился, счётчик left recoverable показывает оставшиеся pending: следующий прогон перепишет именно их. Частичная структура при ошибке записи удаляется, чтобы следующий прогон не продолжил поверх неполных данных.
Embedding модели
OPENAI_API_BASE
URL API для генерации и LLM
http://host.docker.internal:1234/v1
OPENAI_API_KEY
Ключ API для генерации и LLM
lm-studio
OPENAI_MODEL
LLM модель для генерации описаний
gpt-5
OPENAI_TEMPERATURE
Температура генерации (0–1). Для reasoning-моделей (o1, o3, gpt-5) игнорируется
0.1
OPENAI_MAX_COMPLETION_TOKENS
Максимальное количество токенов в ответе LLM
2000
OPENAI_MODEL_IS_REASONING
Принудительное указание, является ли модель «рассуждающей». Если не указано — определяется автоматически по имени модели (o1*, o3*, gpt-5*)
(авто)
EMBEDDING_API_BASE
Отдельный URL для API эмбеддингов (если отличается от LLM API)
—
EMBEDDING_API_KEY
Отдельный ключ для API эмбеддингов
—
EMBEDDING_MODEL
Модель для API эмбеддингов
qwen/qwen3-embedding-8b
OPENAI_EMBEDDING_DIMENSIONS
Явное указание размерности эмбеддингов
(авто)
LOCAL_EMBEDDING_MODEL
Локальная CPU модель (sentence-transformers). Совместимый алиас — OFFLINE_EMBEDDING_MODEL
intfloat/multilingual-e5-small
EMBEDDING_ALLOW_OFFLINE_FALLBACK
Разрешить автопереход на локальную модель при недоступности API
true
Старые имена OPENAI_EMBEDDING_API_BASE, OPENAI_EMBEDDING_API_KEY и OPENAI_EMBEDDING_MODEL остаются совместимыми алиасами.
Шаблонный режим
TEMPLATE_MODE_ENABLED
Включить шаблонный режим — JSON-запросы с мгновенными ответами без LLM
true
TEMPLATE_MODE_ONLY
Только шаблонные запросы, LLM не используется. Требует TEMPLATE_MODE_ENABLED=true
false
Поиск по коду
ENABLE_CODE_SEARCH
Включить поиск по BSL-файлам
true
CODE_SEARCH_MAX_FILE_SIZE
Объявленный порог размера BSL-файла (байт). Индексация его не применяет: отбора и обрезки по этому порогу нет — см. врезку ниже
50000
CODE_SEARCH_MAX_FILE_SIZE не отсекает крупные файлы. Значение объявлено в настройках сервера, но индексация его не применяет: ни отбора, ни обрезки по этому порогу нет.
Что делает порог. Ничего: из-за него файл крупнее
50000байт не пропускается и не укорачивается, и сам по себе он не определяет, что попадёт в граф и в поиск. Остальные условия действуют как обычно и от него не зависят: нечитаемый или недекодируемый файл, ошибки разбора, выбранные режимы загрузки (LOAD_BSL_SIGNATURES,ENABLE_ROUTINE_EMBEDDINGS,ENABLE_CODE_SEARCH) и границы проекта.Пропуск или обрезка. Ни того, ни другого по этому порогу: BSL-файл читается целиком, а не до первых
50000байт.Токенный бюджет эмбеддингов — отдельный механизм. Текст, который уходит на эмбеддинг процедуры, ограничен бюджетом токенов модели (
EMBEDDING_MAX_TOKENS, по умолчанию определяется по модели): сигнатура и описание сохраняются целиком, длинное тело внутри этого текста укорачивается. Это токены на процедуру, а не байты на файл, и с50000никак не связано — умолчаниеCODE_SEARCH_MAX_FILE_SIZEограничение модели эмбеддингов не отражает.Что видит пользователь. Поиск по коду работает на уровне процедур и функций: полнотекстовый маршрут учитывает имя, сигнатуру, описание и тело процедуры. Сколько текста придёт в ответе, задают
detail_levelи лимиты размера ответа — это формат выдачи, а не усечение исходного файла. Если нужный фрагмент не нашёлся, смотрите на формулировку запроса и режим поиска (правила Lucene и анализатор), фильтры иtop_k, а также на то, дошла ли индексация до этого модуля.Цена изменения. Повышать значение ради полноты индекса нет смысла: оно ничего не расширяет и на расход эмбеддингов не влияет.
В типовых конфигурациях фирмы «1С» встречаются модули в сотни раз крупнее 50000 байт. Раз этот порог ничего не отсекает, время индексации, объём базы Neo4j и расход эмбеддингов определяются всем объёмом выгрузки — оценивайте их замером на своих данных.
Семантический поиск
ENABLE_BUSINESS_SEARCH
Включить семантический поиск по бизнес-описаниям
true
CALCULATE_BUSINESS_INFO
Генерировать AI бизнес-описания для объектов метаданных
false
BUSINESS_INFO_MAX_TOKENS
Максимум токенов контекста для бизнес-описаний
4000
BUSINESS_INFO_RETRY_COUNT
Количество повторных попыток при ошибках API
3
BUSINESS_INFO_THREADS
Количество параллельных воркеров генерации бизнес-описаний
10
ENABLE_METADATA_DESCRIPTION_EMBEDDING
Генерировать эмбеддинги для описательных полей метаданных (Синоним, Комментарий, Описание, справка)
true
Каталог исходников монтируется на запись — без :ro. При CALCULATE_BUSINESS_INFO=true описание пишется в business_info.html рядом с объектом метаданных, и в Neo4j оно попадает только после успешной записи файла. Если /app/code смонтирован read-only, каждый объект даёт [Errno 30] Read-only file system: /app/code/.../business_info.html: описание не сохраняется ни на диск, ни в граф, а токены LLM тратятся впустую. Контейнер при этом остаётся healthy, структурный граф и векторный индекс описаний строятся как обычно — ошибку легко не заметить.
Проверить правом на запись, а не глазами: docker exec 1c_graph_metadata sh -c "touch /app/code/.rwcheck && rm /app/code/.rwcheck && echo OK" — на корректном монтировании команда печатает OK, на read-only падает с Read-only file system. Остальные серверы (CodeMetadataSearch, SyntaxCheck, 1CCodeChecker) читают тот же каталог и монтируют его :ro — это нормально, требование к записи есть только у GraphMetadataSearch.
При SOURCE_FORMAT=edt (или когда корень — проект EDT: DT-INF, .project, src/Configuration) генератор пишет src/<Категория>/<Имя>/business_info.html рядом с <Имя>.mdo. Пути выгрузки Конфигуратора (Documents/<Имя>.xml без src/) на EDT-дереве не используются, в том числе если в Neo4j после разбора отчёта остались такие пути. Объект без папки на диске учитывается как Skipped (no source), а не как Skipped (existing).
BSL-граф (Module / Routine / CALLS)
CODE_EXPORT_PATH
Путь к Designer XML-выгрузке или проекту 1C:EDT (тот же источник, что описан выше)
—
LOAD_BSL_SIGNATURES
Загружать сигнатуры BSL-кода в граф — создавать ноды Module и Routine с графом вызовов CALLS
true
ENABLE_ROUTINE_EMBEDDINGS
Генерировать эмбеддинги для процедур/функций. Требует LOAD_BSL_SIGNATURES=true. Индексация в фоновом потоке
true
BSL_READ_PREFIX_BYTES
Сколько байт файла читается для быстрой классификации BSL
4096
Дополнительные данные из XML-выгрузки
Все опции ниже требуют заполнения CODE_EXPORT_PATH.
LOAD_FORMS_FROM_XML
Загружать структуру управляемых форм из Ext/Form.xml (FormControl, FormEvent, FormAttribute)
false
LOAD_ORDINARY_FORMS
Загружать структуру обычных форм (отдельная модель узлов от управляемых)
true
LOAD_EVENT_SUBSCRIPTIONS
Загружать подписки на события из EventSubscriptions/*.xml
false
LOAD_PREDEFINED_VALUES
Загружать предопределённые элементы из */Predefined.xml
false
LOAD_ROLE_RIGHTS
Загружать права ролей из Roles/*/Ext/Rights.xml
false
LOAD_HELP_FROM_HTML
Загружать справку объектов из */Help/ru.html
false
LOAD_DCS_TEMPLATES
Загружать схемы компоновки данных (для get_report_dcs_lineage)
false
Поддержка расширений
EXTENSION_NAME
Имя расширения. Если задано, все загружаемые объекты получают origin="extension"
—
EXTENSION_BASE_PROJECT
Имя базового проекта (PROJECT_NAME базовой конфигурации) для построения связей EXTENDS/OVERRIDES
—
EXTENSION_BASE_PROJECT_ID
Зарегистрированный PROJECT_ID базовой конфигурации. Нужен, когда идентификатор проекта отличается от отображаемого имени в EXTENSION_BASE_PROJECT. Разрешается только в текущем MCP_NAMESPACE. Если не задан, идентификатором считается само значение EXTENSION_BASE_PROJECT
—
EXTENSION_APPLY_ORDER
Порядок применения слоя расширения при резолве эффективной сущности
1
Массовая загрузка расширений из каталога
Один прогон с EXTENSION_NAME загружает одно расширение. В 1С:ERP к конфигурации может быть применено до 200 расширений-патчей, и настраивать 200 прогонов вручную — не рабочий процесс. Поэтому прогон можно направить на каталог массовой выгрузки (/DumpConfigToFiles … -AllExtensions): каждая найденная в нём выгрузка расширения становится слоем одного и того же проекта.
EXTENSION_CATALOG_ENABLED
Распознавать выгрузки расширений внутри каталога и загружать их слоями за один прогон
false
EXTENSIONS_PATH
Где внутри контейнера лежат выгрузки расширений. Пусто — подкаталоги каталога выгрузки (CODE_EXPORT_PATH, затем METADATA_FILES), куда их кладёт массовая выгрузка. В поставляемых compose-профилях — /app/extensions
(пусто)
EXTENSIONS_HOST_PATH
Переменная compose-файла, а не сервера: каталог расширений на хосте, который монтируется только на чтение в /app/extensions
(зависит от профиля)
EXTENSION_ORDER_MANIFEST
JSON со списком имён расширений в порядке применения (список или объект с полем order). Пусто — ищется extensions_order.json в каталоге
(пусто)
EXTENSION_CATALOG_SYNC
Синхронизировать набор слоёв с каталогом: исчезнувшая выгрузка — слой удаляется, новая — добавляется, изменённая — обновляется, неизменённая — не переингестируется. Базовый слой не удаляется никогда
true
Режим выключен по умолчанию: распознавание читает каталоги, и проект, который загружает одно расширение объявленным способом, должен продолжать делать ровно это. Одиночный ручной режим (EXTENSION_NAME на прогон) сохраняется.
Расширение в 1С не применяется к другому расширению, поэтому слои по-прежнему прикрепляются только к базовому (EXTENDS/OVERRIDES ведут от расширения к базе), связей «расширение → расширение» нет.
Объекты базы и расширений с одним именем (типичный случай — общий Report.txt у нескольких выгрузок) хранятся отдельными узлами: в ключ MERGE входит config_name. Уже слитые узлы при старте нового образа разводятся по слоям, эмбеддинги копируются, полная платная переиндексация не нужна.
Если после пересоздания mcp-app граф в Neo4j уже есть, а опубликованного поколения нет, register_graph_project на тот же project_id делает проект доступным для чтения (ready) без выдуманного поколения. Инструменты отвечают из этих данных.
Каталог расширений — отдельное монтирование
В workspace 1C:EDT база и её расширения лежат соседними проектами, то есть каталог расширений — это родитель каталога базы:
Двумя разными путями одно монтирование не выражается, поэтому каталогу расширений нужен свой том:
не указывайте
CODE_EXPORT_PATHна родителя — база вместе со всеми расширениями прочитается как одна конфигурация;не занимайте под расширения каталог отчёта
/app/metadata— это чужой том; расширения монтируются отдельно.
Монтируется каталог на чтение: прогон читает выгрузки и пишет в Neo4j, а синтезированный отчёт каждого слоя публикуется в GENERATED_REPORT_DIRECTORY, а не обратно в выгрузку. Смонтированный каталог сам по себе ничего не меняет: читается он только при EXTENSION_CATALOG_ENABLED=true.
Профиль инструментов и scope
MCP_TOOL_PROFILE
Какой набор инструментов публикуется: admin (всё) или read-only (без управления проектами)
admin
MCP_NAMESPACE
Namespace установки, в котором регистрируются графовые проекты
default
ADMIN_TOKEN
Токен для административных HTTP-эндпоинтов веб-интерфейса
—
GRAPH_SCOPE_ENFORCED
Записан ли scope в самой базе. Включать только на базе, пересобранной по новой схеме идентификаторов: данные, загруженные раньше, свойств scope не содержат. Вместе с миграционным окном задаёт строгость project_id — см. врезку ниже
false
GRAPH_SCOPE_MIGRATION_WINDOW
Окно миграции: вызов без project_id обслуживается единственным зарегистрированным проектом namespace, ответ помечается deprecated
false
GRAPH_ONLY
Режим только чтения графа — без загрузки и обогащения данных
false
Лимиты ответов графовых инструментов
GRAPH_MAX_ITEMS
Жёсткий предел элементов в ответе (max_items не может его превысить)
200
GRAPH_MAX_NODES
Предел узлов в компактном графовом ответе
500
GRAPH_MAX_EDGES
Предел связей в компактном графовом ответе
1000
GRAPH_MAX_CHARS
Предел размера ответа в символах
60000
GRAPH_TOOL_TIMEOUT_SECONDS
Таймаут выполнения инструмента
300
GRAPH_ENTITY_GROUP_LIMIT
Предел размера группы связей в explain_graph_entity
25
GRAPH_ENTITY_MAX_CANDIDATES
Предел кандидатов при резолве сущности
20
GRAPH_PATH_MAX_DEPTH
Максимальная глубина поиска путей (find_graph_path)
6
GRAPH_PATH_MAX_PATHS
Количество возвращаемых кратчайших путей
3
GRAPH_PATH_FANOUT_LIMIT
Предел ветвления на шаг при поиске путей
200
GRAPH_PATH_MAX_FRONTIER
Предел фронта обхода при поиске путей
2000
GRAPH_IMPACT_MAX_DEPTH
Максимальная глубина affected_subgraph / trace_impact
4
GRAPH_IMPACT_MAX_PATHS
Предел путей-обоснований в анализе влияния
500
GRAPH_IMPACT_FANOUT_LIMIT
Предел ветвления на шаг в анализе влияния
200
GRAPH_COMPARISON_MAX_ENTITIES
Предел сущностей при сравнении scope (compare_graph_scope)
10000
GRAPH_SYNOPSIS_MAX_ITEMS
Предел элементов в кратком обзоре ответа
5
Тонкая настройка поиска и ранжирования
Значения подобраны под типовые конфигурации; менять их стоит только по результатам замеров.
VECTOR_RETRIEVAL_STRATEGY
Как фильтруется векторная выборка: auto — предфильтрация внутри индекса, если сервер и индекс это поддерживают (Neo4j 2026.01+), иначе ограниченный overfetch; native_prefilter — требовать предфильтрацию (при невозможности запрос обслуживается overfetch, а понижение пишется в журнал); bounded_overfetch — прежнее поведение (откат)
auto
VECTOR_OVERFETCH_MULTIPLIER
Множитель выборки векторного маршрута
4
VECTOR_OVERFETCH_HARD_CAP
Жёсткий предел векторной выборки
1000
UNFILTERED_OVERSAMPLING_MULTIPLIER
Множитель выборки без фильтра
3
FILTERED_OVERSAMPLING_MULTIPLIER
Множитель выборки при заданном фильтре
10
FILTERED_OVERSAMPLING_RETRY_MULTIPLIER
Во сколько раз расширяется выборка на повторе, если фильтр отсёк слишком много
3
FILTERED_OVERSAMPLING_MAX_RETRIES
Максимум таких повторов
3
MAX_CANDIDATE_POOL
Предел общего пула кандидатов до ранжирования
200
RRF_K
Константа reciprocal rank fusion
60
CODE_SEARCH_RRF_W_VEC / CODE_SEARCH_RRF_W_FT
Веса векторной и полнотекстовой дорожек при поиске по коду
0.6 / 0.4
BUSINESS_SEARCH_RRF_W_VEC / BUSINESS_SEARCH_RRF_W_FT
То же для поиска по бизнес-описаниям
0.6 / 0.4
ATTRIBUTE_SEARCH_RRF_WEIGHT
Вес маршрута поиска по реквизитам
0.3
ENABLE_ATTRIBUTE_SEARCH
Искать по реквизитам объектов
true
CODE_SEARCH_MAX_PER_MODULE
Максимум результатов из одного модуля
1
CODE_SEARCH_DEDUP_OVERFETCH
Запас выборки на дедупликацию по модулям
10
CHANNEL_ADMISSION_MIN_SCORE
Минимальная средняя оценка в топ-K, при которой маршрут допускается в общий пул. 0.0 отключает отсечение
0.1
CHANNEL_ADMISSION_TOP_K_CHECK
Сколько верхних результатов маршрута усредняется для этой проверки
3
SEMANTIC_GATING_MIN_SCORE_VECTOR
Порог семантического маршрута до реранка
0.3
SEMANTIC_GATING_MIN_SCORE_RERANKED
Порог после реранка
0.5
SEMANTIC_FALLBACK_MIN_RESULTS
Сколько результатов должно остаться, чтобы не включать резервный маршрут
3
SEMANTIC_MERGE_W_DESCRIPTION / SEMANTIC_MERGE_W_BUSINESS / SEMANTIC_MERGE_W_TRANSLITERATED
Веса описательного, бизнес- и транслитерированного представлений при слиянии
1.0 / 1.0 / 0.7
MIXED_MERGE_W_SEMANTIC / MIXED_MERGE_W_LEXICAL / MIXED_MERGE_W_STRUCTURAL
Веса семантического, лексического и структурного маршрутов
1.0 / 0.4 / 1.0
DESCRIPTION_FT_BOOST_NAME / _SYNONYM / _COMMENT / _DESCRIPTION / _HELP
Веса полей в полнотекстовом маршруте
4.0 / 3.0 / 1.5 / 1.0 / 1.0
CHUNK_EXCERPTS_PER_OBJECT
Сколько фрагментов одного объекта попадает в ответ
3
CHUNK_OBJECT_DUAL_HIT_BOOST
Прибавка к оценке, если объект найден и на уровне объекта, и на уровне фрагментов. 0.0 отключает
0.05
CHUNK_EVIDENCE_WEIGHT
Прибавка за каждый дополнительный совпавший фрагмент объекта
0.02
MMR_LAMBDA
Баланс релевантности и разнообразия (1.0 — только релевантность)
0.7
MMR_USE_EMBEDDINGS
Считать разнообразие по эмбеддингам
true
POST_MERGE_RERANK_TOP_N
Сколько верхних результатов уходит в реранк после слияния
20
RERANK_MAX_CANDIDATES
Максимум кандидатов в одном вызове реранкера; хвост сохраняет исходный порядок
200
PROJECT_AFFINITY_BOOST
Прибавка результатам «своего» проекта
0.0
ENABLE_GRAPH_EXPANSION
Расширять выдачу соседями по графу
true
GRAPH_EXPANSION_TOP_N
Сколько результатов расширяется соседями
3
GRAPH_EXPANSION_DECAY
Затухание оценки на шаг расширения
0.5
Ответы с участием LLM (answer_metadata_question)
QA_MAX_OBJECTS
Сколько объектов попадает в контекст ответа
5
QA_MAX_TOKENS
Предел токенов ответа
4000
QA_TEMPERATURE
Температура модели
0.3
QA_INCLUDE_CODE
Включать код в контекст
true
SUMMARIZE
Суммаризировать результаты поиска через LLM
false
Плагины
GRAPH_PLUGINS_ENABLED
Загружать Python-плагины из каталога плагинов
true
GRAPH_PLUGINS_DIRECTORY
Каталог плагинов; относительный путь считается от рабочего каталога /app
plugins
GRAPH_PLUGIN_STRICT_BUILD
Останавливать построение нового поколения при ошибке derived-state hook вместо пропуска проблемной единицы
false
GRAPH_PLUGIN_HOOK_TIMEOUT_SECONDS
Бюджет времени одного hook; 0 отключает контроль
5.0
Для контейнера обычно монтируют каталог хоста в /app/plugins. list_plugins доступен для диагностики в обоих профилях, а изменяющий состояние reload_plugins(operation_id) — только в профиле admin. После перезагрузки call-scoped hooks действуют со следующего вызова, а derived-state hooks — со следующего построения индекса.
Плагин — один Python-файл в каталоге плагинов. Объявлены восемь hooks: on_startup, on_request, on_result, on_search_candidates (в рамках вызова) и on_source_unit, on_metadata_object, on_routine, on_embedding_document (формируют граф, полнотекстовый и векторный маршруты) — плюс три таблицы: ALIASES, TOOL_PRESETS и CYPHER_TEMPLATES (дополнительные read-only Cypher-шаблоны для run_graph_cypher_template). Полный контракт лежит в образе: /app/plugin_api.py, /app/plugins/AGENTS.md, /app/plugins/example.py.
Без GRAPH_PLUGINS_ENABLED=true каталог не читается вообще, а reload_plugins отвечает, что подсистема отключена.
Правка любого derived-state hook делает сохранённое состояние проекта устаревшим и вызывает пересборку; call-scoped hooks и таблицы обходятся перезагрузкой. Подробно: Доработка MCP: система плагинов и справочник хуков Graph Metadata Search.
Поколения графа и загрузка данных
INGESTION_COORDINATOR_ENABLED
Координатор загрузки с фазами, лизом и чекпоинтами
false
INGESTION_LEASE_TTL_SECONDS
Время жизни лиза загрузчика. Живой писатель продлевает лиз heartbeat'ом каждые TTL/3, штатная остановка (SIGTERM) освобождает лиз сразу, поэтому срок платит только аварийное завершение: при большом TTL контейнер, убитый по OOM, видел после перезапуска живой лиз мёртвого писателя и помечал задачи индексации как skipped
120
INGESTION_CHECKPOINT_BATCH_SIZE
Размер пакета между чекпоинтами
500
INGESTION_CHECKPOINT_INTERVAL_SECONDS
Интервал записи чекпоинтов
30
EMBEDDING_CARRY_BATCH_MODULES
Сколько изменённых модулей одновременно проходят цикл «снять эмбеддинги процедур → удалить → загрузить → восстановить» при инкрементальном обновлении. Это не чекпоинт: на время пачки вектор каждой снятой процедуры держится в памяти, поэтому значение намеренно меньше размера чекпоинта — иначе релиз, затронувший тысячи модулей, приводит к OOM
100
INGESTION_TRACKER_BACKEND
Где хранится состояние загрузки: json (без БД) или neo4j
json
INGESTION_STATE_DIRECTORY
Каталог для состояния при бэкенде json
—
GRAPH_STAGING_VALIDATION_ENABLED
Проверять инварианты staging-поколения перед promote
false
GRAPH_STAGING_VALIDATION_MODE
Что делает нарушение: blocking (отказ в promote) или report (promote с отчётом)
blocking
GRAPH_STAGING_VALIDATION_SAMPLE_LIMIT
Количество примеров нарушений в отчёте
5
GRAPH_STAGING_COVERAGE_EXPECTATIONS
Ожидания по покрытию для валидации staging
—
GRAPH_DELETE_VISIBILITY_ENABLED
Контроль видимости удалённых сущностей между поколениями
true
GRAPH_DELETE_VISIBILITY_MODE
Режим контроля видимости удалений
blocking
GRAPH_GENERATION_FENCE_ENABLED
Фенс поколений — защита от чтения из устаревшего поколения
true
GRAPH_GENERATION_FENCE_ATTEMPTS
Количество повторов при срабатывании фенса
4
REFERENCE_EVIDENCE_ENABLED
Сохранять evidence для explain_graph_evidence / explain_path
false
REFERENCE_EVIDENCE_RETENTION_DAYS
Срок хранения evidence в днях
90
REFERENCE_EVIDENCE_RETENTION_GENERATIONS
Сколько поколений evidence хранить
3
SOURCE_UNIT_MANIFEST_ENABLED
Манифест единиц исходников для инкрементальной пересборки
false
SOURCE_UNIT_MANIFEST_DIRECTORY
Каталог хранения манифеста
—
SOURCE_UNIT_IGNORE_PATTERNS
Шаблоны исключения файлов из манифеста
—
SOURCE_UNIT_SCAN_PREFIX_BYTES
Сколько байт файла читается при сканировании
4096
SOURCE_FORMAT_ADAPTERS_ENABLED
Адаптеры форматов выгрузки (Конфигуратор / EDT)
false
SOURCE_FORMAT
Явное указание формата выгрузки
(авто)
Дополнительные
MCP_HOST
Хост MCP-сервера
0.0.0.0
MCP_PORT
Порт MCP
8006
MCP_PATH
URL-путь для MCP эндпоинта
/mcp
MCP_USE_SSE
SSE транспорт (для legacy клиентов)
false
NEO4J_DATABASE
Имя базы Neo4j
neo4j
NEO4J_PARALLEL_WRITE_WORKERS
Количество параллельных воркеров записи в Neo4j. Допустимый диапазон 1..16, значение вне диапазона отклоняется при старте. Значения выше 1 приводили к взаимным блокировкам BSL-писателей на NODE_RELATIONSHIP_GROUP_DELETE при первой индексации — повышайте только по результатам замеров на своих данных
1
NEO4J_WRITE_BATCH_SIZE
Размер пакета записи в Neo4j
1000
NEO4J_WRITE_RETRIES
Количество повторов при ошибке записи
5
NEO4J_WRITE_RETRY_DELAY_S
Пауза перед первым повтором; далее удваивается
1.0
NEO4J_WRITE_RETRY_MAX_DELAY_S
Предел паузы между повторами
30.0
NEO4J_EXPECTED_PAGECACHE_MB
Ожидаемый размер page cache сервера Neo4j (МиБ). При старте сравнивается с фактическим и при меньшем значении пишется предупреждение. Никогда не применяется принудительно: если настройку не удалось прочитать, проверка молча считается успешной
—
PROJECT_NAME
Название проекта (для логов, интерфейса и мультипроектности)
1C Metadata Project
DEBUG
Режим отладки — дополнительные логи
false
Переменные Neo4j
NEO4J_AUTH
Логин/пароль
neo4j/password123
NEO4J_server_memory_heap_max__size
Макс. память
1g
Монтируемые тома
MCP сервер
E:/1C_Export/Report
/app/metadata
Отчёт по метаданным
E:/1C_Export/Files
/app/metadata_files
Файлы кода (BSL, XML, справка)
Neo4j
E:/bases/mcp_graph/neo4j
/data
Данные Neo4j
Полный docker-compose.yml
Пример: загрузка расширения
Для загрузки расширения запустите отдельный экземпляр сервера с указанием EXTENSION_NAME и EXTENSION_BASE_PROJECT:
После загрузки расширения через основной MCP-сервер станут доступны инструменты compare_base_and_extension и шаблонные операции для работы с расширениями.
Пример: массовая загрузка всех расширений
Если конфигурация выгружена вместе с расширениями (/DumpConfigToFiles … -AllExtensions), все они загружаются одним прогоном:
При EXTENSION_CATALOG_SYNC=true повторный прогон приводит граф в соответствие с каталогом: патч, вошедший в релиз конфигурации и исчезнувший из выгрузки, исчезает и из графа — вместо того чтобы отвечать за информационную базу, в которой его больше нет.
Что повторный прогон не делает — это перечитывает слой, который в графе уже есть: он возвращает его как untouched, потому что ему неоткуда узнать, какие выгрузки изменились. Перевыгрузили расширение — вызовите refresh_extension_layers для этого слоя (или без списка слоёв, для всех). Перезапуск контейнера этого не делает и делать не должен: иначе каждый старт перечитывал бы двести патчей.
Конфигурация Cursor
Last updated