> 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/code-checker/instrumenty.md).

# Инструменты

Сервер предоставляет **11 MCP-инструментов**, разделённых на две группы: работа с кодом и работа с документацией.

## Анализ и работа с кодом

### ask\_1c\_ai

Свободный вопрос к ИИ-ассистенту 1С:Напарник. Используется для любых вопросов по 1С, которые не подходят под специализированные инструменты: архитектурные вопросы, объяснения концепций, советы по разработке.

**Особенность:** в отличие от всех остальных инструментов (которые всегда создают новую сессию), `ask_1c_ai` по умолчанию **переиспользует последнюю сессию**, сохраняя контекст диалога. Это позволяет задавать уточняющие вопросы.

| Параметр             | Тип            | Обязательный | Описание                                                                              |
| -------------------- | -------------- | ------------ | ------------------------------------------------------------------------------------- |
| `question`           | string         | Да           | Вопрос по разработке на 1С                                                            |
| `create_new_session` | boolean        | Нет          | `true` — новая сессия (сброс контекста), `false` (по умолчанию) — продолжение диалога |
| `files`              | array\[string] | Нет          | Пути к исходникам внутри `ONEC_AI_WORKSPACE_ROOTS`, которые нужно приложить к вопросу |

**Пример:** "Объясни разницу между ОбщийМодуль и МодульОбъекта"

***

### check\_1c\_code

Техническая проверка кода 1С: синтаксические ошибки, логические проблемы и проблемы производительности.

В режиме `direct` синтаксис проверяется через upstream `syntax-checker`, а затем ИИ анализирует логику и производительность. При недоступности upstream автоматически переключается на промпт-режим.

Для проверки стиля и стандартов используйте `review_1c_code`.

| Параметр | Тип            | Обязательный         | Описание                                                    |
| -------- | -------------- | -------------------- | ----------------------------------------------------------- |
| `code`   | string         | Да, если нет `files` | Код 1С для проверки                                         |
| `files`  | array\[string] | Да, если нет `code`  | Пути к файлам исходника; `code` и `files` взаимоисключающие |

**Пример:** "Проверь этот код на ошибки"

***

### review\_1c\_code

Code review кода 1С с точки зрения стиля и стандартов: именование переменных, соответствие стандартам ИТС, читаемость, структура, комментирование, обработка ошибок.

**Не проверяет** синтаксические ошибки и баги — для этого используйте `check_1c_code`.

| Параметр | Тип            | Обязательный         | Описание                                                    |
| -------- | -------------- | -------------------- | ----------------------------------------------------------- |
| `code`   | string         | Да, если нет `files` | Код 1С для ревью                                            |
| `files`  | array\[string] | Да, если нет `code`  | Пути к файлам исходника; `code` и `files` взаимоисключающие |

**Пример:** "Проведи code review этого модуля"

***

### rewrite\_1c\_code

ИИ анализирует код и предлагает собственную улучшенную версию с применением лучших практик, оптимизацией и объяснениями всех изменений. ИИ сам решает, что и как улучшить.

В отличие от `modify_1c_code` (который выполняет точные инструкции пользователя), `rewrite_1c_code` даёт ИИ свободу в выборе улучшений.

| Параметр | Тип            | Обязательный         | Описание                                                                                                  |
| -------- | -------------- | -------------------- | --------------------------------------------------------------------------------------------------------- |
| `code`   | string         | Да, если нет `files` | Код 1С для переписывания                                                                                  |
| `files`  | array\[string] | Да, если нет `code`  | Пути к файлам исходника; `code` и `files` взаимоисключающие                                               |
| `goal`   | string         | Нет                  | Направление улучшения: `optimize`, `readability`, `error handling` и т.д. Если не указано — ИИ решает сам |

**Пример:** "Перепиши этот код, улучши производительность"

**Возврат:** предложение (`RewriteProposal`), а не готовая замена — см. раздел «Предложения правки кода» ниже.

***

### modify\_1c\_code

Модификация кода по явной инструкции пользователя: исправление конкретного бага, добавление функциональности, рефакторинг определённым способом. ИИ выполняет именно то, что указано.

Если код не передан — генерирует новый код по инструкции.

| Параметр      | Тип            | Обязательный | Описание                                                                              |
| ------------- | -------------- | ------------ | ------------------------------------------------------------------------------------- |
| `instruction` | string         | Да           | Описание требуемых изменений                                                          |
| `code`        | string         | Нет          | Исходный код для модификации (если нет ни `code`, ни `files` — генерация нового кода) |
| `files`       | array\[string] | Нет          | Пути к исходникам; нельзя задавать вместе с `code`                                    |

**Пример:** "Добавь обработку ошибок и логирование в эту процедуру"

**Возврат:** предложение (`RewriteProposal`) — см. следующий раздел.

***

## Чтение исходников из workspace (beta)

Пять инструментов — `ask_1c_ai`, `check_1c_code`, `review_1c_code`, `rewrite_1c_code`, `modify_1c_code` — принимают список `files`. Это предпочтительный способ передать большой модуль: путь не обрезается MCP-клиентом до прибытия на сервер.

* корни задаёт `ONEC_AI_WORKSPACE_ROOTS`; пустое значение запрещает чтение любых файлов;
* абсолютный путь с машины клиента принимается только через явное соответствие `ONEC_AI_WORKSPACE_PATH_MAP`; без него допустимы относительный путь от корня или абсолютный путь внутри контейнера;
* за вызов принимается не более 20 файлов, каждый — не больше `ONEC_AI_WORKSPACE_MAX_FILE_BYTES`;
* разрешены только обычные файлы внутри корней после разрешения `..` и символических ссылок;
* один плохой путь отменяет весь вызов — частичный исходник во внешний сервис не уходит;
* кодировки пробуются по порядку: UTF-8 (BOM удаляется), затем CP1251;
* один файл передаётся без заголовка и добавленной новой строки; несколько — под заголовками `// ===== <path> =====`;
* сервер открывает workspace только на чтение.
* один файл передаётся upstream побайтно как исходный текст, поэтому `sources[].text_sha256` совпадает с `original_hash` предложения правки; несколько файлов объединяются с заголовками и используются как контекст, а не как единый патч-таргет.

Каждый результат содержит `sources` — пустой список для inline-кода или сведения о каждом прочитанном файле: путь, кодировку, размер, SHA-256 исходных байтов и декодированного текста. Для одного файла `text_sha256` совпадает с `original_hash` предложения правки, поэтому diff можно безопасно привязать к исходнику.

***

## Предложения правки кода

`rewrite_1c_code` и `modify_1c_code` возвращают **данные, а не инструкцию**. Сервер ничего не применяет: применение — ответственность вызывающей стороны.

| Поле                 | Что означает                                                                                           |
| -------------------- | ------------------------------------------------------------------------------------------------------ |
| `original_hash`      | Хеш ровно того исходника, который вы передали (снимается до усечения и до сборки промпта)              |
| `diff`               | Побайтно точная разница от вашего исходника к предложению                                              |
| `proposed_code`      | Предложенный код                                                                                       |
| `has_original`       | `false`, если кода не передавали — тогда это генерация, а не правка, и хеш пустой строки не сообщается |
| `validation_status`  | Закрытый набор: `passed`, `failed`, `not_performed`, `unavailable`                                     |
| `safe_to_apply`      | Можно ли применять                                                                                     |
| `apply_precondition` | Условие применения: только к исходнику, чей хеш равен `original_hash`                                  |

{% hint style="warning" %}
Статус `passed` и `failed` ставится только по **наблюдённому** результату проверки. `not_performed` — проверка была возможна, но результата не наблюдалось; `unavailable` — возможность синтаксической проверки недоступна. Промпт просит модель проверить код, но просьба не гарантия, и статус отличный от `passed` сообщается честно.
{% endhint %}

Применять предложение можно только к исходнику с совпадающим `original_hash` и только при `safe_to_apply`. Это защищает от применения правки к коду, который успел измениться.

## Документация и база знаний

### search\_1c\_documentation

Поиск в документации платформы 1С:Предприятие для **конкретной версии**. Находит описания методов встроенного языка, объектов платформы, типов, событий, свойств.

В режиме `direct` использует upstream `knowledge-hub` для точных результатов.

| Параметр  | Тип    | Обязательный | Описание                                                                                                                    |
| --------- | ------ | ------------ | --------------------------------------------------------------------------------------------------------------------------- |
| `query`   | string | Да           | Поисковый запрос                                                                                                            |
| `version` | string | Нет          | Версия документации, например `v8.5.1`, `v8.3.25`. Если не указана — значение `ONEC_AI_DOC_VERSION` (по умолчанию `v8.5.1`) |

**Возврат:** результат поиска и поле `version_used` — версия, которая фактически ответила.

**Пример:** "Найди в документации v8.3.25 описание HTTPСоединение"

***

### onec\_help

{% hint style="warning" %}
**Устаревший инструмент.** Используйте `search_1c_documentation`. Имя сохранено, чтобы существующие конфигурации продолжали работать: вызов переадресуется в ту же реализацию и отправляет upstream идентичные аргументы.
{% endhint %}

Ищет по документации платформы версии по умолчанию (`ONEC_AI_DOC_VERSION`). Сервер никогда не отслеживал «последнюю» версию платформы; фактически ответившая версия сообщается в `version_used`.

| Параметр | Тип    | Обязательный | Описание         |
| -------- | ------ | ------------ | ---------------- |
| `query`  | string | Да           | Поисковый запрос |

**Пример:** "Что такое РегистрНакопления?"

***

### its\_help

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

Результаты возвращаются **структурированными записями**: у каждой есть `id`, `title` и `snippet`, а `id` напрямую принимается `fetch_its` — разбирать текст ответа не нужно.

| Параметр | Тип    | Обязательный | Описание         |
| -------- | ------ | ------------ | ---------------- |
| `query`  | string | Да           | Поисковый запрос |

{% hint style="info" %}
Если структурированного ответа не было и доступен только текст, список записей пуст, а поле `structured_records_available` равно `false`. Идентификаторы никогда не извлекаются из прозы и не выдаются за структурированные.
{% endhint %}

**Пример:** "Стандарты именования переменных в 1С"

***

### fetch\_its

Получение содержимого документа, каталога или базы ИТС по идентификатору. Обычно используется после `its_help` для чтения найденных документов.

Специальные идентификаторы: `root` (корень ИТС), `superior` (Руководитель), `v8std` (Стандарты разработки).

| Параметр | Тип    | Обязательный | Описание                                                |
| -------- | ------ | ------------ | ------------------------------------------------------- |
| `id`     | string | Нет          | Идентификатор документа/каталога (по умолчанию: `root`) |

{% hint style="info" %}
Форма идентификатора проверяется **до** обращения к upstream. Значение, не похожее ни на одну из известных форм (`root`, `superior`, `v8std`, `its-...-hdoc`, `its-...-hdir`), возвращает ошибку некорректного идентификатора без запроса к API. Корректный идентификатор, который upstream не смог найти, — это отдельная ситуация «не найдено» с другим способом исправления.
{% endhint %}

**Пример:** После `its_help` получен ID `its-...-hdoc` → вызов `fetch_its` с этим ID

***

### diff\_1c\_documentation\_versions

Сравнение документации платформы 1С:Предприятие между двумя версиями. Показывает, что изменилось, добавилось или удалилось.

| Параметр    | Тип    | Обязательный | Описание                                                               |
| ----------- | ------ | ------------ | ---------------------------------------------------------------------- |
| `version_a` | string | Да           | Более ранняя версия (например, `v8.3.27`)                              |
| `version_b` | string | Да           | Более поздняя версия (например, `v8.5.1`)                              |
| `query`     | string | Нет          | Предметная область для сужения сравнения (например, "HTTP соединение") |

**Пример:** "Что изменилось между v8.3.25 и v8.5.1 в области работы с HTTP?"

***

### config\_help

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

В отличие от `search_1c_documentation` / `onec_help` (которые ищут по документации **платформы**), `config_help` ищет по документации **конфигурации** (приложения).

| Параметр      | Тип    | Обязательный | Описание                                                                                                                                                              |
| ------------- | ------ | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `query`       | string | Да           | Поисковый запрос                                                                                                                                                      |
| `config_name` | string | Нет          | Название конфигурации: `ERP`, `Бухгалтерия предприятия`, `Управление торговлей`, `ЗУП` и др. Если не указано — используется значение из переменной `ONEC_CONFIG_NAME` |

**Пример:** "Как работает проведение документа Реализация в ERP?"

## Режимы вызова (direct vs standard)

Ряд инструментов поддерживает два режима работы, переключаемых переменной `MCP_TOOL_CALL_MODE`:

| Инструмент                       | Direct mode                                           | Standard mode    |
| -------------------------------- | ----------------------------------------------------- | ---------------- |
| `check_1c_code`                  | Синтаксис через `syntax-checker`, логика через промпт | Всё через промпт |
| `search_1c_documentation`        | Upstream `Search_Documentation`                       | Промпт           |
| `onec_help`                      | Upstream `Search_Documentation`                       | Промпт           |
| `its_help`                       | Upstream `Search_ITS`                                 | Промпт           |
| `fetch_its`                      | Upstream `Fetch_ITS`                                  | Промпт           |
| `diff_1c_documentation_versions` | Upstream `Diff_Documentation_Versions`                | Промпт           |
| Остальные                        | Только промпт                                         | Только промпт    |

Когда direct-путь недоступен или вызов не удался, ответ приходит промпт-путём и несёт машиночитаемое поле `fallback_reason`: какая именно возможность была затронута и в какое состояние она разрешилась. Это не молчаливая подмена — по ответу видно, каким путём он получен.

Подробнее о режимах — в разделе [Конфигурация](/mcp-servery-1c/servery/code-checker/konfiguraciya.md).

## Усечение входных данных

Каждое входное поле ограничено `ONEC_AI_INPUT_MAX_LENGTH` (по умолчанию 100 000 символов) **по отдельности**. Если поле было укорочено, ответ несёт доказательство усечения: какое поле, до какой длины и сколько символов отброшено.
