1c-templates-mcp

1c-templates-mcp

MCP server for semantic search of 1C (BSL) code templates with 2262+ community templates, CRUD web interface, and ChromaDB + embeddings for meaning-based search.

Category
Visit Server

README

1c-templates-mcp

MCP-сервер с семантическим поиском по шаблонам кода 1С (BSL). 2262+ шаблонов из сообщества, CRUD веб-интерфейс с Monaco Editor, ChromaDB + embeddings для поиска по смыслу.

<!-- screenshot -->

Возможности

  • Семантический поиск - гибридный (vector + full-text) поиск шаблонов кода на русском языке
  • 6 MCP-инструментов - поиск, просмотр, создание, редактирование, удаление шаблонов
  • Веб-интерфейс - полный CRUD с Monaco Editor и подсветкой BSL-синтаксиса
  • 2262+ шаблонов - предустановленная база шаблонов кода 1С в seed_templates.jsonl
  • Гибкие embeddings - OpenAI-совместимый API или локальная модель SentenceTransformer
  • Docker - готовый docker-compose для быстрого запуска

Установка из готового образа (рекомендуется)

Для обычного использования - без клонирования репозитория и без сборки. Готовый образ публикуется на Docker Hub: desko77/1c-templates-mcp.

Скачайте папку deploy/ (три файла: docker-compose.yml, .env.example, README.md) и запустите:

cd deploy
docker compose up -d              # CPU-режим
docker compose --profile gpu up -d  # GPU-режим (NVIDIA)

Подробная инструкция по настройке и обновлению - в deploy/README.md.

Быстрый старт (сборка из исходников)

Подходит для разработки и контрибуций. Собирает образ локально из текущего состояния репозитория.

git clone https://github.com/Desko77/1c-templates-mcp.git
cd 1c-templates-mcp

# CPU (универсально, без требований к GPU)
docker compose --profile cpu up -d

# ИЛИ GPU (NVIDIA, значительно быстрее индексация + поиск)
docker compose --profile gpu up -d

Сервер доступен:

  • Веб-интерфейс: http://localhost:8004
  • MCP endpoint: http://localhost:8004/mcp (POST, Streamable HTTP)

Разница между профилями:

  • cpu — контейнер template_search_mcp, без GPU-проброса. Первая индексация RoSBERTa на CPU ~5-10 мин. Работает везде.
  • gpu — контейнер template_search_mcp_gpu, проброс NVIDIA GPU через deploy.resources.reservations.devices. Индексация под минуту. Требует nvidia-container-toolkit (см. ниже).

Требования для GPU-профиля

  1. NVIDIA GPU с установленными драйверами (проверка: nvidia-smi на хосте).
  2. nvidia-container-toolkit — пакет для проброса GPU в Docker-контейнеры.
    • Установка: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html
    • На Windows работает через Docker Desktop с WSL2 + установленным nvidia-container-toolkit в WSL2.
    • После установки: docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi должно показать вашу GPU.
  3. torch с поддержкой CUDA — уже в requirements.txt (torch>=2.8.0 подтягивает CUDA-wheel автоматически).

Если GPU недоступен или nvidia-container-toolkit не установлен — docker compose --profile gpu up упадёт с ошибкой о нехватке nvidia runtime. В этом случае используйте --profile cpu.

Подключение к Claude Code

{
  "mcpServers": {
    "1c-templates-mcp": {
      "type": "url",
      "url": "http://localhost:8004/mcp"
    }
  }
}

MCP-инструменты

Инструмент Параметры Описание
templatesearch query: str Гибридный семантический + полнотекстовый поиск шаблонов
list_templates offset?, limit? Список шаблонов с пагинацией (по умолчанию 50, макс 200). Для поиска используйте templatesearch
get_template template_id: int Получить полный шаблон с кодом по ID
add_template name, description, code, tags? Добавить новый шаблон
update_template template_id, name?, description?, code?, tags? Обновить существующий шаблон
delete_template template_id: int Удалить шаблон по ID

Веб-интерфейс

Маршрут Описание
GET / Список шаблонов с поиском
GET /new Форма создания шаблона (Monaco Editor)
GET /{id} Просмотр шаблона
GET /{id}/edit Редактирование шаблона
POST /{id}/delete Удаление шаблона

Конфигурация

Переменная По умолчанию Описание
HTTP_PORT 8004 Порт сервера
EMBEDDING_PROVIDER auto Провайдер embeddings: auto / local / openai (см. ниже)
EMBEDDING_MODEL intfloat/multilingual-e5-small HuggingFace-идентификатор модели для локальных embeddings
OPENAI_API_BASE http://localhost:1234 URL OpenAI-совместимого API для embeddings
OPENAI_API_KEY lm-studio API-ключ
OPENAI_MODEL - Имя модели на API-сервере (для LM Studio - внутреннее имя, не HF-id)
RESET_CHROMA false Пересоздать ChromaDB-индекс при старте
RESET_CACHE false Очистить кеш модели при старте
USESSE false Использовать SSE-транспорт вместо Streamable HTTP
DATA_DIR /app/data Директория для runtime-данных (SQLite, ChromaDB)

Архитектура

                     MCP Clients (Claude Code, Cursor, ...)
                              |
                         POST /mcp
                              |
                    +---------+---------+
                    |    FastAPI app     |
                    |                   |
                    |  /mcp -> FastMCP  |  6 MCP tools
                    |  /    -> Web UI   |  CRUD + Monaco Editor
                    +----+--------+----+
                         |        |
                    +----+--+  +--+------+
                    | SQLite |  | ChromaDB |
                    | (SoT)  |  | (index)  |
                    +--------+  +----+-----+
                                     |
                              +------+------+
                              | Embeddings  |
                              | OpenAI API  |
                              | or local ST |
                              +-------------+
  • seed_templates.jsonl - источник истины для контрибуций (один JSON-объект на строку). При Docker-билде из него генерируется templates.db.
  • SQLite (templates.db) - runtime-хранилище шаблонов (в Docker-volume). Производное от JSONL на этапе билда.
  • ChromaDB - векторный индекс для семантического поиска, производный от SQLite (перестраивается при первом старте).
  • Embeddings - OpenAI-совместимый API (LM Studio, Ollama) или локальный SentenceTransformer.

Embedding-модели

Доступны три режима выбора бэкенда через EMBEDDING_PROVIDER:

Режим auto (по умолчанию)

Сначала пробует OpenAI-совместимый API (LM Studio, Ollama, vLLM). При недоступности автоматически откатывается на локальную SentenceTransformer-модель.

environment:
  - EMBEDDING_PROVIDER=auto
  - OPENAI_API_BASE=http://host.docker.internal:1234
  - OPENAI_MODEL=text-embedding-multilingual-e5-large-instruct
  - EMBEDDING_MODEL=intfloat/multilingual-e5-small   # fallback

Режим local — только локальная SentenceTransformer

API не дергается вообще. Подходит если нет LM Studio / Ollama, или хочется гарантированно детерминированное поведение без зависимостей от внешних сервисов.

environment:
  - EMBEDDING_PROVIDER=local
  - EMBEDDING_MODEL=intfloat/multilingual-e5-small   # или ai-forever/ru-en-RoSBERTa

Режим openai — только API

Падает с ошибкой если API недоступен (без фоллбэка). Подходит для production-деплоев, где API-сервис обязателен.

environment:
  - EMBEDDING_PROVIDER=openai
  - OPENAI_API_BASE=https://api.openai.com
  - OPENAI_API_KEY=sk-...
  - OPENAI_MODEL=text-embedding-3-small

Рекомендации по локальным моделям

Модель Размер Dim Скорость на CPU Когда брать
intfloat/multilingual-e5-small 118M / ~450 МБ 384 Быстро Default - работает везде, включая слабое железо
ai-forever/ru-en-RoSBERTa 404M / ~1.6 ГБ 1024 Медленно (5-10 мин на индекс 2262 шаблонов) Есть GPU или готов ждать - лучшее качество на русском
intfloat/multilingual-e5-large 560M / ~2.2 ГБ 1024 Очень медленно на CPU Есть GPU - универсальная мультиязычная

Первый запуск с новой моделью качает её с HuggingFace (кешируется в model_cache/). Последующие старты читают из кеша.

Проверка качества embedding-модели

Если подозреваете что API-модель (особенно сторонняя GGUF в LM Studio) возвращает дефектные эмбеддинги, см. ../plans/1c-templates-mcp/test_lmstudio_embeddings.py - скрипт проверяет все доступные в LM Studio модели на коллапс (max cos_sim для несвязанных текстов).

Локальный запуск (без Docker)

pip install -r requirements.txt
python -m app.main

Переменные окружения читаются из .env (см. .env.example). Для GPU - установить torch с CUDA-wheel (pip install torch --index-url https://download.pytorch.org/whl/cu121).

Для подсветки BSL в веб-интерфейсе клонировать bsl_console рядом с проектом:

git clone --depth 1 https://github.com/salexdv/bsl_console.git

Как добавить свой шаблон

Источник правды - seed_templates.jsonl в корне проекта. Каждая строка файла - один шаблон в формате JSON: {"name": "...", "description": "...", "tags": ["..."], "code": "..."}. Поля name, description, code обязательны, tags опционально.

Путь 1: напрямую через JSONL (рекомендуется для PR)

  1. Добавить строку с шаблоном в конец seed_templates.jsonl.
  2. Проверить валидность: python scripts/build_db_from_jsonl.py --jsonl seed_templates.jsonl --output ./check.db - должно завершиться без ошибок. Удалить check.db.
  3. Закоммитить изменение и открыть PR.

Путь 2: локально через Web UI + экспорт

  1. Запустить сервер (docker compose up -d), добавить шаблон через Web UI (http://localhost:8004/new). Шаблон попадает в runtime-БД в Docker-volume.
  2. Обязательно выгрузить runtime-БД на хост и экспортировать в JSONL:
    docker cp template_search_mcp:/app/data/templates.db ./runtime_dump.db
    python scripts/export_to_jsonl.py --db ./runtime_dump.db --output seed_templates.jsonl
    rm ./runtime_dump.db
    
  3. git add seed_templates.jsonl, коммит, PR.

ВАЖНО: если выполнить docker compose up -d --build или docker volume rm до шага 2 - добавленный через Web UI шаблон будет потерян (runtime-БД пересоздается из seed_templates.jsonl).

Пересборка образа после изменений JSONL

docker compose build --no-cache
docker volume rm 1c-templates-mcp_app_data  # удалит прежнюю runtime-БД
docker compose up -d

Companion-правила для AI-агентов

В docs/rules/ лежат справочники по доменам, из которых дистиллированы тематические шаблоны базы. Это не замена самим шаблонам, а companion-знания для глубокого контекста: шаблоны показывают как делать конкретные операции, справочник даёт полную картину API домена. Агент с подключенным справочником намного лучше ориентируется в большом API, выбирает правильные методы и не путает близкие по смыслу модули.

Доступные справочники

docs/rules/zup-hr-api-reference.md — 1С:ЗУП 3.1 (кадровый учёт)

Полный reference по типовым механизмам конфигурации 1С:Зарплата и управление персоналом 3.1 (базовая / ПРОФ / КОРП). Применяется при любой разработке на ЗУП 3.1.

22 раздела, ~620 строк. Что внутри:

Раздел Содержание
1. Архитектура Ключевое различие Справочник.Сотрудники (рабочее место) vs Справочник.ФизическиеЛица (персональные данные). Правило выбора.
2. Иерархия модулей КадровыйУчет / КадровыйУчетРасширенный / КадровыйУчетПовтИсп / ЗарплатаКадры — что публичное, что внутреннее, когда какой использовать.
3-4. КадровыеДанные Главные методы КадровыеДанныеСотрудников / КадровыеДанныеФизическихЛиц — массовые и единичные. Параметры, RLS, производительность.
5. Справочник полей Все поля, доступные через КадровыеДанные: периодические (Должность, Подразделение, Оклад, График, ~50 полей) и постоянные (ДатаПриема, ТабельныйНомер, СНИЛС, ~80 полей). Объяснён нюанс "Текущий*" префикса.
6. Приём/увольнение ПериодыРаботыСотрудников, ДатаПриемаФизическогоЛица, ЭтоНачалоТрудовойДеятельности.
7. Стажи Все виды стажа (общий, страховой, северный, непрерывный), представление, расчёт продолжительности, нормализация.
8. Связь Сотрудник ↔ ФизЛицо ОсновнойСотрудникФизическогоЛица, СотрудникиФизическихЛиц, НеоформленныеСотрудникиФизическихЛиц — массовые и кешируемые варианты.
9. Списки сотрудников организации СотрудникиОрганизации с параметрами отбора (подразделение, виды договоров, включая уволенных).
10-11. Временные таблицы СоздатьВТ* для пакетных запросов. СоздатьВТРабочиеМестаСотрудников для интервалов работы.
12. Архив сотрудников ПоместитьСотрудникаВАрхив, ИзвлечьСотрудникаИзАрхива (нюанс с пометкой удаления).
13. Создание Новое физлицо и новый сотрудник.
14. ФИО Инициалы, склонение по падежам, определение пола, склонение должностей (веб-сервис Морфер).
15. Вспомогательные методы ГоловнаяОрганизация, ДоступныеОрганизации, ответственные лица на дату.
16. Вызовы с клиента КадровыйУчетВызовСервера — безопасный публичный API.
17. Текущие начисления ТекущиеНачисленияСотрудника, плановые начисления через ВТ.
18. Остатки отпусков ОстаткиОтпусковСотрудниковНаДату.
19. Графики / производственный календарь РасписанияРаботыНаПериод, РазностьДатПоКалендарю, БлижайшиеРабочиеДаты.
20. Печатные формы ТабельныйНомерНаПечать, ТарифнаяСтавкаНаПечать, ФормаМножественногоЧисла.
21. Паспортные данные ДокументыФизическихЛиц, ДокументУдостоверяющийЛичностьФизлица.
22. Штатное расписание ДанныеПозицииШтатногоРасписания.

В конце — секция "Ключевые нюансы" с частыми граблями: RLS, ДатаПолученияДанных='00010101', массовые vs единичные методы, кеширование ПовтИсп.

Связанные шаблоны в базе (найти через templatesearch("ЗУП <тема>")):

  • ЗУП: Механизм представлений СКД (Представления_) — виртуальные таблицы для СКД-отчётов
  • ЗУП: Периодические регистры через ЗарплатаКадрыПериодическиеРегистры — срезы через МВТ
  • ЗУП: Менеджер расчета зарплаты МенеджерРасчетаЗарплаты — программный расчёт
  • ЗУП: Средний заработок и остатки отпусков — УчетСреднегоЗаработка
  • ЗУП: Учет рабочего времени и производственный календарь — УчетРабочегоВремениРасширенный + КалендарныеГрафики

Как подключить справочник к AI-агенту

Claude Code — два варианта:

  1. Глобально (для всех проектов): скопировать файл в ~/.claude/rules/ (Windows: C:\Users\<user>\.claude\rules\). Все правила из этой папки автоматически включаются в контекст каждой сессии.
  2. Для конкретного проекта: добавить ссылку в CLAUDE.md проекта: См. companion-справочник: <путь к файлу>.

Cursor / другие IDE: подключить файл в настройках правил проекта (Rules / Instructions). Формат Markdown - универсальный.

Через MCP-клиент без IDE: скачать файл и давать агенту как system prompt или attached document при работе с ЗУП-темами.

Контрибуция справочника

Справочники покрывают домены с большим API, в которых AI-агенту без контекста сложно выбрать правильный метод. Если у вас есть такой reference по другой конфигурации / подсистеме (Бухгалтерия, ERP, УТ, БСП-подсистема и т.п.) — открывайте PR в docs/rules/. Формат свободный, главное структура: оглавление, секции по темам API, в конце — ключевые нюансы/грабли.

Благодарности

Лицензия

MIT

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured