Skip to main content
Glama

bsl-ls-mcp

tests License: MIT Python Platform maintenance

MCP-обёртка над BSL Language Server для статического анализа и навигации по коду 1С (BSL). Один интерфейс наружу — инструменты mcp__bsl-ls__* для агентов и любых MCP-клиентов.

Статус проекта. Инструмент рабочий и используется в бою, но развивается по остаточному принципу: делюсь как есть. Активной поддержки, разбора issue и приёма правок в срок не обещаю — реагирую по возможности и без гарантий. Форки и адаптация под свои задачи только приветствуются.

Подробности (архитектура, сборка, все настройки, внутренняя механика) — в README_full.md. Здесь — только как запустить и что умеет.

Что нужно

  • Рабочая копия исходников 1С: выгрузка конфигуратора (каталог с Configuration.xml) или проект EDT (каталог <проект>\src с Configuration\Configuration.mdo) — формат определяется сам.

  • ~14 ГБ свободной RAM — для навигации (граф держится в памяти). Диагностикам индекс не нужен, им хватает ~2 ГБ на разовый вызов.

  • Java 21+ (BSL LS 1.0.x) или готовый бандл с portable JRE (Python/Java ставить не надо).

Related MCP server: bsl-context

Запуск

Вариант 1. Готовый бандл (рекомендуется)

Папка dist\bsl-ls-mcp\ самодостаточна (внутри Python и Java). На целевой машине:

:: 1. указать путь к исходникам 1С (или отредактировать BSL_WORKSPACE в run.cmd)
set BSL_WORKSPACE=C:\1c\src\cf

:: 2. проверка — должно напечатать [selftest] OK
run.cmd --selftest

:: 3. запуск демона (streamable-http на :8081/mcp)
run.cmd

Как Windows-служба (автозапуск, авто-рестарт) — из-под администратора:

powershell -ExecutionPolicy Bypass -File install-service.ps1 -Workspace "C:\1c\src\cf"

Для проекта EDT: -Workspace "C:\Projects\git\bf_edt\BF\src". Набор диагностик фиксируется конфигом BSL LS: -Config "<путь>\.bsl-language-server.json". Управление — штатными средствами Windows (Restart-Service bsl-ls-mcp), полный реиндекс — MCP-инструментом bsl_reindex. Состояние индекса — %ProgramData%\bsl-ls-mcp\status.json.

Вариант 2. С исходников (нужны Python 3.10+ и Java 21+)

py -3 -m pip install -e .
$env:BSL_WORKSPACE = "C:\1c\src\cf"
bsl-ls-mcp --transport streamable-http --port 8081     # → http://127.0.0.1:8081/mcp

Подключение к MCP-клиенту

В .mcp.json клиента (агентского пайплайна):

{ "bsl-ls": { "type": "streamable-http", "url": "http://127.0.0.1:8081/mcp" } }

Первый вызов навигации подождёт индекс (~1.5 мин), дальше — мгновенно. Диагностики доступны сразу (пока индекс строится — через пакетный analyze, см. поле источник). Правки .bsl на диске сервер получает сам перед каждым запросом — реиндекс нужен только после изменений метаданных.

Безопасность. Демон не аутентифицирует вызовы и по умолчанию слушает только 127.0.0.1. Не выставляйте порт в сеть без обратного прокси с авторизацией (BSL_MCP_HOST=0.0.0.0 заблокирован без BSL_ALLOW_REMOTE=1). path-режим bsl_diagnostics(path) принимает любой локальный путь (UNC запрещён); пути проверок правок задачи ограничены BSL_WORKSPACE и BSL_ALLOWED_ROOTS. Подробнее — SECURITY.md.

Как устроено имя объекта

Везде, где инструмент просит имя — это строка с точками, как в ПолноеИмя() 1С:

Тип.Модуль                  → операции над модулем (диагностики)
Тип.Модуль.Метод            → навигация по функции/процедуре
Тип.Объект.Форма.ИмяФормы   → модуль формы (для диагностик)

Примеры: ОбщийМодуль.ОбщегоНазначения, Справочник.Контрагенты.Форма.ФормаЭлемента, ОбщийМодуль.ОбщегоНазначения.ЗначениеРеквизитаОбъекта.

Код вне корпуса (внешние обработки/отчёты) адресуется не именем, а параметром path — произвольный каталог или .bsl-файл; индексированный корпус для этого не нужен (см. bsl_diagnostics ниже).

Методы

Инструмент

Что делает

Вход

Кому полезно

bsl_diagnostics

Проверка кода: ошибки, стиль, устаревшие конструкции. Блокирующий гейт «нельзя сдавать с ошибками». Код корпуса — из тёплого индекса с контекстом конфигурации (1–2 c), пока индекс строится — пакетный analyze.

module_full_name (Тип.Модуль/форма) или path (любой локальный каталог/файл) или text; зона правок — lines="от-до" или function="Метод"

developer (перед сдачей), reviewer

bsl_callers

Кто вызывает функцию — по всему корпусу, включая вызовы по строковому имени (ДлительныеОперации, ВыполнитьМетодКонфигурации: поле способ). Анализ влияния «кого заденет правка».

Тип.Модуль.Метод

analyst, architect, reviewer

bsl_callees

Кого вызывает функция (исходящие вызовы). От чего зависит метод.

Тип.Модуль.Метод

analyst, architect

bsl_definition

Где объявлен метод (переход к определению).

Тип.Модуль.Метод

все

bsl_references

Все места использования метода (со строкой кода).

Тип.Модуль.Метод

analyst, architect

bsl_complexity

Сложность методов модуля: когнитивная + цикломатическая. Сигнал «стоит упростить».

Тип.Модуль [+ метод]

reviewer

bsl_reindex

Полный реиндекс корпуса in-place (после массовых изменений конфигурации).

—

обслуживание

bsl_rules_check

Проверка правок задачи по правилам проекта: шаблоны из реестра + проверки кода (чтение/запись базы в цикле, форма транзакции, параметры, служебный интерфейс чужих модулей и др.). Только строки задачи. Без индекса, секунды.

repo (+base, rev) или baseline+target; rules — реестр

developer, reviewer, хук CI

bsl_task_methods

Какие методы задача добавила и какие изменила.

repo (+base, rev) или baseline+target

analyst, reviewer

Что возвращают (коротко)

  • bsl_diagnostics → {diagnostics, suppressed}. По умолчанию diagnostics — полный список только error+warning (error первыми); стилевой шум info/hint свёрнут в suppressed.by_code (счётчики по кодам, чтобы не раздувать ответ). Детали свёрнутого — вызов с code="Typo". Поле file точно указывает модуль (менеджер/объект/форма), а для кода вне корпуса — путь файла относительно переданного path. Адрес — ровно один из двух:

    bsl_diagnostics(module_full_name="ОбщийМодуль.МойМодуль")        # модуль корпуса
    bsl_diagnostics(path=r"C:\1c\work\<задача>\Реализация")          # внешняя обработка
    bsl_diagnostics(path=r"...\ObjectModule.bsl")                    # один файл
  • bsl_callers / bsl_callees → список {name, type, full_name, kind} — full_name можно сразу подать в другой инструмент.

  • bsl_definition / bsl_references → список {type, module, full_name, line, text} — line 1-based, text — сама строка кода.

  • bsl_complexity → список {full_name, cognitive, cyclomatic}.

  • bsl_rules_check → {"находки": [{ид, уровень, файл, строка, текст, регламент}], "исключены": [...], "пропущено": [{что, почему}]}. Что не удалось выполнить (правило без реализации, регулярка не компилируется), названо в пропущено — «чисто» при пропусках не бывает.

  • bsl_task_methods → [{файл, модуль, метод, вид, экспорт, строки, статус}], статус — «новый» или «изменён».

Имена в ответах — русские (как у 1С).

Проверка правок задачи по правилам проекта

bsl_rules_check смотрит только строки задачи: изменённые и добавленные строки по git diff -U0 <base>, новый файл — целиком. Вендорский код рядом задаче не вменяется. Источник правок — git-репозиторий выгрузки или пара каталогов «эталон / копия» (внешние обработки, без git). Индекс LSP не нужен.

Правила — данные проекта, а не код инструмента. Реестр правил (JSON) живёт у проекта и передаётся путём (rules или BSL_RULES). В нём два вида правил:

  • шаблон — регулярка + область строки (код без литералов, литерал запроса, комментарий…)

    • примеры ловит/не_ловит;

  • код — ссылка на проверку инструмента по её ключу ("реализация": "loop.db-read-via-call"); номер, уровень, текст и пункт регламента — проекта, их можно менять, не трогая инструмент.

Без реестра работают все проверки кода с нейтральными текстами (ид = ключ). Формат реестра, каталог ключей и области шаблонов — в README_full.md.

Тот же сценарий — из командной строки, без демона (так его зовёт хук CI):

bsl-ls-mcp rules-check --repo C:\1c\src\cf --base <коммит-до-задачи> --rules правила.json --json
bsl-ls-mcp task-methods --repo C:\1c\src\cf --base <коммит-до-задачи>

Код возврата rules-check: 0 — нарушений уровня Fail нет, 1 — есть, 2 — ошибка входа.

Поведение

  • Первый вызов навигации после старта ждёт индексацию (~1.5 мин на боевом корпусе), дальше — доли секунды. Диагностики индекс не ждут — отрабатывают всегда за ~5–8 c.

  • Свежесть: правки на диске видны без перезапуска (навигация — по didChange, диагностики читают файл заново).

  • Имя не разрешилось → понятная ошибка; нет результатов → пустой список.

Полная документация по параметрам, переменным окружения и устройству — в README_full.md.

Available Tools

7 tools
bsl_calleesB

Кого вызывает функция (outgoing calls). full_name: 'ОбщийМодуль.МойМодуль.ИмяФункции'.

ParametersJSON Schema
NameRequiredDescriptionDefault
full_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, and the description does not mention whether the operation is read-only, what the result format is (e.g., list of callees), or any permissions or side effects. The agent is left without essential behavioral context beyond the core action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very brief and to the point. It includes a necessary example, which adds value without unnecessary verbosity. The structure is clean, though the lack of an explicit command verb in English might reduce universal clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the description is minimal and lacks crucial context such as the expected return value (e.g., a list of call sites or function names) and any caveats. It is not sufficiently complete for an agent to fully anticipate the tool's behavior and output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The sole parameter 'full_name' has no schema description, but the description provides an example value ('ОбщийМодуль.МойМодуль.ИмяФункции'), which clarifies the expected format. However, it does not explicitly define what the parameter represents (the fully qualified name of the function) or any constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Кого вызывает функция' explicitly states that the tool returns the outgoing calls (callees) of a function. It clearly identifies the action (вызывает) and the resource (function), and contrasts with the sibling 'bsl_callers' by specifying 'outgoing calls'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose is inherently clear from the name and description, but it does not explicitly instruct when to use this tool over 'bsl_callers' or other siblings. The distinction is implied rather than stated, which leaves some ambiguity for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bsl_callersA

Кто вызывает функцию (incoming calls). full_name: 'ОбщийМодуль.МойМодуль.ИмяФункции'.

ParametersJSON Schema
NameRequiredDescriptionDefault
full_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only states the tool's purpose and gives a parameter example, with no mention of side effects, read-only nature, performance, or prerequisites. For a query tool, this is a notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that includes both the purpose and the parameter format. No wasted words, and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a single parameter, an output schema (which covers return values), and a straightforward purpose. The description provides the essential parameter format. However, it does not mention any prerequisites (e.g., indexing via bsl_reindex) or caveats, but for a simple query tool this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It provides a concrete example format for full_name ('ОбщийМодуль.МойМодуль.ИмяФункции'), which clarifies the expected structure beyond the bare schema. This adds meaningful guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear purpose: finding who calls a function (incoming calls). The example format for full_name adds specificity. The tool name and description implicitly differentiate it from bsl_callees (outgoing calls).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for finding callers, contrasting with bsl_callees for callees, but does not explicitly state when to use this tool over alternatives. The context is clear enough for an agent to infer, but a direct mention would strengthen it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bsl_complexityA

Сложность методов модуля (когнитивная + цикломатическая). Метрика ревьюеру. module_full_name: 'ОбщийМодуль.МойМодуль'; function (опц.) — только этот метод.

ParametersJSON Schema
NameRequiredDescriptionDefault
functionNo
module_full_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavior. It explains the metrics computed and the filtering behavior, but does not explicitly state that it is read-only or describe error handling. The note 'Метрика ревьюеру' implies a read-only analysis role, but this is not explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with the purpose stated in the first sentence and parameter guidance in the second. The structure is clear and front-loaded, avoiding unnecessary verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately covers the required and optional parameters, and the output schema exists to define the return value. For a focused analysis tool, this is sufficient for an agent to call it correctly, though it could mention edge cases like non-existent module names.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaning to both parameters: it provides an example format for module_full_name ('ОбщийМодуль.МойМодуль') and clarifies that function is optional and restricts the analysis to a single method. This compensates for the 0% schema description coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool computes cognitive and cyclomatic complexity for module methods, a specific metric for reviewers. This distinguishes it from sibling tools like bsl_callers and bsl_references which focus on call graphs and definitions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage hints by explaining the module_full_name format and the optional function filter, but does not explicitly compare to alternatives or state when to prefer this tool over siblings. It implies usage for complexity analysis but lacks explicit guidance on when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bsl_definitionB

Где объявлен метод. full_name: 'ОбщийМодуль.МойМодуль.ИмяФункции'.

ParametersJSON Schema
NameRequiredDescriptionDefault
full_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure and delivers almost none. It says nothing about whether the lookup is read-only, how it resolves ambiguous or missing symbols, or what scope (workspace vs. index) is searched. An output schema exists, which mitigates the return-value gap slightly, but the operational behavior is undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two terse sentences: the purpose first, then the parameter format. No filler, and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter lookup with an output schema, the description plus schema is minimally sufficient to invoke the tool. It falls short on routing guidance among five similarly named BSL siblings, which is the main way an agent would mis-select this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% — the schema only labels the field 'Full Name' with no format detail — so the description's concrete example, 'ОбщийМодуль.МойМодуль.ИмяФункции', is the sole source of meaning for how full_name must be composed. That is genuinely valuable, though it covers only the dotted-path form and not edge cases like nested or exported methods.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific lookup task — locating where a method is declared — which is a clear verb+resource and implicitly distinct from siblings like bsl_references (usages) and bsl_callers (call sites). It does not, however, name any sibling explicitly, so differentiation is left to inference from the tool names alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus bsl_references, bsl_callers, or bsl_callees, all of which involve related BSL symbol queries. The agent must guess from the tool name whether this returns a declaration site or a usage site.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bsl_diagnosticsA

Диагностики кода. Укажите РОВНО ОДИН адрес: 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 (без тёплого индекса) со своей очередью — навигационный семафор тут не нужен, проверка кода не конкурирует за граф.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeNo
pathNo
textNo
min_severityNo
module_full_nameNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so thoroughly: it discloses default severity filtering, suppressed diagnostics summary, output shape, special cases for code/min_severity, and execution queue behavior. It also explains that checks are per-file without configuration context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is densely informative and well structured, with addressing modes first and behavior details second. Every sentence adds useful operational or filtering information, and the formatting keeps it scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema and no annotations, the description fully covers input constraints, default behavior, output structure, filtering options, and performance-related context. It is complete enough for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage, but the tool description compensates by explaining each addressing mode: module_full_name format, path scope, text snippet requirements, and the meaning of code and min_severity filters. This makes the parameters significantly clearer than the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as code diagnostics ('Диагностики кода') and explains it lints 1C code with different input modes. It is clearly distinct from sibling navigation, complexity, and reindex tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: exactly one of module_full_name, path, or text must be supplied, and it explains default severity behavior and per-file scope. It does not explicitly name sibling alternatives, but the context is strong enough to guide selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bsl_referencesC

Где используется метод. full_name: 'ОбщийМодуль.МойМодуль.ИмяФункции'.

ParametersJSON Schema
NameRequiredDescriptionDefault
full_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it delivers almost nothing: no indication of search scope (project-wide vs. file), whether results depend on an index, whether it is read-only, or how many references are returned. Only the output schema hints at results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the purpose front-loaded and no filler. It is terse rather than bloated, though the extreme brevity borders on under-specification for a lookup tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. For a 1-parameter read tool the description is minimally viable, but with no annotations it should say more about scope and indexing prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does provide a concrete format example ('ОбщийМодуль.МойМодуль.ИмяФункции') that the schema lacks. However, it gives only a single example with no explanation of the dotted-path convention or edge cases, so the compensation is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific purpose — finding where a BSL method is used — with the resource (method) clearly identifiable. It does not differentiate from the near-synonym sibling bsl_callers, which an agent would need to distinguish (references vs. callers), so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus bsl_callers, bsl_definition, or bsl_callees, and no prerequisites (e.g. whether the project must be indexed). Usage context is only implied by the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bsl_reindexA

Полный реиндекс корпуса (после массовых изменений конфигурации). Точечные правки модулей подхватываются автоматически — это для крупных изменений.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. The description only says it performs a full reindex and is intended for large changes. It does not disclose potential side effects (e.g., whether it overwrites existing indexes, how long it takes, whether it requires special permissions, or whether it is safe to run concurrently). For a mutation operation, this is a significant transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, with the primary purpose front-loaded in the first sentence. The second sentence adds a useful clarification about when not to use it. No fluff or redundant phrasing. It could be slightly more structured (e.g., a bulleted list) but is efficient as-is.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, no-output-schema tool, the description adequately explains what it does and when to use it. However, it omits details about the outcome or effects of the reindex (e.g., whether it returns a success/failure status, whether it blocks other operations, or any post-condition). Given that it is a mutation tool, some note about its runtime behavior or reversibility would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty with 100% coverage by definition. Per the rubric, a zero-parameter tool receives a baseline of 4. The description adds no parameter-specific information (there is none to add) but also does not need to. It correctly focuses on the action and its intended use case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action (full reindex) on a specific resource (corpus) and gives the condition under which it applies (after mass configuration changes). This distinguishes it from the sibling tools, which all focus on analysis (callers, callees, definitions, references, diagnostics, complexity) rather than maintenance. The verb 'reindex' and resource 'corpus' are explicit and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: use for large configuration changes, not for small module edits, which are handled automatically. It doesn't name alternative tools explicitly, but it gives a practical decision rule (mass vs. point changes). This is more specific than just 'when to use' and helps an agent avoid unnecessary reindexing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedbsl_callees
    • First observedbsl_callers
    • First observedbsl_complexity
    • First observedbsl_definition
    • First observedbsl_diagnostics
    • First observedbsl_references
    • First observedbsl_reindex

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation4/5

Most tools target clearly distinct aspects: complexity, definition, callees, callers, diagnostics, and reindex. However, bsl_references ('where the method is used') and bsl_callers ('who calls the function') could be confused as overlapping in purpose, even though callers is more specific to incoming calls.

Naming Consistency5/5

All tool names use a consistent bsl_ prefix followed by a single descriptive concept in lowercase snake_case (e.g., bsl_complexity, bsl_definition, bsl_callers). The pattern is predictable and uniform across the set.

Tool Count5/5

Seven tools is well-scoped for a language server focused on navigation, call analysis, diagnostics, and indexing. Each tool earns its place without redundancy or excessive breadth.

Completeness4/5

The surface covers core navigation (definition, references), call hierarchy (callers/callees), complexity, diagnostics, and reindexing. Minor gaps exist, such as direct module content retrieval or symbol search, but these are not critical for the stated purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI clients to perform local code search, indexing, and analysis across Java, JavaScript/TypeScript, .NET/C#, and Python projects through the MCP protocol.
    1
    Apache 2.0
  • F
    license
    Not graded
    quality
    A
    maintenance
    MCP server that validates AI-generated 1C:Enterprise (BSL) code against the real platform API. Catches unknown enum values, wrong argument counts, and missing type members by parsing the platform syntax-helper (shcntx_ru.hbk) — independent Rust implementation with built-in expression validator.
    28
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Rust-native code index MCP server with first-class 1C:Enterprise (BSL) support. Static binary, no runtime — 25 MCP tools (18 universal + 7 BSL-specific), tree-sitter AST for 10 languages, federation across multiple repos.
    147
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    MCP server for searching and analyzing 1C enterprise metadata and BSL code using a SQLite backend. Enables querying configuration structure, code routines, and performing compliance checks via natural language.
    -