vpf08-library-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@vpf08-library-mcpfind me books by J.K. Rowling"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
📚 Библиотека — MCP-проект
MCP-проект для управления каталогом книг, состоящий из MCP-сервера, CLI-клиента и Telegram-бота.
📋 Содержание
Related MCP server: MCP Open Library & File Search Server
📁 Структура проекта
├── .env.example # Пример конфигурации
├── .gitignore # Игнорируемые файлы
├── requirements.txt # Зависимости Python
├── README.md # Этот файл
├── TEST_RESULTS.md # Результаты тестирования
├── TEST_PLAN_v1.2.0.md # План тестирования LLM-контекста (v1.2.0)
├── ProgressOfWork.md # Журнал работы
├── mcp_server/
│ ├── __init__.py
│ ├── server.py # FastAPI сервер
│ ├── db.py # Работа с SQLite
│ ├── tools.py # MCP-инструменты
│ └── library.db # База данных (создаётся автоматически)
├── cli_client.py # CLI-клиент для тестирования
└── telegram_bot/
├── __init__.py
├── bot.py # Telegram-бот (словарь команд + state machine)
├── llm.py # LLM fallback (GPT с историей диалога)
├── config.py # Загрузка .env
└── mcp_client.py # Вызов MCP-инструментов🛠 Установка
Создайте виртуальное окружение:
python -m venv venvАктивируйте виртуальное окружение:
Windows:
venv\Scripts\activateLinux/macOS:
source venv/bin/activate
Установите зависимости:
pip install -r requirements.txtНастройте переменные окружения:
copy .env.example .env # Windows cp .env.example .env # Linux/macOSОтредактируйте
.env, указав свои значения API-ключей и токена бота.
🚀 Запуск
1. MCP-сервер
python mcp_server/server.pyСервер запускается на http://localhost:8000. Логи записываются в mcp_server/library.log.
2. CLI-клиент
python cli_client.pyКлиент подключается к запущенному MCP-серверу и работает через интерактивное нумерованное меню.
3. Telegram-бот
python telegram_bot/bot.pyБот запускается и ожидает сообщения от пользователей.
⚠️ Если бот не запускается с ошибкой
Read timed out— Telegram API недоступен в вашей сети. Укажите прокси в.env:TELEGRAM_PROXY_URL=http://127.0.0.1:8080Также можно увеличить таймаут:
TELEGRAM_TIMEOUT=60
🧰 MCP-инструменты
Инструмент | Описание | Аргументы |
| Возвращает все книги | нет |
| Поиск по названию |
|
| Поиск по автору |
|
| Поиск по жанру |
|
| Добавить книгу |
|
| Безопасный калькулятор |
|
💻 CLI-клиент
CLI-клиент использует структурированное нумерованное меню для взаимодействия с сервером.
Возможности:
📚 Показать все книги — каталог с пагинацией
🔍 Найти книгу по названию — поиск по ключевым словам
👤 Найти книгу по автору — поиск по имени автора
📖 Найти книгу по жанру — выбор из списка доступных жанров
➕ Добавить книгу — пошаговый ввод (название → автор → жанр → год)
🧮 Калькулятор — вычисление математических выражений
📊 Статистика — общее количество книг и жанров
🧹 Очистка БД — удаление всех книг (с подтверждением)
Пример работы:
📚 Библиотека — CLI клиент
Выберите действие:
1. 📚 Показать все книги
2. 🔍 Найти книгу по названию
3. 👤 Найти книгу по автору
4. 📖 Найти книгу по жанру
5. ➕ Добавить книгу
6. 🧮 Калькулятор
7. 📊 Статистика
8. 🧹 Очистить БД
0. Выйти
📖 > 1🤖 Telegram-бот
Telegram-бот использует гибридный подход:
Детерминированные команды — словарь точных команд (быстро, без API-запросов)
LLM fallback — если команда не распознана, фраза отправляется в GPT вместе с историей диалога (понимает свободную речь и контекст)
Память диалога — бот помнит последние 10 сообщений, умеет показывать историю (
/history) и повторять последнее действие («ещё раз»)
Возможности:
📚 Показать все книги — текстовый список
🔍 Найти книгу по названию — с обложкой (из Open Library API)
👤 Найти книгу по автору — текстовый список
📖 Найти книгу по жанру — выбор из списка жанров или ввод текстом
➕ Добавить книгу — пошаговый ввод (название → автор → жанр с кнопками → год)
🧮 Калькулятор — вычисление выражений
🗑️ Очистить историю — сброс состояния
🚪 Выйти — остановка бота
Приветствие бота:
👋 Привет! Я бот для работы с базой данных книг.
Я могу помочь Вам:
▪️ Показать все книги
▪️ Найти книгу по названию
▪️ Найти книгу по автору
▪️ Найти книгу по жанру
▪️ Добавить новую книгу
▪️ Выполнить математические вычисления
Просто напишите мне, что Вы хотите сделать, например:
▪️ /all_books или "покажи все книги"
▪️ /find_book или "найди книгу по названию"
▪️ /find_author или "найди книгу по автору"
▪️ /find_genre или "найди книгу по жанру"
▪️ /add_book или "добавь новую книгу"
▪️ /calc 10*5 или "сколько будет 10*5"Команды бота:
Команда | Описание | Пример использования |
| Начать новый диалог, показать главное меню |
|
| Показать справку по всем командам |
|
| Показать историю диалога (последние 10 сообщений) |
|
| Очистить историю диалога, сбросить состояние |
|
| Остановить бота |
|
| Показать все книги из каталога |
|
| Поиск книги по названию |
|
| Поиск книг по автору |
|
| Поиск книг по жанру |
|
| Добавить новую книгу в каталог |
|
| Математический калькулятор |
|
Как работают команды:
📚 Просмотр каталога:
\/all_books— мгновенно показывает список всех книг
🔍 Поиск:
\/find_book→ бот просит ввести название → показывает результат с обложкой\/find_author→ бот просит ввести имя автора → показывает список\/find_genre→ бот показывает кнопки с жанрами из БД → выбираете жанр
➕ Добавление книги:
\/add_book→ пошаговый ввод: название → автор → жанр (кнопки) → год (опционально)Или одной фразой через LLM:
добавь книгу Метро 2033, Глуховский, фантастика, 2002
🧮 Калькулятор:
\/calc→ введите математическое выражение (например:10 * 5 + 3)Или сразу:
сколько будет 2+2*3,calc 10*5, просто2+2*3
📜 История диалога:
\/history— показать последние 10 сообщенийещё раз/повтори— повторить последнее действие
⚙️ Управление:
\/clear— сбросить текущую операцию\/exit— завершить работу бота\/help— показать полную справку
Свободная речь (LLM):
Если фраза не входит в словарь команд, бот отправляет её в GPT вместе с историей диалога. LLM возвращает JSON с действием, бот выполняет его через MCP-инструменты:
Запрос | Что делает LLM |
«что есть у Пушкина?» | → поиск по автору «Пушкин» |
«найди фантастику» | → поиск по жанру «Sci-Fi» (LLM знает жанры из БД!) |
«найди Войну и мир» | → поиск по названию «Война и мир» (нормализует падежи) |
«а ещё раз покажи» | → повторяет предыдущий запрос из контекста |
«добавь Мастер и Маргарита, Булгаков, роман» | → добавляет книгу одной фразой |
«что ты умеешь?» | → отвечает текстом о возможностях |
💡 Известные команды обрабатываются словарём без обращения к LLM — мгновенно и без расхода API.
Текстовые команды:
Помимо команд с /, бот понимает обычные текстовые команды на русском и английском:
Действие | Текстовые команды |
📚 Все книги |
|
🔍 Найти по названию |
|
👤 Найти по автору |
|
📖 Найти по жанру |
|
➕ Добавить книгу |
|
🧮 Калькулятор |
|
🗑️ Очистить |
|
🚪 Выйти |
|
Как работает:
Пользователь получает главное меню при
/startКоманды из словаря обрабатываются мгновенно (без LLM)
Свободные фразы отправляются в LLM с историей диалога (контекст помнит 10 сообщений)
При поиске по названию бот показывает обложку книги (через Open Library API)
Если обложка не найдена — показывается дефолтная обложка с emoji 📕
Состояние диалога отслеживается для многошаговых операций (добавление книги)
Поиск в БД не зависит от регистра и падежей («войну» найдёт «Война»)
Все команды регистрируются в Telegram автоматически при запуске (
set_my_commands)
🔌 API Endpoints
Метод | Endpoint | Описание |
|
| Проверка работоспособности |
|
| Список всех книг |
|
| Поиск по названию |
|
| Поиск по автору |
|
| Поиск по жанру |
|
| Добавить книгу (JSON) |
|
| Калькулятор (JSON) |
🧪 Протокол тестирования
1. Подготовка
✅ Убедитесь, что все зависимости установлены:
pip install -r requirements.txt✅ Проверьте, что файл
.envсоздан и содержит корректные ключи✅ База данных
library.dbсоздаётся автоматически при первом запуске сервера
2. Тестирование MCP-сервера
Запуск:
python mcp_server/server.pyПроверки:
✅ Сервер запускается без ошибок
✅ В папке
mcp_server/создаётся файлlibrary.db✅ Документация FastAPI доступна по адресу:
http://127.0.0.1:8000/docs✅ Эндпоинты
/tools/*возвращают данные в формате JSON✅ Эндпоинт
/healthвозвращает{"status": "ok"}✅ Логи записываются в
mcp_server/library.log
3. Тестирование CLI-клиента
Запуск:
python cli_client.pyТестовые запросы:
Действие | Результат | Статус |
Показать все книги | Список книг из БД (30+) | ✅ |
Найти книгу по названию | Информация о книге | ✅ |
Найти книгу по автору | Список книг автора | ✅ |
Найти книгу по жанру | Список книг в жанре | ✅ |
Добавить книгу | Сообщение об успешном добавлении | ✅ |
Калькулятор | Результат вычисления | ✅ |
Статистика | Количество книг и жанров | ✅ |
Очистить БД | БД очищена (с подтверждением) | ✅ |
Выйти | Выход из программы | ✅ |
Результат: CLI-клиент работает корректно, все 21 тест пройден.
4. Тестирование Telegram-бота
Запуск:
python telegram_bot/bot.pyКоманды:
Команда | Описание | Статус |
| Приветствие и меню | ✅ |
| Справка по командам | ✅ |
| Очистка истории диалога | ✅ |
| Остановка бота | ✅ |
Текстовые команды:
Команда | Результат | Статус |
| Список книг из БД | ✅ |
| Поиск с обложкой | ✅ |
| Список книг автора | ✅ |
| Список книг жанра | ✅ |
| Пошаговый ввод | ✅ |
| Результат вычисления | ✅ |
| Бот остановлен | ✅ |
Функции:
✅ Текстовые команды (рус/англ) + свободная речь через LLM
✅ Контекст диалога (/history, «ещё раз»)
✅ Пошаговый ввод параметров + добавление одной фразой
✅ Обложки книг (Open Library API)
✅ Дефолтная обложка при отсутствии
✅ Состояние диалога (state machine)
✅ Кнопки выбора жанра
✅ Работа через прокси (TELEGRAM_PROXY_URL)
5. Проверка логирования
✅ Логи записываются в
mcp_server/library.log✅ Логи содержат информацию о запуске, инициализации БД и запросах
✅ Консольный вывод минимизирован (только запуск/остановка сервера)
📋 Чек-лист результатов
Компонент | Тест | Статус |
Сервер | Запуск без ошибок | ✅ |
Создание БД | ✅ | |
Эндпоинт | ✅ | |
Эндпоинт | ✅ | |
Эндпоинт | ✅ | |
Логирование в файл | ✅ | |
CLI-клиент | Все 21 тест | ✅ |
Telegram-бот | Главное меню | ✅ |
Текстовые команды | ✅ | |
Пошаговый ввод | ✅ | |
Обложки книг | ✅ | |
Команда /exit | ✅ |
💻 Технологии
Python 3.11+
FastAPI — веб-фреймворк
SQLite — база данных
pyTelegramBotAPI — Telegram-бот
OpenAI API (ProxyAPI) — LLM fallback для свободной речи
requests — HTTP-запросы
colorama — цветной вывод в CLI
📝 Примечания
База данных автоматически инициализируется при первом запуске сервера (30 тестовых книг)
Telegram-бот требует настроенного токена в
.envLLM fallback использует
OPENAI_API_KEYиз.env(ProxyAPI); без ключа бот работает в детерминированном режимеЕсли
api.telegram.orgнедоступен напрямую — укажитеTELEGRAM_PROXY_URLв.envОбложки книг подтягиваются из Open Library API (
covers.openlibrary.org)При отсутствии обложки показывается дефолтная SVG-обложка с emoji 📕
Логи хранятся в
mcp_server/library.log
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for Russian books search, details, and recommendation candidates.
MCP server for Project Gutenberg — 75,000+ public-domain ebooks with full plain-text retrieval.
Read-only MCP server exposing a user ORANO library to their own AI agent.
Read-only MCP server for verified book recommendations and reading lists.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that allows searching and retrieving book information from Aladin's book store API, including book details, bestseller lists, and category-based searches.94MIT
- AlicenseBqualityDmaintenanceMCP server that enables searching books by author via Open Library API and searching keywords inside local text files.2141 npmMIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that exposes tools for querying a bookstore inventory, allowing AI agents to search and retrieve book information via the Model Context Protocol.339 npm1MIT
- AlicenseAqualityDmaintenanceA library management MCP server supporting book search, member management, and loan operations through natural language commands.134MIT