Graph Metadata Search
Графовый поиск по метаданным конфигурации 1С через Neo4j.
Назначение
Graph Metadata Search строит граф связей метаданных вашей конфигурации 1С. ИИ начинает понимать, как объекты связаны между собой, а не просто видит их названия. Сервер поддерживает анализ BSL-кода, структуры форм, расширений, подписок на события, прав ролей и предопределённых элементов.
Возможности
ИИ получает инструменты для:
Анализа связей документов, регистров, справочников
Нахождения зависимостей и анализа влияния изменений (
trace_impact)Навигации по графу вызовов BSL-процедур (
trace_call_chain)Получения полного досье объекта за один вызов (
get_object_dossier)Поиска по описаниям, синонимам и справке объектов (
search_metadata_by_description)Семантического и полнотекстового поиска по BSL-коду на уровне процедур
Сравнения базовой конфигурации и расширения (
compare_base_and_extension)Работы со структурой управляемых форм (элементы, события, привязки)
Шаблонных запросов без LLM — мгновенные детерминированные ответы
Примеры использования
"Какие регистры использует документ Реализация?"
"Покажи все объекты, связанные со справочником Контрагенты"
"Какая структура модуля документа Заказ?"
"Какие формы есть у справочника Номенклатура?"
"Покажи полное досье справочника Контрагенты"
"Кто вызывает процедуру ПроверитьЗаполнение?"
"Какое влияние окажет изменение справочника Номенклатура?"
"Что изменило расширение МоёРасширение в справочнике Контрагенты?"
"Найди все неиспользуемые процедуры в документе Реализация"
"Какие роли имеют доступ к справочнику Контрагенты?"
Особенности
Использует Neo4j для хранения графа
Понимает связи между объектами (USED_IN, DO_MOVEMENTS_IN, CALLS, EXTENDS, OVERRIDES)
Особенно полезен для больших/чужих конфигураций
Требует docker-compose для запуска
Поддерживает шаблонный режим — работа без LLM через JSON-запросы
Поддерживает расширения конфигурации и сравнение с базой
Фоновая индексация — сервер доступен сразу, обогащение данных выполняется в фоне
Веб-интерфейс Neo4j Browser для визуализации графа:
http://localhost:7474Веб-интерфейс поиска:
http://localhost:8006/searchOpenAPI документация:
http://localhost:8006/docs
Доступные инструменты MCP
ИИ получает следующие инструменты:
search_metadata
Структурный поиск объектов метаданных через Cypher или JSON-шаблоны
search_metadata_by_description
Поиск объектов метаданных по описанию, синониму, справке (полнотекстовый + семантический)
get_metadata_prompt
Получение схемы БД Neo4j, примеров Cypher и списка шаблонных операций
execute_metadata_cypher
Прямое выполнение Cypher-запросов к Neo4j
find_objects_using_object
Объекты, использующие данный как тип (через USED_IN)
find_usages_of_object
Конкретные реквизиты/измерения/ресурсы, ссылающиеся на объект
find_register_movement_docs
Документы, делающие движения в указанный регистр
search_code
Поиск по BSL-коду процедур/функций (полнотекстовый, семантический, гибридный) с уровнями детализации
business_search
Семантический поиск по бизнес-описаниям с обогащением граф-контекстом
answer_metadata_question
RAG-ответы на аналитические вопросы о метаданных (требует LLM)
get_object_dossier
Полное досье объекта: структура, формы, подписки, роли, зависимости, код
trace_impact
Анализ влияния — рекурсивный обход зависимостей объекта
trace_call_chain
Анализ цепочки вызовов BSL-процедур в обоих направлениях
find_by_guid
Поиск узла метаданных по GUID-идентификатору
resolve_qualified_name
Резолв квалифицированного имени (например, Справочник.Контрагенты.Реквизит.ИНН)
compare_base_and_extension
Сравнение объекта базовой конфигурации и расширения
search_metadata
Структурный поиск объектов метаданных 1С по точным или частичным именам, категориям, связям и свойствам. Использует Cypher-запросы к графовой базе Neo4j.
Поддерживает два формата запросов:
JSON-шаблон (предпочтительный — мгновенный, детерминированный, без LLM):
{"operation": "list_attributes", "object_name": "Контрагенты"}Структурный текст — LLM генерирует Cypher-запрос (требует OpenAI API).
query
string
—
JSON-шаблон или структурный запрос на естественном языке
project_name
string
—
Фильтр по имени конфигурации. Нужен только при нескольких конфигурациях в одной базе
Возврат: Результаты Cypher-запроса или шаблонной операции в текстовом формате.
Этот инструмент предназначен для СТРУКТУРНЫХ запросов — когда известны имена объектов, категории или типы связей. Для поиска по смыслу используйте
business_searchилиsearch_metadata_by_description.
search_metadata_by_description
Поиск объектов метаданных 1С по описательным полям: имя, Синоним, Комментарий, Описание, справка (help_text). Поддерживает полнотекстовый и гибридный (fulltext + vector) режимы.
query
string
—
Описание искомых объектов на естественном языке. Поддерживается синтаксис Lucene: AND, OR, "точная фраза", подстановка*
top_k
int
10
Максимальное количество результатов
filter_type
string
—
Фильтр по категории метаданных (например, Справочники, Документы)
project_name
string
—
Фильтр по имени конфигурации. Нужен только при нескольких конфигурациях в одной базе
use_fuzzy
bool
false
Нечёткий поиск — полезен при возможных опечатках или неточном написании
alpha
float
0.5
Баланс fulltext / vector при гибридном режиме (1.0 = только fulltext, 0.0 = только vector)
Возврат: Ранжированные результаты с именем, категорией, score и отрывком из описания.
При
ENABLE_METADATA_DESCRIPTION_EMBEDDING=trueавтоматически включается гибридный режим (fulltext + vector) для более точного ранжирования.
get_metadata_prompt
Возвращает описание схемы базы данных Neo4j и примеры Cypher-запросов. При включённом шаблонном режиме (TEMPLATE_MODE_ENABLED=true) также возвращает список всех доступных шаблонных операций с параметрами и примерами JSON.
Параметры отсутствуют.
Возврат: Строка со схемой БД, примерами запросов и (опционально) описанием шаблонных операций.
execute_metadata_cypher
Прямое выполнение Cypher-запроса к базе метаданных Neo4j. Используйте схему из get_metadata_prompt для построения запросов.
query
string
—
Cypher-запрос для выполнения
Возврат: Результаты запроса в JSON-формате.
find_objects_using_object
Поиск всех объектов метаданных, в которых указанный объект используется как ссылочный тип (через связь USED_IN). Отвечает на вопрос «Где используется справочник Контрагенты?».
object_name
string
—
Имя объекта без префикса категории (Контрагенты, а не Справочник.Контрагенты)
project_name
string
—
Фильтр по имени конфигурации
Возврат: Список объектов, ссылающихся на указанный.
find_usages_of_object
Поиск конкретных реквизитов, измерений и ресурсов, в которых указанный объект используется как тип. Более детальная версия find_objects_using_object — показывает каждый отдельный реквизит с владельцем и типом.
object_name
string
—
Имя объекта без префикса категории
project_name
string
—
Фильтр по имени конфигурации
Возврат: Список реквизитов/измерений/ресурсов с указанием объекта-владельца и типа.
find_register_movement_docs
Поиск всех документов, делающих движения (проводки) в указанный регистр. Отвечает на вопрос «Какие документы делают движения по регистру Продажи?».
register_name
string
—
Имя регистра без префикса категории (Продажи, а не РегистрНакопления.Продажи)
project_name
string
—
Фильтр по имени конфигурации
Возврат: Список документов с указанием категории.
search_code
Поиск по BSL-коду процедур и функций. Работает на уровне отдельных Routine-нод (при загруженном BSL-графе) или на уровне MetadataObject.program_code (fallback). В гибридном режиме используется Reciprocal Rank Fusion (RRF, k=60) для объединения результатов.
query
string
—
Имя функции, ключевое слово или описание на естественном языке
search_type
string
hybrid
Тип поиска: fulltext, semantic, hybrid
top_k
int
3
Максимальное количество результатов на каждый тип поиска
filter_type
string
—
Фильтр по категории метаданных
project_name
string
—
Фильтр по имени конфигурации. Нужен только при нескольких конфигурациях в одной базе
detail_level
string
L1
Уровень детализации результатов: L0, L1, L2, L3
Уровни детализации:
L0
Полный код процедуры без обрезки
L1
Сигнатура + описание + первые 5 вызовов (по умолчанию)
L2
Краткая карточка: имя, владелец, тип модуля, export-флаг, директива
L3
Только имя и score (минимальный расход токенов)
Примеры:
search_code("ПроверитьЗаполнение")— поиск по имени функцииsearch_code("расчет скидки", search_type="semantic")— поиск по назначениюsearch_code("Процедура AND Скидк*", search_type="fulltext")— синтаксис Lucenesearch_code("расчет", detail_level="L3", top_k=20)— максимум результатов, минимум токенов
business_search
Семантический поиск объектов метаданных по описанию бизнес-функциональности. Результаты автоматически обогащаются граф-контекстом: реквизиты, табличные части, формы, связи.
query
string
—
Описание искомой функциональности на естественном языке
top_k
int
10
Максимальное количество результатов
filter_type
string
—
Фильтр по категории метаданных
include_structure
bool
true
Обогащать результаты граф-контекстом (реквизиты, ТЧ, формы, USED_IN)
project_name
string
—
Фильтр по имени конфигурации. Нужен только при нескольких конфигурациях в одной базе
Возврат: Ранжированные результаты с оценками релевантности, бизнес-контекстом и структурой объекта.
Требует включения
ENABLE_BUSINESS_SEARCHв конфигурации. Приinclude_structure=falseвозвращается плоский результат без граф-контекста. При недоступности векторного индекса автоматически переключается на полнотекстовый поиск.
answer_metadata_question
Ответы на сложные аналитические вопросы о метаданных 1С с использованием RAG (Retrieval-Augmented Generation). Собирает контекст из графа Neo4j и кода, затем генерирует ответ через LLM.
Используйте этот инструмент, когда вопрос требует РАССУЖДЕНИЯ или АНАЛИЗА нескольких объектов, а не простого поиска. Для простых запросов используйте специализированные инструменты: get_object_dossier, search_metadata, business_search, search_code, trace_impact.
question
string
—
Аналитический вопрос о метаданных на русском языке. Чем конкретнее — тем лучше
max_tokens
int
4000
Максимальное количество токенов для ответа LLM
include_code
bool
true
Включать фрагменты кода в контекст
project_name
string
—
Фильтр по имени конфигурации
Возврат: Структурированный ответ с источниками, количеством использованных токенов и оценкой уверенности.
Примеры:
answer_metadata_question(question="Как реализован механизм скидок?")answer_metadata_question(question="Какие объекты участвуют в процессе закупки и как они связаны?")
Требует настроенного LLM (
OPENAI_API_KEY).
get_object_dossier
Полное досье объекта метаданных — структурированный паспорт со всеми фактическими данными из графа за один вызов, без LLM.
object_name
string
—
Имя объекта метаданных
sections
list
все
Список секций: structure, forms, subscriptions, roles, dependencies, code, business_info
Секции досье:
structure
Реквизиты, табличные части, измерения, ресурсы, команды, макеты
forms
Список форм с указанием форм по умолчанию
subscriptions
Подписки на события, источником которых является объект
roles
Роли с правами доступа к объекту
dependencies
Зависимости USED_IN (upstream/downstream) и движения регистров
code
Перечень модулей и процедур (имена и сигнатуры, без тел)
business_info
AI-описание бизнес-функциональности (если доступно)
Возврат: Структурированный текст с заголовками секций и фактами из графа.
trace_impact
Анализ влияния — рекурсивный обход зависимостей объекта по связям USED_IN, DO_MOVEMENTS_IN и CALLS.
object_name
string
—
Имя объекта метаданных
depth
int
3
Глубина обхода (максимум 5)
direction
string
downstream
Направление: downstream (кто зависит), upstream (от чего зависит), both
relationship_types
list
все
Фильтр типов связей: USED_IN, DO_MOVEMENTS_IN, CALLS
project_name
string
—
Фильтр по имени конфигурации. Нужен только при нескольких конфигурациях в одной базе
Возврат: Список зависимых объектов с указанием глубины, типа связи, категории и промежуточного объекта. Результат усекается до 500 записей.
Примеры:
trace_impact(object_name="Контрагенты")— все downstream-зависимости на глубину 3trace_impact(object_name="Продажи", direction="upstream")— от чего зависит регистрtrace_impact(object_name="Контрагенты", relationship_types=["USED_IN"])— только ссылочные зависимости
trace_call_chain
Анализ цепочки вызовов BSL-процедур — рекурсивный обход графа вызовов в обоих направлениях.
routine_name
string
—
Имя процедуры/функции
object_name
string
—
Имя объекта-владельца (для устранения неоднозначности)
direction
string
callees
Направление: callees (кого вызывает), callers (кто вызывает)
depth
int
3
Глубина обхода (максимум 10)
Возврат: Дерево вызовов с обогащёнными данными: имя процедуры, объект-владелец, тип модуля, директива, сигнатура, export-флаг, глубина. Результат усекается до 200 записей.
Требует загруженного BSL-графа (
LOAD_BSL_SIGNATURES=trueиCODE_EXPORT_PATH).
find_by_guid
Поиск любого узла метаданных по его GUID-идентификатору. Возвращает тип узла, имя и свойства.
guid
string
—
GUID для поиска (например, 8f1c2d34-5678-4abc-9def-0123456789ab)
Возврат: Информация о найденном узле или сообщение об ошибке.
resolve_qualified_name
Резолв полного квалифицированного имени 1С-метаданных в соответствующий узел графа. Поддерживает паттерны: Справочник.Контрагенты, Справочник.Контрагенты.Реквизит.ОсновнойМенеджер, Документ.РеализацияТоваровУслуг.ТабличнаяЧасть.Товары.
qualified_name
string
—
Точечное квалифицированное имя (например, Справочник.Контрагенты.Реквизит.ИНН)
Возврат: Информация о резолвленном узле.
compare_base_and_extension
Структурное сравнение объекта базовой конфигурации и его расширения: что добавлено, что переопределено, что осталось из базы.
object_name
string
Имя объекта метаданных
extension_name
string
Имя расширения
Возврат: Детальное сравнение по секциям — реквизиты, формы, процедуры — с указанием статуса каждого элемента (из базы / переопределён / добавлен расширением).
Требует предварительной загрузки и базовой конфигурации, и расширения (через
EXTENSION_NAMEиEXTENSION_BASE_PROJECT).
Шаблонные операции (Template Mode)
При включённом шаблонном режиме (TEMPLATE_MODE_ENABLED=true) инструмент search_metadata принимает JSON-запросы вида {"operation": "...", ...} и возвращает мгновенные детерминированные ответы без LLM.
Режимы работы
Template Only
TEMPLATE_MODE_ENABLED=true, TEMPLATE_MODE_ONLY=true
Только JSON-запросы, LLM не используется
Combined
TEMPLATE_MODE_ENABLED=true, TEMPLATE_MODE_ONLY=false
JSON → шаблон, текст → LLM, fallback LLM при пустом результате
LLM Only
TEMPLATE_MODE_ENABLED=false
Только LLM (поведение по умолчанию)
Доступные операции
Структура объектов
list_attributes
object_name
Реквизиты объекта с типами
list_tabular_parts
object_name
Табличные части с их реквизитами
object_structure
object_name
Полная структура: реквизиты, ТЧ, формы, измерения, ресурсы, значения перечислений
list_forms
object_name
Формы объекта
list_enum_values
object_name
Значения перечисления
list_resources
object_name
Ресурсы регистра
list_dimensions
object_name
Измерения регистра
list_commands
object_name
Команды объекта
list_layouts
object_name
Макеты объекта
Навигация
list_objects_by_category
category_name
Все объекты указанной категории
list_objects_by_name
name_pattern
Поиск объектов по подстроке имени
find_by_guid
guid
Поиск узла по GUID
resolve_qn
qualified_name
Резолв квалифицированного имени (например, Справочник.Контрагенты.Реквизит.ИНН)
Типы данных
get_attribute_type
object_name, attribute_name
Тип указанного реквизита
list_attributes_with_type
type_pattern
Все реквизиты с указанным типом
Связи и зависимости
find_objects_using_object
object_name
Объекты, использующие данный как тип
find_usages_of_object
object_name
Конкретные реквизиты/ресурсы/измерения, ссылающиеся на объект
find_documents_making_movements_into_register
register_name
Документы, делающие движения в регистр
trace_impact
object_name, depth, direction
Рекурсивный анализ зависимостей
trace_call_chain
routine_name, object_name, direction, depth
Цепочка вызовов BSL-процедур
HTTP-сервисы
list_http_services
—
Все HTTP-сервисы конфигурации
list_url_templates_of_service
service_name
Шаблоны URL указанного HTTP-сервиса
list_url_methods_of_template
service_name, template_name
Методы (GET, POST, ...) указанного шаблона
Подписки на события
list_event_subscriptions
—
Все подписки на события в конфигурации
list_event_subscriptions_of_object
object_name
Подписки, в которых объект является источником
Предопределённые элементы
list_predefined_of_object
object_name
Предопределённые элементы объекта с иерархией
find_predefined_by_flag
object_name, flag_name, flag_value
Поиск предопределённых по значению свойства
Права доступа
list_roles_with_access_to_target
target_name
Роли с доступом к объекту
list_access_targets_of_role
role_name
Объекты, к которым имеет доступ роль
get_access_of_role_to_target
role_name, target_name
Детальные права роли к объекту
Структура форм (XML)
list_form_controls
object_name, form_name
Элементы управления формы с иерархией
list_form_events
object_name, form_name
События формы и её элементов
list_form_commands
object_name, form_name
Команды формы
list_form_bindings
object_name, form_name
Привязки элементов к данным и командам
list_form_event_handlers
object_name, form_name
Пары (событие → обработчик Routine)
get_default_forms
object_name
Формы по умолчанию (элемента, списка, выбора)
BSL-код
get_routine_body
routine_name, owner_name
Полное тело процедуры с сигнатурой и описанием
list_callers_of_routine
routine_name, owner_name
Кто вызывает указанную процедуру
list_callees_of_routine
routine_name, owner_name
Кого вызывает указанная процедура
call_graph_subtree
routine_name, owner_name, depth, direction
Поддерево вызовов на указанную глубину
find_unused_routines
owner_name
Неиспользуемые процедуры объекта
list_exported_routines
owner_name
Экспортные методы объекта
Расширения
find_base_object
object_name, extension_name
Базовый объект, на который указывает EXTENDS
list_overrides_of_object
object_name, extension_name
Список переопределённых элементов (формы, модули, процедуры)
list_extension_objects
extension_name, extends_type
Все объекты расширения с типом (added/modified)
Досье
get_object_dossier
object_name, sections
Полное досье объекта (аналогично MCP-инструменту)
Пример JSON-запроса
Веб-интерфейсы
Neo4j Browser
Логин: neo4j Пароль: указанный в NEO4J_PASSWORD (по умолчанию password123)
В Neo4j Browser можно:
Визуализировать граф метаданных
Выполнять Cypher-запросы
Исследовать связи между объектами
Интерфейс поиска
Простой веб-интерфейс для поиска по метаданным без использования Cursor.
OpenAPI документация
Автогенерируемая документация FastAPI с описанием HTTP-эндпоинтов.
Требования
Docker Desktop с WSL2
Лицензионный ключ
Embedding модель (LM Studio или CPU)
Выгрузка конфигурации из Конфигуратора (отчёт + опционально файлы)
~2 ГБ RAM для Neo4j
Для расширенных функций:
XML-выгрузка конфигурации в файлы — для BSL-графа, форм, подписок, ролей, предопределённых
OpenAI-совместимый LLM — для режима Combined (LLM fallback) и генерации бизнес-описаний
Порт
8006 (MCP сервер) 7474 (Neo4j Browser) 7687 (Neo4j Bolt)
Образ Docker
Архитектура
Быстрый старт
Используйте docker-compose для запуска обоих сервисов.
Подробнее: Установка
Конфигурация Cursor
Структура раздела
Установка — docker-compose
Подготовка данных — выгрузка из Конфигуратора
Конфигурация — все параметры
Last updated