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С в формате CR-выгрузки (каталог src/cf).

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

  • Java 17+ или готовый бандл с 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"

Удобный пультик к службе (лампочка статуса + старт/стоп/переиндекс) — bsl-ls-tray.exe.

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

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 мин), дальше — мгновенно. Диагностики доступны сразу.

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

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

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

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

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

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

Методы

Инструмент

Что делает

Вход

Кому полезно

bsl_diagnostics

Проверка кода: ошибки, стиль, устаревшие конструкции. Блокирующий гейт «нельзя сдавать с ошибками». Работает без индекса, ~5–8 c.

module_full_name (Тип.Модуль/форма) или path (каталог/файл вне корпуса)

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_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"...\Ext\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}.

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

Поведение

  • Первый вызов навигации после старта ждёт индексацию (~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_definitionC

Где объявлен символ. 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 present, so the description carries full responsibility. It only states the purpose and an example input, but does not disclose return format, side effects, or error behavior. For a likely read-only operation, this is insufficient.

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 extremely brief—one sentence and an example—which is efficient and front-loaded. However, it may be too sparse given the lack of other information.

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?

The tool has only one parameter and likely a simple output, but without seeing the output schema, the description leaves unclear what the agent will receive. There is no mention of what happens if the symbol is not found, and no details on the returned location structure. Given the availability of an output schema (per context), this may be adequate, but the description alone is incomplete.

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 description gives a concrete example for full_name ('ОбщийМодуль.МойМодуль.ИмяФункции'), which clarifies the expected format. Since schema coverage is 0%, this example is valuable, but it is not a formal description and does not cover edge cases.

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 'Где объявлен символ' (where the symbol is declared), which clearly identifies the tool's function as locating a declaration. It also provides an example format for the full_name parameter. However, it doesn't explicitly differentiate from sibling tools like bsl_references, which might also find related locations.

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?

No guidance is provided about when to use this tool versus alternatives like bsl_callers, bsl_callees, or bsl_references. The description does not mention any conditions or exclusions.

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 must carry the full burden of behavioral disclosure. It only states the purpose and gives an input example, but does not describe the output format, side effects, or any access requirements. Since this appears to be a read-only lookup, some mention of return structure would be expected.

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 a single, efficient sentence that conveys the core purpose and an example. It avoids fluff and is appropriately front-loaded. It could be slightly more structured, but it is concise and to the point.

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 complexity of the tool and the presence of siblings, the description is incomplete. It does not explain when to use this tool vs alternatives, nor does it describe the output even though an output schema exists. The lack of behavioral context makes it hard for an agent to fully anticipate the result.

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 schema has 0% description coverage, so the description is the only source for parameter meaning. It provides a concrete example format (CommonModule.MyModule.FunctionName), which clarifies the expected structure. However, it does not explicitly define what 'full_name' encompasses beyond the example, leaving some ambiguity.

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 the tool finds where a symbol is used, which is a clear verb+resource. It gives an example of the input format, helping distinguish it from callers/callees that focus on call relationships. However, it doesn't explicitly name the sibling it is not, so it's slightly less specific than the ideal.

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 alternatives like bsl_callers or bsl_callees. The description does not mention any exclusions or contexts where it is more appropriate, leaving the agent to infer the distinction.

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

Disambiguation5/5

Every tool targets a distinct language-server operation: incoming calls, outgoing calls, declaration lookup, usage lookup, diagnostics, complexity metrics, and index rebuilding. The inverse pairs callers/callees and definition/references are clearly separated by their descriptions, so an agent is unlikely to confuse them.

Naming Consistency4/5

All tools share the consistent bsl_ prefix and snake_case convention, and most are noun-style operations such as bsl_callers, bsl_definition, and bsl_diagnostics. The main deviation is bsl_reindex, which reads as an imperative action rather than a noun, but the overall pattern remains predictable.

Tool Count5/5

Seven tools is well-scoped for a BSL code-intelligence server: four navigation tools, two code-analysis tools, and one index-maintenance command. Each tool earns its place, and the set is neither too thin nor overloaded.

Completeness4/5

The toolset covers the main analysis workflow: callers/callees for call-graph navigation, definition/references for symbol lookup, diagnostics for linting, complexity for maintainability review, and reindex for keeping the index fresh after large changes. A direct symbol-search or module-outline tool is missing, but the complexity tool can enumerate module methods, so the gap is minor and workaroundable.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    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.
    24
    -
  • 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.
    126
    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.
    -