MCP-обёртка над BSL Language Server: статический анализ и навигация по коду 1С (BSL)
Server provides 7 tools for BSL code analysis with mostly complete schemas and descriptions in Russian. Naming follows verb_noun pattern (bsl_*). Descriptions are detailed but lengthy (200-800+ chars, exceeding 1024 baseline). All tools have input schemas with type definitions. However, output schemas are not formally documented in the code, responses are inferred from implementation. Error handling exists but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. One tool (bsl_reindex) is WRITE but unmarked.
Кого вызывает функция (outgoing calls). full_name: 'ОбщийМодуль.МойМодуль.ИмяФункции'.
Кто вызывает функцию (incoming calls). full_name: 'ОбщийМодуль.МойМодуль.ИмяФункции'.
Сложность методов модуля (когнитивная + цикломатическая). Метрика ревьюеру. module_full_name: 'ОбщийМодуль.МойМодуль'; function (опц.) — только этот метод.
Где объявлен символ. full_name: 'ОбщийМодуль.МойМодуль.ИмяФункции'.
Диагностики кода. Укажите РОВНО ОДИН адрес: module_full_name — модуль корпуса: 'ОбщийМодуль.МойМодуль' | 'Справочник.X.Форма.Имя'; path — произвольный каталог или .bsl-файл ВНЕ корпуса (внешние обработки/отчёты), напр. 'C:\1c\work\<задача>\Реализация'. Индекс не нужен; text — СТРОКА кода 1С (снипет): линт до записи в файл. Обёртка в процедуру НЕ нужна (блок операторов линтуется как есть), нужна лишь синтаксическая завершённость (закрытые Если/Цикл, не оборванные выражения). Проверки ПОФАЙЛОВЫЕ, без контекста конфигурации (тип модуля/ссылки на объекты не проверяются). Для снипета по умолчанию возвращаются ВСЕ замечания (не только error+warning). По умолчанию для module/path отдаёт полным списком только error+warning, а info/hint сворачивает в сводку suppressed.by_code (счётчики по кодам) — чтобы не переполнять бюджет на крупных модулях/формах (для text порог по умолчанию 'hint' — всё). Детали: code='Typo' (все по коду, любой severity) или min_severity='hint' (всё подряд). Возвращает {"diagnostics":[...], "suppressed":{"total":N,"by_code":[...]}}. Идёт через analyze-CLI (без тёплого индекса) со своей очередью — навигационный семафор тут не нужен, проверка кода не конкурирует за граф.
Output schemas not formally documented. Tools return dicts/lists but no schema definition visible in code. LLMs cannot plan downstream calls without knowing response structure.
Tool descriptions exceed 1024 char baseline (bsl_diagnostics ~800 chars). Verbose descriptions waste tokens and bury key details. Recommend: split into summary (50-100 chars) + detailed docstring.
No tool annotations (readOnlyHint/destructiveHint/idempotentHint) despite clear risk classifications. bsl_reindex is WRITE but unmarked. Agents cannot distinguish safe vs destructive operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Где используется символ. full_name: 'ОбщийМодуль.МойМодуль.ИмяФункции'.
Полный реиндекс корпуса (после массовых изменений конфигурации). Точечные правки модулей подхватываются автоматически — это для крупных изменений.
Error handling in code (ResolveError, validation checks) but no recovery guidance in descriptions. E.g., bsl_diagnostics requires exactly one of three params, error message should suggest which param to provide.
bsl_reindex accepts empty input {} but description does not explain parameters or side effects. Agents cannot reason about when to call it or what happens.