Для кого: программисты 1С, которые пишут код с ИИ-агентом (Cursor, Claude Code) и устали проверять выдуманные методы вручную.
Справка платформы (файл shcntx_ru.hbk) читается стандартной библиотекой Python и превращается в базу SQLite с полнотекстовым поиском: 21 554 записи о методах, свойствах и событиях. Сервер на MCP SDK 2.2.0 (класс MCPServer вместо FastMCP) отдаёт её ИИ-агенту как инструмент. Выдуманные имена сервер отсекает ответом «нет в справке». Прогнано на платформе 8.3.27.2130. Подключение к Cursor и Claude Code описано по документации, не запускалось.
Модель отвечает про 1С уверенно и часто ошибается в именах. При вычитке черновиков для этого цикла статей в тексте встретился метод СоединитьИнформационнуюБазу. В справке платформы такого метода нет. Проверка занимает секунды, если справка лежит в базе, которую агент может спросить сам.
Идея сверять ответ модели со справкой платформы не моя: на Infostart её уже реализовали несколько авторов, список с отличиями - в разделе «Источники и чем эта статья отличается». Здесь я показываю свою минимальную сборку: два файла на Python и SQLite, каждый шаг с выводом прогона. Весь код в статье написан для неё и прогнан на стенде, чужой код не заимствовался.
📦 Где лежит справка и что внутри
Синтакс-помощник платформы хранится в файлах *.hbk рядом с 1cv8.exe. Содержимое контекста (методы, свойства, события, типы) лежит в shcntx_ru.hbk. На платформе 8.3.27.2130 это файл размером 40 758 131 байт по пути C:\Program Files (x86)\1cv8\8.3.27.2130\bin\shcntx_ru.hbk.
Формат .hbk 1С не документирует; тот же файл разбирают и авторы публикаций из списка источников, но их код я не использовала. Устройство, которое я увидела при чтении файла байт за байтом: заголовок, таблица документов и документ FileStorage, внутри которого обычный ZIP со страницами HTML. В этом ZIP на нашей платформе 52 064 файла. Страниц методов 7 199, свойств 13 662, событий 693. Остальное - описания типов, служебные файлы и картинки.
Одна страница метода выглядит в HTML так: заголовок СправочникМенеджер.<Имя справочника>.ПолучитьСсылку, разделы «Синтаксис», «Параметры», «Возвращаемое значение», «Описание», «Доступность», версия. Из этих разделов и собирается запись индекса.
🧱 Индексатор
Скрипт hbk_index.py читает контейнер стандартной библиотекой Python (без сторонних пакетов), достаёт ZIP из FileStorage, разбирает страницы регулярными выражениями и складывает записи в SQLite с полнотекстовым индексом FTS5.
Запуск и результат на нашей машине (Windows 11, Python 3.12, SQLite 3.49.1):
python hbk_index.py "C:\Program Files (x86)\1cv8\8.3.27.2130\bin\shcntx_ru.hbk" syntax.db записей: 21554
Индексация заняла около 7 секунд, база syntax.db весит около 39 МБ (39 481 344 байта). Записей 21 554 против 21 554 страниц методов, свойств и событий: каждая страница попала в базу.
Две детали, которые стоило проверить. Функция SQLite lower() не приводит кириллицу к нижнему регистру, поэтому имя для точного поиска (name_lc) приводится к нижнему регистру в Python. Глобальные функции лежат глубже остальных (objects/Global context/methods/catalog4838/StrFind4836.html), и регулярное выражение для путей должно допускать вложенные каталоги. В первой версии скрипта этого не было, и СтрНайти в базе отсутствовала.
🔌 Сервер MCP
В MCP SDK 2.x класс FastMCP переименован в MCPServer, а импорт изменился: from mcp.server.mcpserver import MCPServer. Примеры с from mcp.server.fastmcp import FastMCP на свежей установке pip install mcp падают с ModuleNotFoundError. Есть два выхода: ставить mcp<2 и оставить старый код, либо писать под версию 2. Ниже версия 2 (проверено на mcp 2.2.0).
Инструмент у сервера один - find_syntax(name). Порядок поиска такой: сначала строка с точно таким name_lc, затем префиксный поиск FTS5 по заголовкам страниц, всего не больше пяти записей. Если ни одна ветка ничего не вернула, сервер отвечает фразой «нет записей», и агент получает явный отказ. Проверки выражений целиком (число аргументов, значения перечислений) здесь нет: это умеет bsl-context из списка источников.
🧪 Проверка клиентом SDK
Подключать агента вслепую не нужно: SDK содержит клиент, которым сервер проверяется отдельно. Скрипт test_client.py запускает сервер как подпроцесс по stdio, выводит список инструментов и делает четыре запроса.
Результат прогона (сокращён до начала ответов):
инструменты: ['find_syntax'] Запрос: ПолучитьСсылку СправочникМенеджер.<Имя справочника>.ПолучитьСсылку (CatalogManager.<Catalog name>.GetRef) Синтаксис: ПолучитьСсылку(<УникальныйИдентификатор>) Доступен, начиная с версии 8.0. Запрос: СтрНайти Глобальный контекст.СтрНайти (Global context.StrFind) Синтаксис: СтрНайти(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) Запрос: НачатьТранзакциюЗаписи В справке синтакс-помощника нет записей по запросу «НачатьТранзакциюЗаписи».
Метод менеджера справочника называется ПолучитьСсылку(<УникальныйИдентификатор>). Метода Получить(УИД) у менеджера справочника в справке нет. Метода НачатьТранзакциюЗаписи тоже нет, есть глобальная НачатьТранзакцию(<РежимБлокировок>). Скрипт name_check.py проверяет имена пачкой:
python name_check.py syntax.db ПолучитьСсылку ПродолжитьВызов СоединитьИнформационнуюБазу ПолучитьСсылку: найдено 10, например СправочникМенеджер.<Имя справочника>.ПолучитьСсылку (...) ПродолжитьВызов: найдено 1, например Глобальный контекст.ПродолжитьВызов (Global context.ProceedWithCall) СоединитьИнформационнуюБазу: нет в справке
Замер автора: Windows 11, Python 3.12, SQLite 3.49.1, платформа 8.3.27.2130, справка shcntx_ru.hbk (40 758 131 байт), одна серия.
🧰 Подключение к Cursor и Claude Code
Настройки ниже взяты из документации Cursor и Claude Code; в самих редакторах я их не запускала. Для Cursor сервер описывается в .cursor/mcp.json проекта или в ~/.cursor/mcp.json:
Для Claude Code сервер добавляется командой (после -- идёт команда запуска сервера):
claude mcp add --transport stdio 1c-syntax-helper -- python C:/tools/syntax-mcp/syntax_mcp.py C:/tools/syntax-mcp/syntax.db claude mcp list
В обоих случаях python должен быть интерпретатором, в котором установлен пакет mcp (удобно указать полный путь к python.exe из виртуального окружения).
В инструкцию проекта (CLAUDE.md или правила Cursor) стоит добавить строку: «Перед тем как использовать метод платформы, которого нет в текущем коде, проверь его через find_syntax». Вызывает ли ваша модель инструмент сама и как часто, проверьте на своих задачах: этот замер в статье не проводился.
🚧 Что эта схема покрывает и что нет
- Справка платформы содержит методы, свойства и события встроенных типов. Объекты вашей конфигурации (реквизиты справочника «Номенклатура», процедуры общих модулей) в ней не описаны. Для них нужен другой источник: выгрузка конфигурации в файлы.
- Отсутствие имени в справке говорит, что имени нет среди методов, свойств и событий платформы. Директивы (
&НаСервере,&Вместо), ключевые слова и конструкции языка запросов сюда не попадают:name_check.pyне находитВместо,ПеремиЭкспорт. Совпадения по чужим сущностям возможны (НаСерверенаходит свойство элемента плана глобального поиска, к директиве оно отношения не имеет), поэтому читайте, какому типу принадлежит найденное имя. Справка языка и запросов лежит в соседних файлах (shlang_ru.hbk,shquery_ru.hbk), скрипт их не читает и их содержимое не проверялось. - Тексты справки принадлежат 1С. База нужна для локальной работы на вашей машине, распространять её не стоит.
- Разбор
.hbkсделан по структуре файла, документации на формат нет. На другой версии платформы формат может отличаться, скрипт проверен только на 8.3.27.2130.
📚 Источники и чем эта статья отличается
Публикации на Infostart на ту же тему (прочитаны 30.09.2026):
| Публикация | Что делает | Чем отличается эта статья |
|---|---|---|
| MCP-сервер для проверки ИИ-кода 1С на соответствие API платформы (Sorm, 26.05.2026) | bsl-context: сервер на Rust читает shcntx_ru.hbk и проверяет фрагмент BSL целиком (validate_expression: несуществующие значения перечислений, число аргументов), подключение по HTTP |
Здесь только поиск имени по справке, зато весь код (200 строк Python в четырёх файлах) показан в статье и прогнан по шагам |
| 1C Syntax MCP Server: Когда твой код не превращается в тыкву (starik-2005, 05.04.2026) | Переводит shcntx_ru.hbk в JSON (около 52 000 записей) и отдаёт через MCP |
Здесь SQLite с FTS5 и сервер под MCP SDK 2.x |
| Синтакс-помощник 1С для нейросетей (malikov_pro, 01.09.2026) | Готовый сервер со справкой для нескольких версий платформы | Здесь одна версия платформы и минимальная реализация для самостоятельной сборки |
| Свой MCP-сервер для метаданных 1С (FSerg) | Метаданные конфигурации из выгрузки XML, векторный поиск в Qdrant | Метаданные конфигурации здесь не индексируются, только справка платформы |
Документация, по которой писался сервер: миграция MCP Python SDK на версию 2.
🏁 Итог
Справка платформы превратилась в базу на 21 554 записи (7 секунд по секундомеру на нашем стенде), а сервер на 53 строках отдаёт её агенту по протоколу MCP. Выдуманные имена вроде СоединитьИнформационнуюБазу и НачатьТранзакциюЗаписи инструмент отсекает ответом «нет в справке». Расскажите в комментариях, какие выдуманные методы чаще всего приносит ваша модель: их можно добавить в проверочный список.
Вступайте в нашу телеграмм-группу Инфостарт