Metadata-Version: 2.4
Name: iflow-mcp_rsyuzyov-bsl-mcp
Version: 0.1.0
Summary: 1C Code Search MCP - Local MCP server for semantic code search in 1C codebase
Project-URL: Homepage, https://github.com/rsyuzyov/bsl-mcp
Project-URL: Repository, https://github.com/rsyuzyov/bsl-mcp
License-File: LICENSE
Requires-Python: >=3.8
Requires-Dist: fastapi
Requires-Dist: jinja2
Requires-Dist: lancedb
Requires-Dist: mcp
Requires-Dist: pymorphy3
Requires-Dist: python-multipart
Requires-Dist: pyyaml
Requires-Dist: qdrant-client
Requires-Dist: sentence-transformers
Requires-Dist: tqdm
Requires-Dist: uvicorn
Description-Content-Type: text/markdown

# 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
