# MCP сервер для Bitrix24

MCP (Model Context Protocol) сервер для интеграции с Bitrix24.

## Архитектура проекта

Проект организован согласно принципам чистой архитектуры:

```
app/
├── domain/              # Бизнес-логика и основные сущности
│   ├── entities/        # Сущности Bitrix24
│   ├── interfaces/      # Интерфейсы для репозиториев и сервисов
│   └── bitrix_types.py  # Типы данных Bitrix24
├── application/         # Слой приложения
│   ├── dto/             # Объекты передачи данных
│   ├── services/        # Сервисы приложения
│   └── use_cases/       # Варианты использования
├── infrastructure/      # Внешние сервисы и реализации
│   ├── bitrix/          # Реализации для Bitrix24
│   │   └── mixins.py    # Миксины для работы с Bitrix24 API
│   ├── di/              # Зависимости 
│   │   └── app_provider.py # Класс провайдера зависимостей (dishka)
│   ├── logging/         # Модули логирования
│   │   └── logger.py    # Централизованное логирование
│   └── mcp/             # Реализация MCP сервера
│       └── mcp_server_impl.py # Реализация MCP сервера
└── main.py             # Точка входа в приложение
```

## Особенности реализации

### Чистая архитектура

Проект разработан согласно принципам чистой архитектуры:
- **Слой домена**: содержит бизнес-логику и основные сущности
- **Слой приложения**: содержит варианты использования и сервисы
- **Слой инфраструктуры**: содержит внешние сервисы и реализации

### SOLID принципы

- **Single Responsibility**: каждый класс имеет единственную ответственность
- **Open/Closed**: классы открыты для расширения, закрыты для модификации
- **Liskov Substitution**: подтипы могут заменять базовые типы
- **Interface Segregation**: мелкие специализированные интерфейсы вместо монолитных
- **Dependency Inversion**: зависимость от абстракций, а не от конкретных реализаций

### Инъекция зависимостей

Используется библиотека `dishka` для инъекции зависимостей, с помощью класса `AppProvider`.

### MCP сервер

MCP сервер реализован с использованием `modelcontextprotocol`, который позволяет создавать инструменты для взаимодействия с LLM.

### Работа с Bitrix24

Используется библиотека `fast_bitrix24` для работы с API Bitrix24. Реализованы миксины для упрощения разработки репозиториев.

## Запуск сервера

```bash
# Запуск сервера
python -m app.main

# Запуск с выполнением тестового запроса
python -m app.main --test
```

## Разработка

### Добавление новых сущностей

1. Создать класс сущности в `app/domain/entities/`
2. Создать интерфейс репозитория в `app/domain/interfaces/`
3. Создать реализацию репозитория в `app/infrastructure/bitrix/`
4. Добавить репозиторий в AppProvider

### Добавление новых инструментов MCP

1. Создать сервис в `app/application/services/`
2. Создать обработчик в сервисе
3. Зарегистрировать обработчик в MCP сервисе

## Технологические решения

- **Python 3.12**: современные возможности языка
- **Типизация**: строгая типизация с использованием аннотаций (mypy)
- **Асинхронность**: все внешние взаимодействия асинхронные (asyncio)
- **ABC вместо Protocol**: абстрактные базовые классы для четкого определения интерфейсов
- **Self**: использование Self из typing для возвращения экземпляров класса
- **Централизованное логирование**: единый модуль для настройки логирования
