> For the complete documentation index, see [llms.txt](https://docs.onerpa.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.onerpa.ru/mcp-servery-1c/servery/graph-metadata-search.md).

# 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/search`
* **OpenAPI документация**: `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`         | Резолв квалифицированного имени (например, `Справочник.Контрагенты.Реквизит.ИНН`)                    |
| `get_indexing_status`            | Статус фоновой индексации и последняя ошибка, если она была                                          |
| `compare_base_and_extension`     | Сравнение объекта базовой конфигурации и расширения                                                  |

### search\_metadata

Структурный поиск объектов метаданных 1С по точным или частичным именам, категориям, связям и свойствам. Использует Cypher-запросы к графовой базе Neo4j.

Поддерживает два формата запросов:

1. **JSON-шаблон** (предпочтительный — мгновенный, детерминированный, без LLM): `{"operation": "list_attributes", "object_name": "Контрагенты"}`
2. **Структурный текст** — 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")` — синтаксис Lucene
* `search_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-зависимости на глубину 3
* `trace_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 | —            | Точечное квалифицированное имя (например, `Справочник.Контрагенты.Реквизит.ИНН`) |

**Возврат**: Информация о резолвленном узле.

### get\_indexing\_status

Возвращает состояние фоновой индексации и обогащения данных. Используйте после запуска сервера и после изменения выгрузки, чтобы проверить, завершились ли этапы загрузки метаданных, BSL-кода, форм, прав и embedding-индексов.

Параметры отсутствуют.

**Возврат**: Строка со статусом индексации, прогрессом этапов и диагностикой последней ошибки, если она возникла.

### 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-запроса

```json
{"operation": "list_attributes", "object_name": "Контрагенты"}
```

```json
{"operation": "trace_impact", "object_name": "Контрагенты", "depth": 2}
```

```json
{"operation": "list_form_controls", "object_name": "Контрагенты", "form_name": "ФормаЭлемента"}
```

## Веб-интерфейсы

### Neo4j Browser

```
http://localhost:7474
```

Логин: `neo4j` Пароль: указанный в `NEO4J_PASSWORD` (по умолчанию `password123`)

В Neo4j Browser можно:

* Визуализировать граф метаданных
* Выполнять Cypher-запросы
* Исследовать связи между объектами

### Интерфейс поиска

```
http://localhost:8006/search
```

Простой веб-интерфейс для поиска по метаданным без использования Cursor.

### OpenAPI документация

```
http://localhost:8006/docs
```

Автогенерируемая документация 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

```
comol/1c_graph_metadata:latest
```

## Архитектура

```
┌──────────────────┐     ┌──────────────────┐
│   MCP Server     │────▶│     Neo4j        │
│   (порт 8006)    │     │  (порт 7687)     │
│                  │     │                  │
│ Template Engine  │     │  Граф метаданных │
│ BSL Parser       │     │  BSL-граф        │
│ Form XML Parser  │     │  Векторные       │
│ Vector Indexer   │     │  индексы         │
└──────────────────┘     └──────────────────┘
         │                        │
         ▼                        ▼
   Cursor IDE              Neo4j Browser
                          (порт 7474)
```

## Быстрый старт

Используйте docker-compose для запуска обоих сервисов.

Подробнее: [Установка](/mcp-servery-1c/servery/graph-metadata-search/ustanovka.md)

## Конфигурация Cursor

```json
{
  "mcpServers": {
    "1c-graph-metadata-mcp": {
      "url": "http://localhost:8006/mcp",
      "connection_id": "1c_graph_service_001"
    }
  }
}
```

## Структура раздела

* [Установка](/mcp-servery-1c/servery/graph-metadata-search/ustanovka.md) — docker-compose
* [Подготовка данных](/mcp-servery-1c/servery/graph-metadata-search/podgotovka-dannyh.md) — выгрузка из Конфигуратора
* [Конфигурация](/mcp-servery-1c/servery/graph-metadata-search/konfiguraciya.md) — все параметры
