Enables access to Excel files stored on Google Drive, providing cached retrieval and parsing of instrument data with automated synchronization capabilities
MCP-Сервер для Reality Calendar
https://github.com/user-attachments/assets/7f87c87e-10ac-43d2-ace2-c180b1a92d1a
Уровень 1
У нас есть Excel-файл, который лежит на Google-диске, в котором лежит список инструментов и ссылка на их описание. Для того, чтобы LLM могла взаимодействовать с этими данными, я решил использовать MCP-сервер. Но при каждом запросе от пользователя получать файлы с Диска, потом их парсить и преобразовывать долго + кол-во запросов к Диску может быть ограничено, поэтому для улучшения эффективности на сервере будет слой кэша, из которого он и будет брать информацию. Кэш будет обновляться при каждом перезапуске сервера + 1 раз в день на фоне. Слой кэша можно реализовать при помощи Redis, но тогда придется поднимать несколько контейнеров, а это дополнительная сложность при деплое. Поэтому на сервере будет лежать база SQLite, которая будет выступать в качестве кэша, а также хранилища воркеров для APScheduler, который отвечает за фоновую синхронизацию данных между файлом на Диске и кэшом. Также указано, что нужно использовать OpenWebUI, однако он не поддерживает работу с MCP-серверами напрямую, предлагая использовать OpenAI-прокси. Для этого понадобится пакет mcpo, который сможет превратить наш MCP-сервер в прокси OpenAI, которые может использовать OpenWebUI Для реализации всего этого я выбрал следующий стек:
Инструменты:
uv - пакетный менеджер для проекта
Пакеты:
mcp - официальный фреймворк для написания MCP-серверов на Python. Имеет поддержку дебагинга, что упростит тестирование.
googleclient (и еще куча пакетов от Google) - для работы с Google Drive API
SQLAlchemy - ORM для взаимодействия с базой данных
APScheduler - фреймворк для создания фоновых задач с интервалом по времени
Requests & BeautifulSoup - золотой стандарт для парсинга сайтов. Понадобятся для получения сведений об инструментах с их официальных страниц
Pydantic - для валидации данных внутри приложения
Openpyxl - для работы с Excel-файлами
mcpo - Для создания прокси OpenAI для OpenWebUI
Схема приложения

Уровень 2
Во время тестирования агента в OpenWebUI я столкнулся с одной проблемой - по какой-то причине, нейронки плохо распознают подключенные через прокси MCP. Возможно, проблема в моей конфигурации, а возможно в плохом прокси. В любом случае, подключение к OpenWebUI возможно, и инструменты отображаются в доступных, если попросить нейросети вызвать инструменты, то они действительно обращаются к инструментам и ресурсам.
Уровень 3
Собственно, ради этого мы тут и собрались. Все, что необходимо - в репозитории, для запуска необходим .env файл со следующими параметрами:
Для тестирования проекта можно воспользоваться командой uv run mcp dev app.py, которая запустит тестовый сервер, на котором в визуальном интерфейсе можно проверить на корректность функции.
Подключение к Google Диску
Нужно создать приложение в Google Cloud Platform, там включить Google Drive API, далее создать в разделе OAuth клиент Desktop для авторизации, и полученный файл credentials.json положить в ту же папку, что и main.py, а далее приложение само вызовет окно авторизации в Google-аккаунте, и создаст token.json, который в дальнейшем будет использоваться для авторизации
This server cannot be installed