MCP-сервер для доступа к документации API платформы 1С:Предприятие
Python-порт mcp-bsl-platform-context (Kotlin/Spring Boot).
- Три режима поиска: keyword (нечёткий), semantic (embeddings + Qdrant), hybrid (оба + RRF-слияние + reranker)
- Детальная информация о типах, методах, свойствах, конструкторах платформы 1С
- Навигация по объектной модели платформы
- Документация по строгой типизации BSL и рекомендации по стилю кода
- Два источника данных: прямое чтение HBK файлов или pre-exported JSON
- Три транспорта: STDIO (для Claude Desktop, Cursor), SSE и Streamable HTTP
- Мультиверсионность: автоматическое обнаружение версий платформы с выбором ближайшей
- YAML-конфигурация с поддержкой переменных окружения и CLI-аргументов
- Двуязычность: русские и английские имена API, поиск регистронезависимый
| Инструмент | Описание | Параметры |
|---|---|---|
search |
Поиск по API платформы 1С. Поддерживает keyword, semantic и hybrid режимы. Используйте термины 1С (русские или английские) для лучших результатов | query (строка поиска), mode? (keyword/semantic/hybrid), type? (method/property/type), limit? (1–50, по умолчанию 10) |
info |
Детальная информация о конкретном элементе API по точному имени | name (точное имя, например НайтиПоСсылке), type (method/property/type) |
get_member |
Получить информацию о методе или свойстве конкретного типа | type_name (имя типа), member_name (имя метода/свойства) |
get_members |
Полный список методов и свойств типа | type_name (имя типа, например ТаблицаЗначений) |
get_constructors |
Сигнатуры конструкторов для создания экземпляров типа | type_name (имя типа) |
get_platform_info |
Информация о текущей версии платформы и список доступных версий | — |
| Инструмент | Описание | Параметры |
|---|---|---|
get_coding_guideline |
Рекомендации по стилю кода BSL (1С:Предприятие) | — |
get_strict_typing_info |
Документация по строгой типизации BSL. Используйте topic='topics' для списка тем |
topic (название темы или topics) |
search_strict_typing |
Текстовый поиск по документации строгой типизации с контекстом | query (поисковый запрос) |
Инструмент search поддерживает три режима (параметр mode, по умолчанию из конфигурации):
| Режим | Движок | Описание |
|---|---|---|
keyword |
SimpleSearchEngine |
4-стратегийный поиск: точное совпадение, префикс, составные имена, порядок слов |
semantic |
SemanticSearchEngine |
Векторный поиск: embedding запроса → ANN в Qdrant → опциональный cross-encoder rerank |
hybrid |
HybridSearchEngine |
Keyword + semantic параллельно → RRF-слияние (k=60) → rerank |
RAG-пайплайн: DocumentBuilder → EmbeddingProvider → Qdrant embedded → Reranker
Модели по умолчанию:
- Embedder:
ai-forever/ru-en-RoSBERTa - Reranker:
DiTy/cross-encoder-russian-msmarco
Провайдеры: local (sentence-transformers) или openai-compatible (любой API в формате OpenAI)
pip install -e . # Базовая установка (keyword search)
pip install -e ".[dev]" # + pytest для разработки
pip install -e ".[local]" # + sentence-transformers, torch (semantic/hybrid search)- Python 3.10+
- fastmcp >= 2.0
- beautifulsoup4 >= 4.12
- lxml >= 5.0
- click >= 8.1
- PyYAML >= 6.0
Скопируйте config.example.yml в config.yml и настройте под своё окружение:
cp config.example.yml config.yml
mcp-bsl-context -c config.ymlПриоритет конфигурации: YAML < переменные окружения (MCP_BSL_*) < CLI-аргументы.
Основные секции: server, platform, search, embeddings, reranker, storage, index, docs.
--config, -c Путь к YAML-файлу конфигурации
--platform-path, -p Путь к каталогу установки 1С
--platform-version Предпочтительная версия платформы (e.g., 8.3.20)
--mode, -m Транспорт: stdio (по умолчанию), sse или streamable-http
--port Порт для HTTP-сервера (по умолчанию: 8080)
--data-source Источник данных: hbk или json
--json-path Путь к каталогу с JSON-файлами
--verbose, -v Включить отладочное логирование
| CLI-аргумент | Переменная окружения | По умолчанию |
|---|---|---|
--platform-path |
MCP_BSL_PLATFORM_PATH |
(обязателен для hbk) |
--platform-version |
MCP_BSL_PLATFORM_VERSION |
null (авто — последняя) |
--mode |
MCP_BSL_MODE |
stdio |
--port |
MCP_BSL_PORT |
8080 |
--data-source |
MCP_BSL_DATA_SOURCE |
hbk |
--json-path |
MCP_BSL_JSON_PATH |
— |
--verbose |
MCP_BSL_VERBOSE |
false |
--host |
MCP_BSL_HOST |
127.0.0.1 |
| — | MCP_BSL_DOCS_STRICT_TYPES_PATH |
null (встроенный) |
| — | MCP_BSL_DOCS_GUIDELINE_PATH |
null (встроенный) |
mcp-bsl-context -c config.yml # Полная конфигурация из YAML
mcp-bsl-context -c config.yml -p /opt/1cv8/x86_64 # YAML + CLI overridemcp-bsl-context -p /opt/1cv8/x86_64 # Автоопределение последней версии
mcp-bsl-context -p /opt/1cv8/x86_64 --platform-version 8.3.20 # Ближайшая к 8.3.20
mcp-bsl-context -p /path -m streamable-http --port 8080 # Streamable HTTP транспорт
mcp-bsl-context -p /path --data-source json --json-path /path # JSON источникДобавьте в claude_desktop_config.json:
{
"mcpServers": {
"bsl-context": {
"command": "python",
"args": ["-m", "mcp_bsl_context", "-p", "/opt/1cv8/x86_64/8.3.25.1257"]
}
}
}Добавьте в .cursor/mcp.json:
{
"mcpServers": {
"bsl-context": {
"command": "python",
"args": ["-m", "mcp_bsl_context", "-p", "C:\\Program Files\\1cv8\\8.3.25.1257"]
}
}
}Укажите путь к родительскому каталогу, и сервер автоматически найдёт все установленные версии:
# Linux: /opt/1cv8/x86_64 содержит 8.3.22.2838/, 8.3.25.1257/, ...
mcp-bsl-context -p /opt/1cv8/x86_64
# Выбрать конкретную версию (будет найдена ближайшая доступная)
mcp-bsl-context -p /opt/1cv8/x86_64 --platform-version 8.3.20Streamable HTTP — актуальный HTTP-транспорт в спецификации MCP, заменяющий устаревший SSE. Основные отличия:
- Единый эндпоинт
/mcpвместо двух (/sse+/messages) — проще настройка и проксирование - Stateless-режим — каждый запрос самодостаточен, не требуется держать долгоживущее SSE-соединение
- Лучше для production — корректно работает за reverse proxy, load balancer, в Kubernetes
mcp-bsl-context -p /opt/1cv8/x86_64/8.3.25.1257 -m streamable-http --port 8080Подключение клиента:
{
"mcpServers": {
"bsl-context": {
"url": "http://localhost:8080/mcp"
}
}
}Примечание: SSE-режим (
-m sse) по-прежнему поддерживается для обратной совместимости.
В docker-compose.yml нужно указать путь к каталогу установки платформы 1С, в котором находится файл shcntx_ru.hbk.
volumes:
# Linux:
- /opt/1cv8/x86_64/8.3.25.1257:/data/platform:ro
# Windows (Docker Desktop):
# - "C:/Program Files/1cv8/8.3.25.1257:/data/platform:ro"docker compose up -d # CPU + API providers
docker compose --profile gpu up -d # GPU + локальные модели
docker compose --profile json up -d # JSON data sourcedocker build -t mcp-bsl-context .
# HBK-данные
docker run -d \
-v /opt/1cv8/x86_64/8.3.25.1257:/data/platform:ro \
-p 8080:8080 \
mcp-bsl-context
# JSON-данные
docker run -d \
-e MCP_BSL_DATA_SOURCE=json \
-v ./json-data:/data/json:ro \
-p 8080:8080 \
mcp-bsl-contextdocker inspect --format='{{.State.Health.Status}}' mcp-bsl-contextmcp_bsl_context/
├── config.py # AppConfig — YAML + env + CLI merge
├── domain/ # Доменный слой (все dataclasses frozen)
│ ├── entities.py # Definition, MethodDefinition, PropertyDefinition, PlatformTypeDefinition
│ ├── enums.py # ApiType (METHOD, PROPERTY, TYPE, CONSTRUCTOR)
│ ├── exceptions.py # Иерархия исключений
│ ├── value_objects.py # SearchQuery, SearchOptions, PlatformVersion
│ ├── services.py # ContextSearchService
│ └── docs_service.py # DocsInfoService (строгая типизация, guideline)
│
├── infrastructure/
│ ├── hbk/ # Парсер бинарного формата HBK
│ │ ├── container_reader.py # Бинарный контейнер
│ │ ├── content_reader.py # ZIP-распаковка, TOC + FileStorage
│ │ ├── context_reader.py # Оркестратор чтения
│ │ ├── pages_visitor.py # Visitor: обход дерева страниц
│ │ ├── toc/ # TOC: токенизатор, парсер, дерево
│ │ └── parsers/ # HTML-парсеры страниц (BeautifulSoup)
│ │
│ ├── json_loader/ # Альтернативный источник: JSON
│ ├── search/ # Поисковые движки
│ │ ├── indexes.py # HashIndex, StartWithIndex
│ │ ├── strategies.py # 4 стратегии keyword-поиска
│ │ ├── engine.py # SimpleSearchEngine (keyword)
│ │ ├── semantic_engine.py # SemanticSearchEngine (Qdrant + embeddings)
│ │ └── hybrid_engine.py # HybridSearchEngine (RRF + rerank)
│ │
│ ├── embeddings/ # ML-модели
│ │ ├── provider.py # EmbeddingProvider (local/API)
│ │ ├── reranker.py # Reranker (cross-encoder, local/API)
│ │ └── document_builder.py # Entities → embeddable text + Qdrant payload
│ │
│ └── storage/ # Хранилище и репозиторий
│ ├── storage.py # PlatformContextStorage (thread-safe, lazy)
│ ├── repository.py # PlatformRepository (фасад)
│ ├── loader.py # PlatformContextLoader
│ ├── mapper.py # Маппинг сущностей
│ └── version_discovery.py # VersionDiscovery (мультиверсионность)
│
├── presentation/
│ └── formatter.py # Markdown-форматтер для MCP-ответов
│
├── docinfo/ # Встроенная документация
│ ├── strict-types.md # Строгая типизация BSL
│ └── guideline.md # Рекомендации по стилю кода
│
├── server.py # FastMCP сервер (9 инструментов)
└── __main__.py # CLI (click) + YAML config
4 стратегии с приоритетами:
- CompoundTypeSearch — составные имена типов ("Справочник Объект" → "СправочникОбъект")
- TypeMemberSearch — паттерн "Тип.Член" ("ТаблицаЗначений Добавить")
- RegularSearch — прямой lookup по индексам (точное совпадение + префикс)
- WordOrderSearch — поиск по вхождению отдельных слов
- Embedding запроса через
ai-forever/ru-en-RoSBERTa(или API-провайдер) - ANN-поиск в Qdrant embedded (in-process, данные на диске)
- Reranking результатов cross-encoder (
DiTy/cross-encoder-russian-msmarco) - Ленивая инициализация: модели загружаются при первом semantic/hybrid запросе
При использовании этого MCP-сервера рекомендуется:
-
Начинайте с
searchдля нахождения нужных элементов API. Используйте конкретные термины 1С, а не общие описания. -
Уточняйте через
info— после нахождения нужного элемента получите полную документацию по точному имени. -
Навигация по типам: используйте
get_membersдля обзора всех методов/свойств типа, затемget_memberдля конкретного. -
Конструкторы: если нужно создать объект, используйте
get_constructorsдля получения сигнатур. -
Строгая типизация: для вопросов о типизации BSL используйте
get_strict_typing_info(сначалаtopic='topics'для списка тем). -
Стиль кода:
get_coding_guidelineсодержит полные рекомендации по написанию кода 1С. -
Режимы поиска:
keyword— быстрый, для точных имён API (НайтиПоСсылке, ValueTable)semantic— для запросов на естественном языке ("как добавить строку в таблицу")hybrid— лучшее качество, комбинирует оба подхода
-
Версии платформы:
get_platform_infoпокажет текущую версию и доступные.
pip install -e ".[dev]"
pytest -v # Все тесты (306)
pytest -v tests/test_search_engine.py # Один модуль
pytest -v tests/test_search_engine.py::test_name # Один тестСервер читает файл shcntx_ru.hbk из каталога установки платформы 1С:Предприятие. Это бинарный контейнер, содержащий:
- PackBlock — ZIP с оглавлением в bracket-формате
- FileStorage — ZIP с HTML-страницами документации
Поддерживаются версии HBK до 8.3.27+ включительно (multi-page data chains, изменённые TOC-коды языков, CSS-классы V8SH_heading/V8SH_chapter).
Альтернативно можно использовать pre-exported JSON (через platform-context-exporter).
- alkoleft/mcp-bsl-platform-context — оригинальный Kotlin-проект
- DitriXNew/mcp-bsl-platform-context — развитие оригинального проекта
- Model Context Protocol — спецификация MCP
- FastMCP — Python MCP-фреймворк
MIT