# Структура проекта MCP Server
## Обзор
Проект MCP Server организован в модульную структуру, которая следует принципам SOLID, DRY и KISS. Каждый компонент имеет четкую ответственность и взаимодействует с другими компонентами через хорошо определенные интерфейсы.
## Структура директорий
```
myaiserv/
├── app/
│ ├── core/ # Базовые компоненты и абстракции
│ │ ├── base/ # Базовые абстрактные классы
│ │ │ ├── component.py # Базовый компонент MCP
│ │ │ ├── tool.py # Базовый класс инструмента
│ │ │ ├── resource.py # Базовый класс ресурса
│ │ │ ├── prompt.py # Базовый класс промпта
│ │ │ └── observer.py # Паттерн наблюдатель
│ │ ├── errors.py # Классы ошибок
│ │ ├── factories/ # Фабрики для создания компонентов
│ │ │ └── tool_factory.py
│ │ └── base_*.py # Устаревшие базовые классы (будут удалены)
│ ├── models/ # Модели данных
│ │ ├── mcp/ # Модели MCP
│ │ │ ├── enums.py # Перечисления
│ │ │ ├── message.py # Модели сообщений
│ │ │ ├── resource.py # Модели ресурсов
│ │ │ ├── tool.py # Модели инструментов
│ │ │ └── ...
│ │ ├── graphql.py # GraphQL модели
│ │ └── *.py # Другие модели
│ ├── services/ # Сервисы
│ │ └── mcp_service.py # Сервис MCP
│ ├── tools/ # Инструменты
│ │ ├── file/ # Файловые инструменты
│ │ │ └── file_system_tool.py
│ │ ├── weather/ # Погодные инструменты
│ │ │ └── weather_tool.py
│ │ ├── text/ # Текстовые инструменты
│ │ │ ├── operations/ # Операции с текстом
│ │ │ └── text_processor_tool.py
│ │ ├── search/ # Поисковые инструменты
│ │ │ ├── strategies/ # Стратегии поиска
│ │ │ └── search_tool.py
│ │ └── registry.py # Регистрация инструментов
│ ├── prompts/ # Промпты
│ │ ├── prompts.py # Промпты для LLM
│ │ ├── system_prompts.py # Системные промпты
│ │ └── registry.py # Регистрация промптов
│ ├── resources/ # Ресурсы
│ │ ├── resources.py # Ресурсы для MCP
│ │ └── registry.py # Регистрация ресурсов
│ ├── storage/ # Хранилища данных
│ │ ├── elasticsearch.py # Клиент Elasticsearch
│ │ └── redis.py # Клиент Redis
│ ├── utils/ # Утилиты
│ │ ├── embeddings.py # Утилиты для эмбеддингов
│ │ └── prompt_loader.py # Загрузчик промптов
│ └── main.py # Точка входа
└── docs/ # Документация
├── ARCHITECTURE.md # Архитектура проекта
└── PROJECT_STRUCTURE.md # Структура проекта
```
## Компоненты
### Core
Пакет `core` содержит базовые абстрактные классы и интерфейсы, которые определяют основные компоненты MCP:
- `MCPComponent`: Базовый класс для всех компонентов MCP
- `MCPTool`: Базовый класс для инструментов
- `MCPResource`: Базовый класс для ресурсов
- `MCPPrompt`: Базовый класс для промптов
- `Observable` и `Observer`: Реализация паттерна Наблюдатель
Также в этом пакете находятся фабрики для создания компонентов:
- `ToolFactory`: Фабрика для создания инструментов
### Models
Пакет `models` содержит модели данных, используемые в проекте:
- `mcp`: Модели для MCP (сообщения, ресурсы, инструменты, промпты)
- `graphql.py`: Модели для GraphQL API
- Другие модели для базы данных и бизнес-логики
### Services
Пакет `services` содержит сервисы, которые предоставляют бизнес-логику:
- `mcp_service.py`: Сервис для работы с MCP
### Tools
Пакет `tools` содержит инструменты, которые могут быть использованы через MCP API:
- `file`: Инструменты для работы с файловой системой
- `weather`: Инструменты для получения информации о погоде
- `text`: Инструменты для обработки текста
- `search`: Инструменты для поиска
- `registry.py`: Регистрация инструментов
### Prompts
Пакет `prompts` содержит промпты, которые могут быть использованы для генерации сообщений для LLM:
- `prompts.py`: Промпты для LLM
- `system_prompts.py`: Системные промпты
- `registry.py`: Регистрация промптов
### Resources
Пакет `resources` содержит ресурсы, которые могут быть использованы инструментами и промптами:
- `resources.py`: Ресурсы для MCP
- `registry.py`: Регистрация ресурсов
### Storage
Пакет `storage` содержит клиенты для хранилищ данных:
- `elasticsearch.py`: Клиент Elasticsearch
- `redis.py`: Клиент Redis
### Utils
Пакет `utils` содержит утилиты, которые используются в проекте:
- `embeddings.py`: Утилиты для эмбеддингов
- `prompt_loader.py`: Загрузчик промптов
## Паттерны проектирования
В проекте используются следующие паттерны проектирования:
- **Factory Method**: Для создания инструментов, ресурсов и промптов
- **Strategy**: Для реализации различных стратегий поиска и обработки текста
- **Observer**: Для уведомления о изменениях в ресурсах
- **Dependency Injection**: Для внедрения зависимостей в компоненты
- **Registry**: Для регистрации и получения компонентов
## Принципы SOLID
Проект следует принципам SOLID:
- **Single Responsibility**: Каждый класс имеет единственную ответственность
- **Open/Closed**: Классы открыты для расширения, но закрыты для модификации
- **Liskov Substitution**: Подклассы могут заменять базовые классы
- **Interface Segregation**: Интерфейсы разделены на более мелкие и специфичные
- **Dependency Inversion**: Зависимости инвертированы через абстракции