# CodeMetadataSearchServer

Поиск по метаданным, справке, коду, формам и зависимостям конфигурации 1С. Генерация и валидация XML.

## Назначение

CodeMetadataSearchServer — комплексный MCP-сервер для глубокой работы с конфигурацией 1С. Индексирует метаданные, код модулей, формы, HTML-справку и XML-определения. Предоставляет ИИ **15 инструментов** для:

* Семантического и структурного поиска по метаданным конфигурации
* Полнотекстового и векторного поиска по коду модулей
* Анализа структуры BSL-модулей, иерархии вызовов и зависимостей
* Поиска и анализа форм объектов конфигурации
* Поиска по HTML-справке конфигурации
* Генерации XSD-схем и валидации XML

## Доступные инструменты MCP (15)

Инструменты сгруппированы по функциональным областям.

### Метаданные

| Инструмент             | Описание                                                                |
| ---------------------- | ----------------------------------------------------------------------- |
| `metadatasearch`       | Поиск объектов конфигурации по имени или описанию                       |
| `get_metadata_details` | Детальная структура объекта: реквизиты, типы, табличные части, синонимы |

### Код

| Инструмент                  | Описание                                                             |
| --------------------------- | -------------------------------------------------------------------- |
| `codesearch`                | Поиск по коду модулей объектов, форм и общих модулей                 |
| `search_function`           | Поиск процедуры или функции BSL по имени                             |
| `get_module_structure`      | Полная структура BSL-модуля: процедуры, функции, области, статистика |
| `get_method_call_hierarchy` | Иерархия вызовов метода: кто вызывает и что вызывается               |
| `search_forms`              | Поиск форм объектов конфигурации                                     |
| `inspect_form_layout`       | Детальная структура формы: элементы, реквизиты, команды, обработчики |
| `graph_dependencies`        | Граф зависимостей объекта конфигурации                               |
| `bsl_scope_members`         | Доступные методы, свойства и события для BSL-контекста               |

### Справка

| Инструмент   | Описание                           |
| ------------ | ---------------------------------- |
| `helpsearch` | Поиск по HTML-справке конфигурации |

### XSD-схемы

| Инструмент       | Описание                                        |
| ---------------- | ----------------------------------------------- |
| `get_xsd_schema` | Получение XSD-схемы для типа объекта метаданных |
| `verify_xml`     | Валидация XML-содержимого по XSD-схеме          |

### Служебные (всегда доступны)

| Инструмент | Описание                                        |
| ---------- | ----------------------------------------------- |
| `reindex`  | Запуск переиндексации в фоновом режиме          |
| `stats`    | Статистика индексов, модель эмбеддингов, аптайм |

***

## Описание инструментов

### metadatasearch

Поиск объектов метаданных, реквизитов и типов в конфигурации 1С. Для поиска по имени используйте формат вида `Справочники.ИмяСправочника.Реквизиты`. Для поиска по описанию — текст на русском языке. Используйте точное имя конфигурации, если оно известно.

| Параметр      | Тип    | По умолчанию | Описание                                                                                                                                                                                                                          |
| ------------- | ------ | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `query`       | string | —            | Имя или описание объекта метаданных                                                                                                                                                                                               |
| `limit`       | int    | 5            | Количество результатов                                                                                                                                                                                                            |
| `object_type` | string | `""`         | Фильтр по типу метаданных 1С (`Справочник`, `Документ`, `РегистрСведений` и т.д.)                                                                                                                                                 |
| `names_only`  | bool   | `false`      | Компактный список имён объектов (full\_path, object\_type, synonym) вместо текстовых чанков. Используйте `names_only=true` для определения релевантных объектов конфигурации, затем получайте детали через `get_metadata_details` |

### get\_metadata\_details

Возвращает детальную структуру объекта метаданных: реквизиты с типами, табличные части, синонимы и свойства.

| Параметр      | Тип    | По умолчанию | Описание                                                                                                    |
| ------------- | ------ | ------------ | ----------------------------------------------------------------------------------------------------------- |
| `object_name` | string | —            | Имя или полный путь объекта (`Номенклатура`, `Справочники.Номенклатура`, `Документ.РеализацияТоваровУслуг`) |

### codesearch

Поиск по коду модулей объектов, форм и общих модулей. Принимает фрагменты кода, имена функций или комментарии.

| Параметр | Тип    | По умолчанию | Описание                                                 |
| -------- | ------ | ------------ | -------------------------------------------------------- |
| `query`  | string | —            | Код, имя функции, комментарий или описание искомого кода |
| `limit`  | int    | 5            | Количество результатов                                   |

### search\_function

Поиск процедуры или функции BSL по имени. Поддерживает точный поиск с автоматическим переключением на нечёткий, а также префиксный поиск.

| Параметр | Тип    | По умолчанию | Описание                                                                                             |
| -------- | ------ | ------------ | ---------------------------------------------------------------------------------------------------- |
| `name`   | string | —            | Имя процедуры/функции (`ОбработкаПроведения`, `ПриСозданииНаСервере`)                                |
| `exact`  | bool   | `true`       | Точное совпадение (с автоматическим fallback на нечёткий поиск). `false` — префиксный/нечёткий поиск |
| `limit`  | int    | 10           | Количество результатов                                                                               |

### get\_module\_structure

Возвращает полную структуру BSL-модуля: все процедуры, функции, области и статистику.

| Параметр      | Тип    | По умолчанию | Описание                                 |
| ------------- | ------ | ------------ | ---------------------------------------- |
| `module_path` | string | —            | Путь к BSL-модулю (полный или частичный) |

### get\_method\_call\_hierarchy

Возвращает иерархию вызовов для BSL-метода: кто вызывает этот метод (callers), что вызывает этот метод (callees), или оба направления.

| Параметр      | Тип    | По умолчанию | Описание                                     |
| ------------- | ------ | ------------ | -------------------------------------------- |
| `method_name` | string | —            | Имя процедуры/функции для трассировки        |
| `direction`   | string | `"both"`     | Направление: `callers`, `callees` или `both` |
| `depth`       | int    | 3            | Максимальная глубина обхода                  |

### search\_forms

Поиск форм объектов конфигурации (справочников, документов, регистров и т.д.) по имени объекта, имени формы или заголовку.

| Параметр | Тип    | По умолчанию | Описание                                                                             |
| -------- | ------ | ------------ | ------------------------------------------------------------------------------------ |
| `query`  | string | —            | Имя объекта, имя формы или заголовок (`Номенклатура`, `ФормаЭлемента`, `Реализация`) |
| `limit`  | int    | 10           | Количество результатов                                                               |

### inspect\_form\_layout

Возвращает полную структуру формы объекта конфигурации: иерархию элементов с типами и привязками данных, реквизиты формы, команды и обработчики событий.

| Параметр      | Тип    | По умолчанию | Описание                                                                                              |
| ------------- | ------ | ------------ | ----------------------------------------------------------------------------------------------------- |
| `object_name` | string | —            | Имя объекта (`Справочник.Номенклатура`, `Документ.РеализацияТоваровУслуг` или краткое `Номенклатура`) |
| `form_name`   | string | `""`         | Имя конкретной формы. Пустое значение — форма по умолчанию                                            |

### graph\_dependencies

Запрос графа зависимостей объекта конфигурации: какие объекты использует данный объект и кто ссылается на него.

| Параметр      | Тип    | По умолчанию | Описание                                                                       |
| ------------- | ------ | ------------ | ------------------------------------------------------------------------------ |
| `object_name` | string | —            | Имя объекта (`Номенклатура` или `Справочники.Номенклатура`)                    |
| `direction`   | string | `"both"`     | Направление: `forward` (что использует), `reverse` (кто использует) или `both` |
| `limit`       | int    | 50           | Максимальное количество связей на направление                                  |

### bsl\_scope\_members

Возвращает доступные методы, свойства и события для заданного BSL-контекста.

| Параметр      | Тип    | По умолчанию | Описание                                                                                  |
| ------------- | ------ | ------------ | ----------------------------------------------------------------------------------------- |
| `context`     | string | —            | BSL-контекст (`Справочник.Номенклатура`, `Документ.РеализацияТоваровУслуг`, `Глобальный`) |
| `member_type` | string | `"all"`      | Фильтр: `all`, `methods`, `properties` или `events`                                       |

### helpsearch

Поиск по HTML-справке конфигурации. Полезен, когда точное имя объекта метаданных неизвестно.

| Параметр | Тип    | По умолчанию | Описание                                         |
| -------- | ------ | ------------ | ------------------------------------------------ |
| `query`  | string | —            | Описание объекта метаданных или функциональности |
| `limit`  | int    | 5            | Количество результатов                           |

### get\_xsd\_schema

Получение XSD-схемы для типа объекта метаданных или подтипа. Схема генерируется из реальных XML-файлов выгрузки конфигурации. Используйте перед генерацией XML, чтобы знать ожидаемую структуру.

| Параметр      | Тип    | По умолчанию | Описание                                                                                                                                                                                                                                                                                       |
| ------------- | ------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `object_type` | string | —            | Тип метаданных (`Справочник`, `Документ`, `РегистрСведений`, `РегистрНакопления`, `Роль`) или подтип (`Форма`, `СКД`, `Макет`). Принимаются также английские алиасы: `Catalog`, `Document`, `InformationRegister`, `AccumulationRegister`, `Role`, `Form`, `DataCompositionSchema`, `Template` |

### verify\_xml

Валидация XML-содержимого по XSD-схеме для типа метаданных 1С. Возвращает статус валидации и список ошибок.

| Параметр      | Тип    | По умолчанию | Описание                                                                                                                                                      |
| ------------- | ------ | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `xml_content` | string | —            | XML-строка для валидации                                                                                                                                      |
| `object_type` | string | —            | Тип метаданных (`Справочник`, `Документ`, `РегистрСведений`, `РегистрНакопления`, `Роль`) или подтип (`Форма`, `СКД`, `Макет`). Принимаются английские алиасы |

### reindex

Запуск переиндексации всех настроенных источников данных. Выполняется в фоновом потоке, возвращает статус немедленно.

| Параметр | Тип  | По умолчанию | Описание                                                                         |
| -------- | ---- | ------------ | -------------------------------------------------------------------------------- |
| `force`  | bool | `false`      | Полная переиндексация с нуля. Если `false` — обновляются только изменённые файлы |

### stats

Статистика индексов: количество документов по коллекциям, провайдер и модель эмбеддингов, время последней индексации, аптайм, статус следующей плановой переиндексации. Параметров не принимает.

***

## Возможности

ИИ получает инструменты для:

* **Метаданные** — поиск объектов конфигурации, получение детальной структуры реквизитов и типов
* **Код** — семантический поиск по коду, точный поиск функций/процедур, анализ структуры модулей, иерархия вызовов
* **Формы** — поиск форм объектов, получение полной структуры формы (элементы, реквизиты, команды, обработчики)
* **Зависимости** — граф зависимостей между объектами конфигурации
* **BSL-контекст** — доступные методы, свойства и события для контекстов 1С
* **Справка** — поиск по HTML-справке конфигурации
* **XSD и валидация** — генерация XSD-схем из конфигурации и валидация XML

## Примеры использования

* "Какие реквизиты есть у документа РеализацияТоваров?" → `metadatasearch` + `get_metadata_details`
* "Найди все обработки, связанные с печатью" → `metadatasearch`
* "Где в конфигурации используется регистр ОстаткиТоваров?" → `graph_dependencies`
* "Покажи структуру справочника Номенклатура" → `get_metadata_details`
* "Найди функцию ОбработкаПроведения" → `search_function`
* "Покажи иерархию вызовов метода РассчитатьСумму" → `get_method_call_hierarchy`
* "Какие формы есть у документа Реализация?" → `search_forms`
* "Покажи структуру формы элемента Номенклатуры" → `inspect_form_layout`
* "Какие методы доступны у объекта Справочник.Номенклатура?" → `bsl_scope_members`
* "Получи XSD-схему для справочника" → `get_xsd_schema`
* "Проверь этот XML на соответствие схеме документа" → `verify_xml`

## Требования

* Docker Desktop с WSL2
* Лицензионный ключ
* Embedding модель (LM Studio или CPU)
* **Выгрузка конфигурации** из Конфигуратора

## Порт

**8000**

## Образ Docker

```
comol/1c_code_metadata_mcp:latest
```

### Варианты образа

| Тег      | Архитектура | Размер   | Описание                                                                |
| -------- | ----------- | -------- | ----------------------------------------------------------------------- |
| `latest` | amd64       | \~2.9 GB | Полная версия с PyTorch (локальные embedding + API)                     |
| `light`  | amd64       | \~290 MB | Без PyTorch (embedding только через API — LM Studio, OpenRouter и т.д.) |
| `arm64`  | arm64       | \~500 MB | Для Apple Silicon / ARM серверов                                        |

{% hint style="info" %}
Используйте `light`, если embedding модель работает через внешний API (LM Studio, OpenRouter). Образ в 10 раз легче.
{% endhint %}

## Подготовка данных

Требуется выгрузить из Конфигуратора:

1. **Отчет из конфигурации** (текстовый отчет по метаданным)
2. **Выгрузка в файлы** (файлы модулей)

Подробнее: [Подготовка данных](https://docs.onerpa.ru/mcp-servery-1c/servery/code-metadata-search/podgotovka-dannyh)

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

```powershell
docker run -d -p 8000:8000 `
  --name 1c_code_metadata_mcp `
  -e LICENSE_KEY=YOUR_LICENSE_KEY `
  -e METADATA_PATH="/app/metadata" `
  -e CODE_PATH="/app/code" `
  -v "E:/1C_Export/Report:/app/metadata" `
  -v "E:/1C_Export/Files:/app/code" `
  -v "E:/bases/mcp_codemetadata:/app/chroma_db" `
  comol/1c_code_metadata_mcp:latest
```

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

```json
{
  "mcpServers": {
    "1c-code-metadata-mcp": {
      "url": "http://localhost:8000/mcp",
      "connection_id": "1c_metadata_service_001"
    }
  }
}
```

## Дополнительно: rlm-tools-bsl (RLM-подход)

CodeMetadataSearchServer использует RAG-подход — предварительно индексирует код и метаданные для семантического поиска. Для дополнительного анализа без предварительной индексации можно использовать [rlm-tools-bsl](https://github.com/Dach-Coin/rlm-tools-bsl) — MCP-сервер для токен-эффективного анализа кодовых баз 1С (BSL).

|                        | CodeMetadataSearchServer (RAG)                  | rlm-tools-bsl (RLM)                   |
| ---------------------- | ----------------------------------------------- | ------------------------------------- |
| **Подход**             | Предварительная индексация, семантический поиск | Анализ файлов на лету, без индексации |
| **Время старта**       | Часы на индексацию                              | 0 секунд                              |
| **Качество поиска**    | Высокое (эмбеддинги + BM25 + реранкер)          | Высокое (для точечных запросов)       |
| **Экономия контекста** | Чанки релевантного кода                         | До 95% за счёт серверных хелперов     |
| **Инфраструктура**     | Docker + embedding модель                       | pip install (Python 3.10+)            |

{% hint style="success" %}
Лучший результат достигается при совместном использовании обоих подходов: CodeMetadataSearchServer для семантического поиска и навигации по архитектуре, rlm-tools-bsl для быстрого точечного анализа кода и экономии контекста.
{% endhint %}

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.onerpa.ru/mcp-servery-1c/servery/code-metadata-search.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
