Skip to main content
Glama
ASXRND

MCP Weather & Accruals Server

by ASXRND
REFACTORING_SUMMARY.md10.9 kB
# ИТОГОВАЯ СВОДКА РЕФАКТОРИНГА ПРОЕКТА ## 🎯 Финальное состояние (v0.2.0) Проект трансформирован из локального приложения в распределённую систему с: - Локальным Deepseek клиентом (погода, файлы) - Удалённым FastAPI для управления данными о начислениях - Удалённой PostgreSQL базой данных - Асинхронной архитектурой через httpx и databases ## 📦 СТРУКТУРА МОДУЛЕЙ (modules/) ### 1. modules/**init**.py - Инициализация пакета модулей - Экспортирует публичные функции и классы ### 2. modules/config.py - Конфигурация приложения через переменные окружения - Функции: - `Config.validate()` - проверяет критические переменные окружения - `Config.get_config_summary()` - сводка конфигурации - Константы: - OpenWeatherMap (API_KEY, BASE_URL) - Deepseek (API_KEY, BASE_URL) - Database URL, Accruals API URL - File operations (ALLOWED_BASE_DIR) ### 3. modules/weather_api.py - Работа с OpenWeatherMap API - Функции: - `make_weather_request()` - HTTP запросы - `get_current_weather(city, units)` - текущая погода - `get_forecast(city, days, units)` - прогноз - `format_day_forecast()` - форматирование ### 4. modules/deepseek_api.py - Взаимодействие с Deepseek API - Функции: - `get_weather_tools()` - определение инструментов - `get_file_tools()` - инструменты для файлов - `query_accruals_api()` - запросы к удалённому API 📌 **НОВОЕ** - `call_deepseek_with_tools()` - вызов Deepseek - `process_deepseek_response()` - обработка ответа - `get_weather_response()` - главная функция ### 5. modules/file_api.py - Безопасная работа с файлами - Функции: - `read_file()`, `create_file()`, `update_file()`, `delete_file()` - `list_files()` - просмотр директорий - `is_path_safe()` - защита от path traversal ## 📄 ОСНОВНЫЕ ФАЙЛЫ ### 1. deepseek_client.py - Интерактивный клиент для чата с Deepseek - Функции: - `chat_with_deepseek()` - основной цикл - `main()` - инициализация - Использует: все модули ### 2. server.py - MCP сервер с инструментами - Инструменты: - `current_weather()` - текущая погода - `weather_forecast()` - прогноз - Для интеграции с Claude Desktop или MCP Inspector ## 🚀 УДАЛЁННЫЙ FASTAPI (fastapi_udalennii/) 📌 **НОВОЕ в v0.2.0** - Полная поддержка начисления в удалённом API ### Структура: ``` fastapi_udalennii/ ├── app/ │ ├── main.py - FastAPI приложение с endpoints │ ├── models.py - SQLAlchemy таблицы (users, accruals) │ ├── schemas.py - Pydantic модели для валидации │ ├── crud.py - CRUD операции для БД │ ├── db.py - Подключение к БД │ └── config.py - Конфигурация ├── alembic/ │ └── versions/ - Миграции БД │ ├── 0001_create_users_table.py │ └── 0002_create_accruals_table.py ├── requirements.txt - Зависимости ├── .env - Конфиг для удалённого сервера └── README.md - Инструкции ``` ### Таблица accruals (NEW): Поля: id, id_accrual, accrual_date, service_group, accrual_type, article, sku, product_name, quantity, seller_price, order_received_date, sales_platform, work_scheme, ozon_fee_pct, localization_index_pct, avg_delivery_hours, total_amount_rub ### New Endpoints (v0.2.0): - `POST /accruals/` - создание начисления - `GET /accruals/` - получение списка с фильтрацией - `GET /stats/summary` - общая статистика - `GET /stats/accruals` - статистика с фильтрацией ### CRUD Functions (NEW): - `create_accrual()` - добавление записи - `get_accruals()` - получение с фильтрацией - `get_accrual_stats()` - статистика ## 🔄 СХЕМА ВЗАИМОДЕЙСТВИЯ (ОБНОВЛЕНО) ``` ┌─ Пользователь │ ├─ deepseek_client.py │ │ │ └─ modules/deepseek_api.get_weather_response() │ │ │ └─ Deepseek API (анализ + function calling) │ │ │ ├─ Погода │ │ └─ modules/weather_api │ │ └─ OpenWeatherMap API │ │ │ ├─ Файлы │ │ └─ modules/file_api │ │ └─ локальная ФС │ │ │ └─ Начисления (NEW) │ └─ modules/deepseek_api.query_accruals_api() │ └─ httpx GET/POST │ └─ fastapi_udalennii (192.168.0.137:8000) │ └─ PostgreSQL (192.168.0.134:5432) │ └─ Финальный ответ ``` ## ✨ КЛЮЧЕВЫЕ УЛУЧШЕНИЯ ### v0.2.0 - Распределённая архитектура ✅ **Асинхронные HTTP запросы** через httpx ✅ **Удалённое хранилище** данных (PostgreSQL) ✅ **REST API для accruals** на удалённом FastAPI ✅ **Миграции БД** через Alembic ✅ **Валидация данных** через Pydantic ✅ **Полная статистика** по начислениям ### Архитектурные преимущества 1. **Масштабируемость** - удалённые сервисы независимы 2. **Надёжность** - отказ одного сервиса не сломает всё 3. **Модульность** - легко добавлять новые endpoints 4. **Масштабирование** - можно запустить несколько FastAPI workers 5. **Миграции** - управление схемой БД через Alembic ## 📝 ФАЙЛЫ, УДАЛЁННЫЕ В ПРОЦЕССЕ Следующие файлы удалены из репозитория (перенесены в удалённый сервис): - ❌ `modules/db.py` - локальная SQLAlchemy модель - ❌ `modules/db_loader.py` - загрузка Excel в БД - ❌ `modules/api.py` - локальный FastAPI сервер Эти функции теперь реализованы в `fastapi_udalennii/` на удалённом хосте. ## 🔗 НОВЫЕ КОНФИГУРАЦИОННЫЕ ПЕРЕМЕННЫЕ ```bash # Удалённая БД DATABASE_URL=postgresql://asx:asxAdmin1@192.168.0.134:5432/mydb # Удалённый FastAPI для начисления ACCRUALS_API_URL=http://192.168.0.137:8000 # Файловые операции ALLOWED_BASE_DIR=/path/to/allowed/dir ``` ## 📚 ДОКУМЕНТАЦИЯ - **README.md** - общая информация о проекте - **DEPLOYMENT_INSTRUCTIONS.md** - инструкции по развёртыванию (NEW) - **fastapi_udalennii/README.md** - инструкции для удалённого API - **REFACTORING_SUMMARY.md** - эта файл 4. ✅ Обработка ошибок - Все функции имеют полную обработку ошибок - Логирование на всех уровнях 5. ✅ Разделение ответственности - deepseek_client.py - только интерфейс пользователя - modules/deepseek_api.py - логика работы с API - modules/weather_api.py - логика получения данных о погоде - modules/config.py - конфигурация # 🎯 ДОБАВЛЕНИЕ НОВЫХ ФУНКЦИЙ Чтобы добавить новую функцию (например, качество воздуха): 1. Добавьте функцию в modules/weather_api.py 2. Добавьте инструмент в modules/deepseek_api.get_weather_tools() 3. Добавьте обработку в modules/deepseek_api.process_deepseek_response() 4. Добавьте инструмент MCP в server.py Пример минимальных изменений для новой функции: - 1 функция в weather_api.py (~15-20 строк) - 1 инструмент в get_weather_tools() (~15 строк) - 1 проверка в process_deepseek_response() (~3 строки) - 1 декоратор в server.py (~5 строк) # 📊 СТАТИСТИКА ПРОЕКТА Файлы модулей: - config.py ~60 строк (конфигурация) - weather_api.py ~250 строк (работа с OpenWeatherMap) - deepseek_api.py ~180 строк (работа с Deepseek) - **init**.py ~20 строк (инициализация пакета) Основные файлы: - deepseek_client.py ~60 строк (интерактивный клиент) - server.py ~40 строк (MCP сервер) Документация: - README.md ~250 строк (подробная инструкция) # 🔐 БЕЗОПАСНОСТЬ ✓ API ключи хранятся в .env файле (не в коде) ✓ Валидация конфигурации при старте приложения ✓ Обработка всех типов ошибок API ✓ Логирование всех операций для отладки # 🚀 ГОТОВО К ИСПОЛЬЗОВАНИЮ Проект полностью рефакторен и готов к использованию: ✓ Модульная архитектура ✓ Полная документация ✓ Комментарии ко всем функциям ✓ Обработка ошибок ✓ Логирование ✓ Конфигурация ✓ Примеры использования в README Следующие шаги для расширения: - Добавить кеширование результатов API - Добавить более сложные инструменты (качество воздуха, УФ индекс) - Добавить веб-интерфейс - Добавить тесты """

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/ASXRND/MCP_deepseek'

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