bit-1c-help
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@bit-1c-helpпокажи, как работать с периодическими регистрами"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP со справкой по платформе 1С
Локальный MCP-сервер для поиска по справке платформы 1С. Сервер не содержит саму справку: положите локальную выгрузку документации в kb/ или укажите путь через BIT_1C_HELP_ROOT.
Поддерживаемые форматы для индексации: .md, .mdx, .txt, .html, .htm, .xml, .bsl.
Запуск
У сервера два входа с одним и тем же набором инструментов: локальный (stdio) и сетевой (HTTP).
Отвечают они одинаково — это проверяется дифференциальным прогоном npm run test:diff-entries.
Локальный вход (stdio)
Так сервер запускают MCP-клиенты на машине разработчика:
npm run startСетевой вход (HTTP)
Обслуживает POST /mcp по протоколу streamable HTTP без сессий:
$env:MCP_PORT = "8770"; node .\src\entry\http.jsВход слушает только 127.0.0.1 — это не настраивается. Наружу сервис выставляет nginx площадки,
и он же отвечает за TLS и доступ.
Переменные окружения:
Переменная | Обязательна | Назначение |
| да | Порт на |
| нет | Разрешённые значения заголовка |
| нет | Дополнительные разрешённые значения заголовка |
| нет |
|
| нет | Имя жильца площадки; попадает в поле |
Переменные справки (BIT_1C_HELP_ROOT, BIT_1C_HELP_INDEX_ROOT, BIT_1C_HELP_LOG_PATH) работают
одинаково на обоих входах. Кроме них:
Переменная | Назначение |
| Сколько индексов держать в памяти процесса одновременно, по умолчанию 3. Корневой индекс закреплён прогревом и не вытесняется. |
| Другой путь к |
| Предел размера индексируемого файла, по умолчанию 2 000 000. |
Состояние службы: /health и /status
У сетевого входа, кроме /mcp, есть два маршрута только на чтение. Оба проходят те же проверки
Host и Origin, что и /mcp, — исключений нет ни для одного из них.
GET /health — машиночитаемое состояние, оно же критерий приёмки выкладки:
{
"status": "ok",
"service": "bit-1c-help",
"product": "bit-1c-help",
"version": "0.5.0",
"gitCommit": "f4b4b669e33b11afbf6725268989de7b5626aa91",
"docsVersion": "2026-08-21",
"protocolVersions": ["2025-11-25", "2025-06-18", "2025-03-26"],
"sources": [{ "source": "Platform/8.3.27.1989", "documents": 25541 }],
"index": { "state": "ready", "documents": 81204, "builtAt": "2026-08-21T01:12:27.482Z" },
"uptimeSec": 6,
"problems": []
}versionиgitCommitберутся изBUILD-INFO.json, который кладёт в каталог версии сборочный скрипт. Каталог кода на сервере не git-репозиторий, определить коммит на месте нечем — его приносят с собой. В клоне разработчика этого файла нет: тогда версия берётся изpackage.json, а коммит — из.git.docsVersion— содержимоеKB-VERSION.txtв корне справки, его пишет сборщик артефакта справки.sources[].documents— число файлов во всём поддереве раздела.index.state—ready,warmingилиbuilding, см. ниже.problems— причины, по которымstatusсталdegraded. Абсолютных путей в них нет намеренно: путь выкладки может выдать наружу имя учётной записи, поэтому подробности с путями уходят только в локальный журнал.
Служба не падает ни при какой беде со справкой или индексом: она поднимается и отвечает
degraded со списком причин. Падение недопустимо — диспетчер служб перезапускал бы процесс по
кругу, и в журнале оказалась бы каша вместо диагноза.
Три состояния индекса.
| Что значит |
| Индекс лежит в памяти процесса, поиск ответит сразу. |
| Снимок индекса на диске исправен, но в память ещё не поднят: идёт прогрев после запуска. Запрос, пришедший сейчас, дождётся конца загрузки. |
| Пригодного снимка нет вовсе: индекс надо построить командой |
Прогрев запускают оба входа сразу после старта, в фоне, и обслуживанию он не мешает. На реальном
корпусе (294 МБ, 53 588 файлов, 81 204 раздела) /health начинает отвечать через ~1.8 с после
запуска процесса, а ready наступает через ~6 с. Скрипт выкладки обязан опрашивать /health
до готовности, а не один раз сразу после запуска службы: пока идёт прогрев, status честно
равен degraded.
GET /status — та же картина для человека в браузере плюс статистика поиска из журнала: доля
запросов без результатов, частые запросы, задержки p50/p95, распределение по источникам. Страница
показывает, по каким запросам справка не находится, то есть какой источник пора добавить.
Ничем не управляет и ничего не меняет.
Оба маршрута дёшевы намеренно: /health смотрит только в память процесса и в маленький файл
агрегатов рядом со снимком индекса, /status читает ограниченный хвост журнала и запоминает
разбор по времени изменения файла. Разворачивать снимок индекса в обработчике запроса нельзя —
на реальном корпусе это 4.2 с и 2.4 ГБ памяти на один опрос.
Кого не пускает сетевой вход
Сервис доступен по сети внутри машины, поэтому до него может дотянуться страница, открытая в браузере сотрудника. От этого стоят две проверки, и по отдельности ни одна не работает:
Origin. Запрос без этого заголовка проходит: его не шлют ниcurl, ни клиенты MCP. Если заголовок есть — значит, запрос отправил браузер, и значение обязано быть вMCP_ALLOWED_ORIGINS. Список пуст по умолчанию, то есть браузерные запросы не проходят вовсе.Host. При перепривязке DNS страница на чужом домене, чьё имя перепривязано на127.0.0.1, шлёт запрос как одноисточниковый — заголовкаOriginв нём нет, и первая проверка его пропускает. Отличает такой запросHost: там имя атакующего. ПоэтомуHostобязан быть127.0.0.1,localhost(с портом или без) или тем, что перечислено вMCP_ALLOWED_HOSTS.
MCP_ALLOWED_HOSTS нужен, когда nginx площадки передаёт наверх исходный Host клиента
(proxy_set_header Host $host), а не адрес upstream: тогда до сервиса доходит публичное имя, и его
надо разрешить явно. Если nginx оставляет Host от upstream, переменная не нужна.
Значения MCP_ALLOWED_ORIGINS приводятся к виду, в котором источник шлёт браузер: схема, хост и
порт, без пути и завершающего слэша. Запись, на источник не похожую, вход отвергает при запуске с
объяснением, а не молча отвечает 403 на каждый запрос. То же самое — с MCP_ALLOWED_HOSTS:
сравнение с заголовком Host идёт точным совпадением, а не шаблоном, поэтому, например, * по
привычке из настроек CORS не сработает вовсе, и такую запись вход тоже отвергает при запуске.
Внесение источника в MCP_ALLOWED_ORIGINS снимает нашу защиту, но браузерный клиент от этого не
заработает. Заголовков Access-Control-Allow-* сервис не отдаёт и предварительные запросы
OPTIONS не обрабатывает, поэтому браузер отправит запрос, а прочитать ответ не даст. Чтобы
браузерный клиент работал, CORS нужно настраивать отдельно — на nginx площадки либо в самом входе.
Related MCP server: onec-meta-mcp
Воспроизводимый запуск на новой машине
Установите Node.js 20 или новее.
Положите готовый очищенный архив
mcp-docs-*.zipв проект и распакуйте его так, чтобы появился каталогkb/.Если готового архива нет, соберите справку из источников: импортируйте raw HTML в
build/raw, затем выполните очистку вkb.Запустите проверку:
npm run smokeЗапустите MCP-сервер:
npm run startДля Codex укажите BIT_1C_HELP_ROOT на каталог kb. Сырые HTML-исходники держите вне kb, например в build/raw, иначе MCP будет индексировать шумную HTML-разметку.
Пример восстановления из готовых артефактов:
Expand-Archive -Path ".\build\artifacts\mcp-docs-2026-08-04.zip" -DestinationPath "." -Force
Expand-Archive -Path ".\build\artifacts\raw-html-2026-08-04.zip" -DestinationPath "." -ForceПервый архив нужен для работы MCP. Второй нужен только как воспроизводимый raw-слой для повторной очистки.
Как получить локальную справку
Если на машине установлена платформа 1С, в каталоге версии обычно есть индекс синтакс-помощника:
C:\Program Files\1cv8\<версия>\bin\devdocs_ru.binИмпортируйте его в индексируемый Markdown:
npm run import:installedЖурнал изменений установленной платформы (docs\\ru\\V8Update.htm) импортируется
отдельно. Он разбивается на файлы по версиям платформы, чтобы документы не превышали
лимит индексатора:
npm run import:platform-updatesПри необходимости исходный файл и каталог назначения можно указать явно:
node .\scripts\import-platform-updates.js "C:\Program Files\1cv8\8.3.27.1989\docs\ru\V8Update.htm" ".\kb\Platform\8.3.27.1989\PlatformUpdates"Или укажите конкретный файл:
node .\scripts\import-installed-help.js "C:\Program Files\1cv8\8.3.15.1869\bin\devdocs_ru.bin"Это импортирует оглавление встроенной справки: названия объектов, методов, свойств, областей доступности и v8help:// URI. Для полного текста статей нужен экспорт/извлечение содержимого страниц справки из поставки платформы или официальный онлайн-источник.
Для платформы 8.3.27.1989 полный текст страниц синтакс-помощника можно извлечь из shcntx_ru.hbk:
npm run extract:hbk -- "C:\Program Files\1cv8\8.3.27.1989\bin\shcntx_ru.hbk" ".\build\raw\Platform\8.3.27.1989\SyntaxHelperContext"
npm run clean:html-docs -- ".\build\raw\Platform\8.3.27.1989\SyntaxHelperContext" ".\kb\Platform\8.3.27.1989\SyntaxHelperContext"После этого MCP будет индексировать очищенный Markdown из kb/Platform/8.3.27.1989.
Как добавить справку БСП
Документация поставки БСП лежит в каталоге шаблонов конфигураций. По умолчанию это
%APPDATA%\1C\1cv8\tmplts; свой путь смотрите в параметре ConfigurationTemplatesLocation
файла 1cestart.cfg. Например:
%APPDATA%\1C\1cv8\tmplts\1c\SSL\3_1_11_353\ExtFiles\docsимпортируйте HTML-документацию в небольшие фрагменты:
npm run import:ssl-docs -- "$env:APPDATA\1C\1cv8\tmplts\1c\SSL\3_1_11_353\ExtFiles\docs" ".\build\raw\SSL\3_1_11_353"
npm run clean:html-docs -- ".\build\raw\SSL" ".\kb\SSL"Фрагменты будут сохранены как raw HTML в build/raw/SSL, затем очищенный Markdown попадет в kb/SSL и MCP-поиск.
Откуда берётся содержимое kb/
Репозиторий не содержит и не распространяет документацию — ни справку платформы, ни материалы ИТС, ни документацию БСП. Всё это принадлежит фирме «1С» и её партнёрам и распространяется по своим лицензиям. Сервер ищет по тому корпусу, который вы собрали сами из источников, к которым у вас есть законный доступ: установленная платформа, поставка БСП, ваша подписка ИТС.
Импортёры в scripts/ работают только с локальными файлами: .hbk установленной платформы,
V8Update.htm из каталога платформы, HTML-документация из поставки БСП, клоны открытых
репозиториев YAxUnit и Vanessa Automation. Инструментов, выкачивающих контент с сайтов фирмы
«1С», здесь нет намеренно: массовый автоматический обход противоречит условиям использования
ИТС и создаёт лишнюю нагрузку на чужие серверы.
Очистка HTML в слой для поиска
Сырые HTML-исходники можно сохранить отдельным артефактом:
New-Item -ItemType Directory -Force -Path .\build\artifacts
Compress-Archive -Path .\build\raw -DestinationPath .\build\artifacts\raw-html-2026-08-04.zip -CompressionLevel OptimalЭтот архив нужен как воспроизводимый raw-слой. Для качества MCP-поиска лучше держать в kb очищенный слой: убрать скрипты, стили, навигацию, служебные блоки, сохранить заголовки и основной текст в Markdown или компактный HTML.
Очищенный Markdown-слой для MCP можно построить так:
npm run clean:html-docs -- ".\build\raw\SSL" ".\kb\SSL"
npm run clean:html-docs -- ".\build\raw\Platform\8.3.27.1989\SyntaxHelperContext" ".\kb\Platform\8.3.27.1989\SyntaxHelperContext"Конвертер разбирает HTML через DOM, сохраняет source URL, заголовки, anchors,
внутренние ссылки, код и таблицы. Навигация, скрипты, стили и служебная разметка
удаляются. Блоки «Смотри также» помечаются как [SEE_ALSO].
Вместе с Markdown создаётся IMPORT-MANIFEST.json со статистикой пустых документов,
дублирующихся URL, повреждённой кодировки, отсутствующих заголовков и слишком больших
файлов. В MCP-каталог kb кладите именно очищенный слой.
Как добавить справку YAxUnit
Если локально есть репозиторий YAxUnit:
<путь к репозиториям>\bia-technologies\yaxunitимпортируйте Markdown-документацию и BSL-комментарии API:
npm run import:yaxunit-docs -- "<путь к репозиториям>\bia-technologies\yaxunit"Если репозиторий стоит на релизном теге, файлы будут сохранены в каталог версии, например kb/YAxUnit/25.12, и попадут в MCP-поиск. Каталог kb/ игнорируется Git.
Как добавить справку Vanessa Automation
Официальный репозиторий Vanessa Automation:
https://github.com/Pr-Mex/vanessa-automation.gitЕго можно скачать в игнорируемый рабочий каталог:
git clone --depth 1 --filter=blob:none --sparse https://github.com/Pr-Mex/vanessa-automation.git .\build\external\vanessa-automation
git -C .\build\external\vanessa-automation sparse-checkout set docs features examples training VanessaAutomationЕсли репозиторий уже скачан локально, импортируйте Markdown-документацию, Gherkin-сценарии и BSL-модули:
npm run import:vanessa-automation-docs -- ".\build\external\vanessa-automation"Если репозиторий стоит на релизном теге, файлы будут сохранены в каталог версии, например kb/VanessaAutomation/1.2.043.23, и попадут в MCP-поиск. Каталог kb/ игнорируется Git.
Подключение к Codex
Добавьте сервер в %USERPROFILE%\.codex\config.toml:
[mcp_servers.onec_platform_help]
command = "node"
args = ["<путь к репозиторию>\\bit-1c-help\\src\\server.js"]
[mcp_servers.onec_platform_help.env]
BIT_1C_HELP_ROOT = "<путь к репозиторию>\\bit-1c-help\\kb"Если справка лежит в другой папке, замените BIT_1C_HELP_ROOT на путь к ней.
Инструменты MCP
search_1c_platform_help— поиск по локальной справке.get_1c_platform_help_document— чтение найденного документа по относительному пути.get_1c_platform_help_section— чтение точного найденного раздела по стабильномуid.reindex_1c_platform_help— инкрементальная переиндексация изменившихся файлов.list_1c_platform_help_sources— список доступных справок для фильтраsource.
Markdown-документы индексируются по разделам. Поиск ранжирует заголовок, иерархию раздела,
путь и основной текст отдельно, а в результате возвращает заголовок найденного раздела,
breadcrumbs, исходный путь и релевантный фрагмент.
Индексы сохраняются в build/index в сжатом бинарном формате. Путь можно изменить через
BIT_1C_HELP_INDEX_ROOT. Для каждого значения root/source создаётся отдельный индекс.
Готовый снимок поднимается в память как есть, без обхода каталога справки: на реальном корпусе
обход стоит 24 с против 5 с на загрузку снимка. Обход остаётся там, где его просят явно, —
npm run build:index и инструмент reindex_1c_platform_help. При повторной индексации неизменённые файлы переиспользуются
по размеру и времени изменения; если метаданные изменились, содержимое дополнительно
сравнивается по SHA-256.
Для диагностики ранжирования передайте "explain": true в
search_1c_platform_help. Инструмент вернёт вклад заголовка, breadcrumbs, пути,
основного текста и специальных бонусов в итоговую оценку.
Если source не указан, сервер распознаёт характерные вопросы о платформе,
стандартах, методиках, БСП, YAxUnit и Vanessa Automation и лениво ищет в подходящих
источниках. Для остальных запросов сохраняется поиск по всему корпусу. В результатах
автоматически маршрутизированного поиска возвращаются source, полный путь и стабильный
id раздела.
reindex_1c_platform_help выполняет инкрементальную переиндексацию и возвращает статистику
по обновлённым, переиспользованным, удалённым, слишком большим и ошибочным файлам.
Полную пересборку он НЕ делает: на "force": true инструмент отвечает отказом и называет
команду сборки. Пересборка всего корпуса не укладывается в таймаут запроса (60 с) — клиент
отвалится, а процесс продолжит жечь память и процессор, и остановить его будет нечем. Для
полной пересборки есть npm run build:index (см. «Сборка индекса»).
Логи поиска и статистика
Сервер записывает структурированный JSONL-журнал в build/logs/search.jsonl
относительно каталога самого MCP-проекта, а не текущего рабочего каталога процесса.
В журнал попадают события поиска, индексации и ошибки инструментов. Для поиска
сохраняются запрос, его SHA-256-идентификатор, выбранные источники, термины,
число кандидатов, задержка и первые пять результатов. Тексты документов и сниппеты
не записываются.
Каждая запись содержит serverVersion, полный gitCommit и indexFormatVersion.
При запуске записывается событие server_start, поэтому журнал можно однозначно
связать с версией сервера и исходным коммитом.
Настройки:
BIT_1C_HELP_LOG_PATH— другой путь к JSONL-журналу;BIT_1C_HELP_LOG_QUERIES=true— сохранять текст запросов для отладки; по умолчанию записывается только хеш;BIT_1C_HELP_GIT_COMMIT— явно заданный commit SHA для сборки вне Git-репозитория;BIT_1C_HELP_LOG_MAX_BYTES— размер файла перед ротацией, по умолчанию 20 МБ;BIT_1C_HELP_LOG_MAX_FILES— максимальное число файлов ротации, по умолчанию 5.
Сводный отчёт:
npm run stats:searchМожно передать путь к журналу и порог слабого результата:
npm run stats:search -- ".\build\logs\search.jsonl" 20Отчёт содержит число и частоту запросов без результатов, слабые результаты, задержки p50/p95, среднее число кандидатов, популярные запросы и распределение по источникам.
В search_1c_platform_help, get_1c_platform_help_document и reindex_1c_platform_help можно передать source, чтобы ограничить область поиска конкретной справкой:
{
"query": "ОбработкаЗаполнения",
"source": "Platform/8.3.27.1989",
"limit": 5
}Большие документы читайте постранично через get_1c_platform_help_document: передайте offset: 0 и maxChars, затем используйте значение nextOffset из ответа как offset следующего вызова. Максимальный размер одной страницы — 30000 символов.
list_1c_platform_help_sources показывает не только путь, но и подсказку useWhen. Основные источники:
source | Когда применять |
| Синтакс-помощник: объекты встроенного языка, методы, свойства, события, области доступности. |
| Синтакс-помощник платформы 8.3.15: объекты встроенного языка, методы, свойства, события, области доступности. |
| Локальная документация БСП из поставки 3.1.11.353. |
| Vanessa Automation: Gherkin, шаги, примеры, API. |
| YAxUnit: юнит-тесты, matcher/assert API, структура тестов. |
Сборка индекса
Индекс строится отдельной командой, вне обслуживания запросов:
npm run build:index# только изменившиеся файлы вместо полной пересборки
node .\scripts\build-index.js --incremental
# отдельный индекс на каждый раздел: поиск с фильтром source использует именно их
node .\scripts\build-index.js --root kb --root kb\Platform\8.3.27.1989Почему отдельной командой, а не инструментом MCP: полная пересборка реального корпуса не
укладывается в таймаут запроса (60 с). Поэтому reindex_1c_platform_help переиндексирует только
изменившиеся файлы, а на force: true отвечает отказом и называет эту команду. Выкладка на
сервере строит индекс до запуска службы и дожидается конца.
Индексов несколько, и построить надо каждый. Поиск с фильтром по источнику работает по отдельному индексу этого источника. Одной сборки для всего корпуса не хватает: первый же запрос с фильтром будет строить свой индекс сам. Список корней берут из состава справки, а не задают руками, иначе новый источник молча останется непостроенным.
Служба поднимает в память только корневой индекс (прогрев при старте), индексы источников —
по требованию. В памяти их держится не больше BIT_1C_HELP_INDEX_CACHE_LIMIT (по умолчанию 3,
считая закреплённый корневой), давно не использовавшиеся вытесняются. Предел не декоративный:
на реальном корпусе корневой индекс удерживает 1046 МБ, синтакс-помощник 8.3.27 — ещё 363 МБ,
а источников всего девять.
Проверка
npm testЕдиный прогон node --test: ядро (поиск, ранжирование, чтение разделов, фильтр по источнику),
контракт обоих входов, /health, /status, отказ reindex при force, холодный старт и предел
кеша индексов, а также золотой набор реальных запросов с ожидаемыми документами в выдаче.
Золотой набор пропускается, если в клоне нет kb/. Тот же прогон выполняет GitHub Actions на каждый
push и pull request.
Отдельные проверки:
npm run smoke # локальный прогон через вход stdio поверх настоящего kb/
npm run test:diff-entries # stdio и сетевой вход отвечают одинаково
npm run test:diff-monolith # ответы против прежнего монолита src/server.js
npm run test:source-filter # фильтр по источнику
npm run test:clean-docs # качество очистки справки
npm run test:platform-updates # импорт обновлений платформыtest:diff-monolith сравнивает текущий вход с монолитным src/server.js из истории git.
Ревизия по умолчанию — 12ae917~1; при слиянии со сжатием истории такого коммита не станет, и
тогда её надо задать явно:
$env:MONOLITH_REV = "<ревизия>"; npm run test:diff-monolithСкрипт проверяет наличие ревизии до начала прогона и говорит об этом прямо, а не падает невнятной ошибкой git в середине.
Смоук работающей службы
Тот же smoke.js умеет проверять уже запущенный сетевой сервис по URL — initialize,
tools/list и поисковый запрос с проверкой, что результат непустой:
node .\scripts\smoke.js --url http://127.0.0.1:4101/mcp
node .\scripts\smoke.js --url https://mcp.example.com/bit-1c-help/mcp --query "ОбработкаЗаполнения"Ключи: --query <текст> (по умолчанию «платформа»), --host <значение> — заголовок Host, если
служба за прокси и проверяет его, --timeout <мс>. Ненулевой код возврата при любой неудаче: это
инструмент приёмки, скрипт выкладки смотрит на код, а не на текст. Он же выполняет прогревочный
запрос, чтобы первое обращение после выкладки не досталось живому пользователю.
Манифест сервиса и сборка артефактов
Манифест mcp-service.json в корне репозитория — единственная точка стыка с площадкой, на которой
служба работает. В нём имя службы, порт, точка входа, маршрут, переменные окружения и состав
выкладки (payload). Состав перечислен пофайлово и читается сборочным скриптом по-настоящему:
второго списка в скриптах нет. Значения {DataRoot}, {PublicHost} и {Port} в блоке env
подставляет скрипт выкладки на площадке.
Почему состав пофайловый: в src лежит ssl_3_1_11_353 на 209 МБ, которому на сервере делать
нечего, а в scripts — импортёры справки, нужные только на рабочей машине. На сервере из
scripts нужны ровно три файла: сборка индекса, подсчёт статистики журнала и
смоук для приёмки.
# артефакт кода: чистый npm ci --omit=dev, состав по манифесту, BUILD-INFO.json, zip + SHA-256
powershell -File tools\build-release.ps1
# артефакт справки: kb/ и KB-VERSION.txt внутри, zip + SHA-256
powershell -File tools\build-kb-artifact.ps1Версии двух артефактов независимы: код — semver из package.json, справка — по дате сборки.
node_modules кладётся внутрь артефакта кода: на сервере не выполняется npm install, не нужен
доступ к реестру npm и исключён риск получить набор зависимостей, отличный от протестированного.
Всё, что эти скрипты пишут для Node (BUILD-INFO.json, сводки сборки), пишется в UTF-8 без
BOM. Это не оформление: Set-Content -Encoding UTF8 в Windows PowerShell 5.1 добавляет BOM,
JSON.parse на нём падает, /health уходит в degraded с gitCommit: "unknown" — и приёмка
откатывает исправную выкладку.
Available Tools
5 toolsget_1c_platform_help_documentA
Прочитать документ целиком, постранично (offset + maxChars, продолжать по nextOffset). Брать, когда нужен контекст вокруг найденного или файл целиком. path — из выдачи search_1c_platform_help.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Relative path returned by search_1c_platform_help. | |
| root | No | Optional absolute path to a help directory. Defaults to BIT_1C_HELP_ROOT or ./kb. | |
| offset | No | Zero-based character offset from which to read the document. Use nextOffset from the previous response to continue. | |
| source | No | Optional source subdirectory returned by list_1c_platform_help_sources. When set, path is resolved inside that source. | |
| maxChars | No | Maximum number of characters to return. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Аннотаций нет, поэтому описание само раскрывает поведение: операция является чтением, а не изменением, и требует постраничного прохода через offset/maxChars с продолжением по nextOffset. Это значимая поведенческая деталь. Не описаны возможные ошибки или формат ответа, но для read-only инструмента с полной схемой этого достаточно.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Три коротких предложения без лишней информации: действие, условие использования и источник path. Ключевая суть вынесена вперёд, каждое предложение несёт полезную нагрузку.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
С учётом пяти параметров, отсутствия output-схемы и отсутствия аннотаций описание покрывает главное: что делает, когда применять, откуда брать path и как листать документ. Небольшой пробел — не описан формат ответа и нет явного противопоставления get_1c_platform_help_section, но в целом инструмент можно вызвать корректно.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Входная схема покрывает 100% параметров и уже объясняет path как относительный путь из search_1c_platform_help, offset для продолжения по nextOffset и source для разрешения внутри источника. Описание лишь повторяет связь path с поиском и не добавляет новой семантики сверх схемы, поэтому по калибровке уместен базовый 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Описание начинается с конкретного действия: «Прочитать документ целиком, постранично», и уточняет ресурс (документ справки) и способ чтения через offset + maxChars и nextOffset. Это ясно отделяет инструмент от get_1c_platform_help_section, которая по названию возвращает раздел, а не весь документ. Также указано происхождение path — из выдачи search_1c_platform_help.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Прямо указано условие применения: «когда нужен контекст вокруг найденного или файл целиком». Это даёт агенту понятный сигнал для выбора после поиска. Однако явные альтернативы и случаи, когда использовать get_1c_platform_help_section, не названы, поэтому не 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_1c_platform_help_sectionA
Прочитать точный фрагмент по стабильному id из выдачи search. Предпочтительнее get_1c_platform_help_document, когда нужен ровно найденный раздел без лишнего контекста.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Stable section id returned by search_1c_platform_help. | |
| root | No | Optional absolute path to a help directory. Defaults to BIT_1C_HELP_ROOT or ./kb. | |
| source | No | Optional source subdirectory used for the original search. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The verb 'read' implies a read-only operation, but the description does not disclose return format, error behavior, whether the id must come from a prior search, or what happens if the id is invalid. With no annotations and no output schema, this is a significant gap for a non-trivial tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and the second sentence conveys a helpful routing rule. It earns its place, though the distinction between 'fragment' and 'section' in the second sentence is slightly confusing and could be phrased more crisply.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description should explain what the tool returns, when the id is unavailable, and how root/source affect the lookup. It only covers basic purpose and one sibling alternative. For an operation that depends on an external search result, the context provided is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage for all three parameters, so the description does not need to add much. It only restates that the id comes from the search output, which is already in the schema. No additional meaning beyond the input schema is provided, warranting the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence clearly states a specific verb and resource: 'read the exact fragment by stable id' from the search output. It also names get_1c_platform_help_document and gives a differentiating condition, so an agent can distinguish this tool from its sibling without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says get_1c_platform_help_document is preferable when you need exactly the found section without extra context, giving a conditional routing instruction. However, it does not explicitly cover when not to use this tool or mention the other siblings like search_1c_platform_help, so it is not a full replacement for usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_1c_platform_help_sourcesA
Read-only. Список доступных разделов (source) с их назначением (useWhen). Вызывать перед search с фильтром source, чтобы выбрать нужный раздел.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Optional absolute path to a help directory. Defaults to BIT_1C_HELP_ROOT or ./kb. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; it opens with 'Read-only' and discloses that the result is a list of sections with their intended use. It could mention error/edge-case behavior, but for a simple listing tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, purposeful sentences: the read-only nature is front-loaded, the resource is defined, and the usage context is given. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single optional-parameter listing tool with no output schema, the description explains what is returned, its purpose, and when to call it. The root parameter is already fully documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and fully documents the optional root parameter. The description adds no parameter-level detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('list') and names the exact resource: available help sections (source) with their purpose (useWhen). It clearly positions itself as a directory tool separate from search/document/section retrieval siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to call this tool before search with a source filter, so an agent knows the correct workflow order and how this tool feeds into search_1c_platform_help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reindex_1c_platform_helpA
СЛУЖЕБНЫЙ. Инкрементально обновить индекс каталога справки: переиндексируются только изменившиеся файлы. Обычно не нужен — вызывать только при рассинхроне после обновления или добавления нескольких файлов справки. Полную пересборку этот инструмент НЕ делает: force=true возвращает отказ, потому что пересборка всего корпуса не укладывается в таймаут запроса. Для неё есть отдельная команда, node ./scripts/build-index.js --force, запускаемая вне обслуживания запросов.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Optional absolute path to a help directory. Defaults to BIT_1C_HELP_ROOT or ./kb. | |
| force | No | Not supported: true is refused. A full rebuild does not fit into a request timeout; run node ./scripts/build-index.js --force outside of request serving instead. | |
| source | No | Optional source subdirectory to reindex, for example Platform/8.3.27.1989. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It discloses that the operation is incremental, that force=true is refused (with the reason being a request timeout), and that a full rebuild is intentionally out of scope. It does not explicitly describe side effects or permissions, but it gives a clear behavior for both normal and error cases. This is valuable beyond the schema and enough for a maintenance tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it starts with a service marker and immediately defines the action, then gives use-case guidance and a key limitation. Every sentence adds relevant information, though it could have saved a few words by relying even more on the schema, but no filler exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given it is a service-action tool with 3 optional parameters and no output schema, the description sufficiently covers when, why, and when not to call it, including the external alternative. It does not describe the return type or what a successful call looks like, but that is less critical for a maintenance utility that was explicitly described as rarely needed. It is complete enough for an agent to act correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description provides no additional parameter-level semantics; the parameters are already well-documented (root, source, force) in the schema. The description references some behaviors (like force refusal) but those are already stated in the schema description for 'force'. Thus, the base score 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states a specific verb and resource: 'incrementally update the help index' with a clear definition that only changed files are reindexed. It also distinguishes the tool from the siblings (search, get_document, etc.) and from a full rebuild, so there is no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Excellent guidance: it says 'usually not needed' and specifies the only scenario where it should be called (when the index is out of sync after updating or adding help files). It also tells the user exactly when not to use it and what alternative to use (external command), providing strong when/when-not rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_1c_platform_helpA
Офлайн полнотекстовый поиск по локальной базе знаний 1С:Предприятие. НАЧИНАТЬ ОТСЮДА для вопросов, ответ на которые лежит в документации, а не в коде конкретной конфигурации. Охват: синтакс-помощник платформы (BSL API, объекты/методы/свойства/события; версии 8.3.27.1989 и 8.3.15.1869); документация платформы 8.3.27 (администрирование, кластер, конфигуратор, параметры запуска); стандарты разработки v8std; методики metod8dev (архитектура, производительность, эксплуатация); документация БСП 3.1.11 (3000+ файлов) и БСП из поставки (SSL); VanessaAutomation (Gherkin, шаги); YAxUnit (юнит-тесты, assert/matcher). Query на русском или английском. Фильтр source сужает поиск до раздела (полный список и когда какой брать — в list_1c_platform_help_sources). В отличие от MCP v8std (онлайн v8std.ru): это ЛОКАЛЬНЫЙ офлайн-индекс, покрывает те же стандарты плюс БСП/VA/YAxUnit, работает без сети. Для синтаксиса из ЖИВОЙ запущенной ИБ есть отдельный get_bsl_syntax_help у 1c-mcp-toolkit.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Optional absolute path to a help directory. Defaults to BIT_1C_HELP_ROOT or ./kb. | |
| limit | No | Maximum number of search results. | |
| query | Yes | Search query in Russian or English. | |
| source | No | Optional source subdirectory to search in, for example Platform/8.3.27.1989, SSL/3_1_11_353, VanessaAutomation/1.2.043.23, or YAxUnit/25.12. Call list_1c_platform_help_sources to see what this installation actually has. | |
| explain | No | Include a score breakdown for every result. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It clearly discloses that the operation is an offline/local full-text search, lists the indexed sources and versions, and explains that queries can be in Russian or English. There are no hidden side effects or destructive behaviors implied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average, but almost every sentence earns its place: entry point, coverage, language, filtering, and disambiguation. It is front-loaded with 'НАЧИНАТЬ ОТСЮДА' and organized topically, though it repeats the offline/local idea and re-lists coverage after the initial scope sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no output schema and several siblings, the description covers selection, coverage, and filtering well. It would be more complete if it described the result shape or how search results connect to sibling tools like get_1c_platform_help_document, but the absence of those details does not block correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers all parameters, so the baseline is 3, but the description adds real meaning by explaining that the source filter narrows search to a section and directing the agent to list_1c_platform_help_sources for valid values. It also restates query language support. It does not add much for root, limit, or explain, but those are already self-descriptive in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('search') and resource ('local 1C:Enterprise knowledge base'), then enumerates exactly what it covers: syntax helper, platform docs, v8std, BSP, VanessaAutomation, and YAxUnit. It also sets the expected entry point ('НАЧИНАТЬ ОТСЮДА') and distinguishes the tool from online v8std and live-syntax lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to start here (documentation questions, not configuration code), when to use a different tool (live infobase syntax → get_bsl_syntax_help), and how to narrow scope via the source filter with a pointer to list_1c_platform_help_sources. The offline/online comparison with MCP v8std also helps an agent choose between alternatives.
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.
5 tool updates
v0.5.1- First observed
get_1c_platform_help_document - First observed
get_1c_platform_help_section - First observed
list_1c_platform_help_sources - First observed
reindex_1c_platform_help - First observed
search_1c_platform_help
TDQS
Scored across 5 tools
Each tool has a distinct role: search, read document, read section, list sources, and reindex. The two getters are clearly separated by document-level vs section-level retrieval with explicit guidance on which to prefer.
All tools follow the pattern [verb]_1c_platform_help[_object] with snake_case throughout. Verbs (search, get, get, reindex, list) are consistent and the two get_ tools are differentiated by their object suffixes.
Five tools form a tight, well-scoped set for an offline help retrieval server. There are no redundant tools and nothing feels missing.
The domain is offline 1C help access, and the set covers the full lifecycle: discover sources, search, retrieve documents/sections, and maintain the index. No obvious operational gaps remain for the stated purpose.
Maintenance
Related MCP Connectors
Personal knowledge base MCP server with semantic search, auto-categorization, metadata extraction
MCP server for Russian books search, details, and recommendation candidates.
MCP server for querying Forkast documentation
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceRust-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.109MIT
- FlicenseNot gradedqualityBmaintenanceMCP 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.-
- AlicenseBqualityCmaintenanceLightweight MCP server for 1C.ai integration, enabling queries, code analysis, and documentation search via natural language.82AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceMCP server for RAG-based search over 1C Enterprise configuration documentation, enabling natural language queries to find objects like справочники, документы, and отчеты.MIT