# 1C Code Search MCP
Локальный MCP-сервер для семантического поиска по кодовой базе 1С. Поддерживает множество информационных баз, различные модели эмбеддингов и векторные движки.
## Ключевые возможности
* **Мульти-конфигурация**: Поддержка нескольких баз кода (информационных баз) одновременно.
* **Гибкий выбор моделей**: Поддержка любых моделей совместимых с HuggingFace/ONNX (по умолчанию `cointegrated/rubert-tiny2`).
* **Векторный поиск**: Использование Qdrant, LanceDB или ChromaDB для эффективного поиска.
* **Веб-интерфейс**: Удобное управление базами и настройками через браузер.
* **MCP Протокол**: Легкая интеграция с Claude, Cursor, Kiro и другими MCP-клиентами.
## Установка
1. Клонируйте репозиторий.
2. Установите зависимости:
```bash
python install.py
```
## Запуск
```bash
python code-search.py
```
или
```bash
python -m code_search
```
Сервер запустится на порту 8000 (по умолчанию).
Откройте **http://localhost:8000** в браузере для настройки баз.
## Конфигурация (`config.yaml`)
Файл `config.yaml` создается автоматически при первом запуске. Вы можете редактировать его вручную или через веб-интерфейс.
Пример конфигурации:
```yaml
global:
port: 8000
check_interval: 300
ibs:
- name: "trade"
title: "Управление Торговлей"
source_dir: "C:/Projects/Trade/src"
index_dir: "./indices/trade"
embedding_model: "cointegrated/rubert-tiny2"
vector_db: "qdrant"
- name: "erp"
title: "1С:ERP"
source_dir: "C:/Projects/ERP/src"
index_dir: "./indices/erp"
embedding_model: "intfloat/multilingual-e5-small"
vector_db: "qdrant"
```
### Параметры
**Global:**
* `port`: Порт веб-сервера.
* `check_interval`: Интервал фоновой проверки изменений файлов (в секундах).
**IBs (Информационные базы):**
* `name`: Уникальный ID базы (латиница).
* `title`: Человекочитаемое название.
* `source_dir`: Путь к каталогу с выгрузкой конфигурации (XML файлы).
* `index_dir`: Путь для хранения векторного индекса.
* `embedding_model`: Имя модели эмбеддингов.
* `vector_db`: Исполнитель поиска (`qdrant`).
## Настройка производительности и параметров
Помимо базовой настройки в `config.yaml`, существуют внутренние параметры, влияющие на скорость индексации и потребление ресурсов. Они заданы константами в коде.
### Файл `code_search/indexer/engine.py`
* **`BATCH_SIZE`** (по умолчанию `500`)
* **Где хранится**: Константа в начале файла.
* **Что это**: Количество фрагментов (чанков), которые накапливаются в памяти перед записью в векторную БД.
* **Влияние**: Увеличение может слегка ускорить процесс (реже коммиты в БД), но увеличит потребление RAM. Уменьшение экономит память.
* **`READ_WORKERS`** (по умолчанию `1`)
* **Где хранится**: Константа в начале файла.
* **Что это**: Количество потоков для чтения файлов и первичной обработки.
* **Влияние**: Увеличение ускоряет чтение с диска, но повышает нагрузку на CPU. Так как генерация векторов тоже требует CPU, ставить много потоков (больше 2-4) обычно бессмысленно — "бутылочным горлышком" станет нейросеть. Уменьшение до 1 делает систему отзывчивее.
* **`EMBED_BATCH_SIZE`** (по умолчанию `64`)
* **Где хранится**: Константа в начале файла.
* **Что это**: Размер пачки текстов, которая отправляется в нейросеть за один раз.
* **Влияние**: Сильно влияет на скорость и память. Увеличение ускоряет работу (особенно с GPU/AVX), но линейно "ест" память. Если падает с ошибкой OOM (Out Of Memory) — уменьшайте.
### Файл `code_search/config.py`
* **`CHUNK_SIZE`** (по умолчанию `1024`) и **`CHUNK_OVERLAP`** (по умолчанию `100`)
* **Что это**: Размер куска кода в символах и перекрытие между ними.
* **Влияние**: Определяет, как "режется" код. 1024 символа ~ 20-30 строк кода. Если менять, то придется переиндексировать всё с нуля.
## Поддерживаемые модели и движки
### Модели эмбеддингов
Сервер автоматически загружает и конвертирует в ONNX модели с HuggingFace. Рекомендуемые:
1. `cointegrated/rubert-tiny2` (Default) — Быстрая, легкая, хорошая точность.
2. `intfloat/multilingual-e5-small` — Высокая точность, мультиязычность.
3. `ai-forever/sbert_large_nlu_ru` — Крупная модель для русского языка.
### Векторные движки
* **Qdrant** (по умолчанию) — Быстрый, работает локально, проверен.
* **LanceDB** — Встраиваемая (embedded) база, очень быстрая, хранит данные в файлах.
* **ChromaDB** — Популярная open-source векторная БД.
Укажите нужное значение (`qdrant`, `lancedb` или `chromadb`) в поле `vector_db` в `config.yaml`.
## Подключение к клиентам (MCP)
Сервер работает по протоколу MCP через SSE (Server-Sent Events), что позволяет подключать его удаленно или через сеть.
**URL для подключения**: `http://<ваш-сервер>:8000/sse`
### Claude Desktop
В файл `claude_desktop_config.json`:
```json
{
"mcpServers": {
"1c-rag": {
"url": "http://localhost:8000/sse"
}
}
}
```
### Cursor
1. Перейдите в **Cursor Settings** > **Features** > **MCP**.
2. Нажмите **Add New MCP Server**.
3. Type: `SSE`.
4. URL: `http://localhost:8000/sse`
### Kiro / Supermaven
В файл `~/.kiro/settings/mcp.json`:
```json
{
"mcpServers": {
"1c-rag": {
"url": "http://localhost:8000/sse"
}
}
}
```
## Лицензия
MIT