Skip to main content
Glama
ARCHITECTURE.md10.9 kB
# План реструктуризации проекта MCP Server ## Текущие проблемы 1. Слишком большие файлы, затрудняющие поддержку и развитие 2. Смешивание разных инструментов в одном файле 3. Недостаточное разделение ответственности между компонентами 4. Сложности с тестированием отдельных компонентов 5. Проблемы с линтерами из-за длинных строк и неиспользуемых импортов ## Предлагаемая структура проекта ``` myaiserv/ ├── app/ │ ├── core/ # Базовые компоненты и абстракции │ │ ├── __init__.py │ │ ├── base/ # Базовые абстрактные классы │ │ │ ├── __init__.py │ │ │ ├── component.py # Базовый компонент MCP │ │ │ ├── tool.py # Базовый класс инструмента │ │ │ ├── resource.py # Базовый класс ресурса │ │ │ ├── prompt.py # Базовый класс промпта │ │ │ └── observer.py # Паттерн наблюдатель │ │ ├── errors.py # Классы ошибок │ │ ├── factories/ # Фабрики для создания компонентов │ │ │ ├── __init__.py │ │ │ ├── tool_factory.py │ │ │ ├── resource_factory.py │ │ │ └── prompt_factory.py │ │ └── protocols/ # Протоколы и интерфейсы │ │ ├── __init__.py │ │ └── interfaces.py │ ├── models/ # Модели данных │ │ ├── __init__.py │ │ ├── mcp/ # Модели MCP │ │ │ ├── __init__.py │ │ │ ├── enums.py # Перечисления │ │ │ ├── message.py # Модели сообщений │ │ │ ├── resource.py # Модели ресурсов │ │ │ ├── tool.py # Модели инструментов │ │ │ ├── prompt.py # Модели промптов │ │ │ └── sampling.py # Модели сэмплирования │ │ ├── graphql/ # GraphQL модели │ │ │ ├── __init__.py │ │ │ └── schema.py │ │ └── database/ # Модели базы данных │ │ ├── __init__.py │ │ ├── user.py │ │ └── account.py │ ├── services/ # Сервисы │ │ ├── __init__.py │ │ ├── mcp/ # MCP сервисы │ │ │ ├── __init__.py │ │ │ ├── registry.py # Реестр компонентов │ │ │ ├── tool_service.py │ │ │ ├── resource_service.py │ │ │ ├── prompt_service.py │ │ │ └── sampling_service.py │ │ └── external/ # Внешние сервисы │ │ ├── __init__.py │ │ ├── elasticsearch_service.py │ │ └── redis_service.py │ ├── tools/ # Инструменты │ │ ├── __init__.py │ │ ├── file/ # Файловые инструменты │ │ │ ├── __init__.py │ │ │ └── file_system_tool.py │ │ ├── weather/ # Погодные инструменты │ │ │ ├── __init__.py │ │ │ └── weather_tool.py │ │ ├── text/ # Текстовые инструменты │ │ │ ├── __init__.py │ │ │ ├── operations/ # Операции с текстом │ │ │ │ ├── __init__.py │ │ │ │ ├── formatter.py │ │ │ │ ├── statistics.py │ │ │ │ ├── entity_extractor.py │ │ │ │ ├── summarizer.py │ │ │ │ └── keyword_finder.py │ │ │ └── text_processor_tool.py │ │ └── search/ # Поисковые инструменты │ │ ├── __init__.py │ │ ├── strategies/ # Стратегии поиска │ │ │ ├── __init__.py │ │ │ ├── text_search.py │ │ │ ├── semantic_search.py │ │ │ └── faceted_search.py │ │ └── search_tool.py │ ├── storage/ # Хранилища данных │ │ ├── __init__.py │ │ ├── elasticsearch/ │ │ │ ├── __init__.py │ │ │ └── client.py │ │ └── redis/ │ │ ├── __init__.py │ │ └── client.py │ ├── utils/ # Утилиты │ │ ├── __init__.py │ │ ├── logging.py │ │ ├── config.py │ │ └── validators.py │ ├── api/ # API endpoints │ │ ├── __init__.py │ │ ├── rest/ # REST API │ │ │ ├── __init__.py │ │ │ ├── tools.py │ │ │ ├── resources.py │ │ │ └── prompts.py │ │ ├── graphql/ # GraphQL API │ │ │ ├── __init__.py │ │ │ └── resolvers.py │ │ └── websocket/ # WebSocket API │ │ ├── __init__.py │ │ └── handlers.py │ ├── config/ # Конфигурация │ │ ├── __init__.py │ │ └── settings.py │ └── main.py # Точка входа ├── tests/ # Тесты │ ├── __init__.py │ ├── unit/ # Модульные тесты │ │ ├── __init__.py │ │ ├── tools/ │ │ ├── services/ │ │ └── models/ │ └── integration/ # Интеграционные тесты │ ├── __init__.py │ └── api/ └── docs/ # Документация ├── ARCHITECTURE.md ├── API.md └── DEVELOPMENT.md ``` ## План миграции ### Этап 1: Реструктуризация базовых компонентов 1. Создать структуру директорий согласно плану 2. Разделить `base_mcp.py` на отдельные файлы в директории `core/base/` 3. Перенести фабрики в отдельную директорию `core/factories/` 4. Выделить протоколы и интерфейсы в `core/protocols/` ### Этап 2: Реструктуризация моделей 1. Разделить `mcp.py` на отдельные файлы по типам моделей 2. Перенести GraphQL схемы в отдельную директорию 3. Обновить импорты во всех файлах ### Этап 3: Реструктуризация сервисов 1. Разделить `mcp_service.py` на отдельные сервисы по функциональности 2. Создать реестр компонентов в отдельном файле 3. Обновить импорты во всех файлах ### Этап 4: Реструктуризация инструментов 1. Создать отдельные директории для каждого типа инструментов 2. Разделить `example_tool.py` на отдельные файлы по типам инструментов 3. Разделить `text_processor.py` на базовый класс и отдельные операции 4. Разделить `search_tool.py` на базовый класс и отдельные стратегии 5. Обновить импорты во всех файлах ### Этап 5: Создание API слоя 1. Выделить API endpoints из `main.py` в отдельные файлы 2. Создать отдельные модули для REST, GraphQL и WebSocket API 3. Обновить импорты в `main.py` ### Этап 6: Тестирование и документация 1. Создать тесты для всех компонентов 2. Обновить документацию с учетом новой структуры 3. Проверить работоспособность всего приложения ## Преимущества новой структуры 1. **Улучшенная модульность**: каждый компонент имеет четкую ответственность 2. **Лучшая тестируемость**: модульные тесты могут быть написаны для каждого компонента 3. **Упрощенное сопровождение**: легче находить и исправлять ошибки 4. **Масштабируемость**: легче добавлять новые компоненты 5. **Соответствие принципам SOLID**: каждый класс имеет единственную ответственность 6. **Улучшенная читаемость**: меньшие файлы легче понимать 7. **Соответствие стандартам линтеров**: меньше проблем с линтерами ## Рекомендации по реализации 1. Использовать относительные импорты внутри пакетов 2. Создавать `__init__.py` с экспортом публичных классов и функций 3. Следовать принципу "один класс - один файл" для основных компонентов 4. Использовать фабрики для создания экземпляров классов 5. Применять инъекцию зависимостей для улучшения тестируемости 6. Документировать публичные API с помощью docstrings 7. Писать тесты параллельно с реструктуризацией

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/eagurin/myaiserv'

If you have feedback or need assistance with the MCP directory API, please join our Discord server