Skip to main content
Glama
ElenaBelyasnik

vpf08-library-mcp

📚 Библиотека — 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-инструментов

🛠 Установка

  1. Создайте виртуальное окружение:

    python -m venv venv
  2. Активируйте виртуальное окружение:

    • Windows:

      venv\Scripts\activate
    • Linux/macOS:

      source venv/bin/activate
  3. Установите зависимости:

    pip install -r requirements.txt
  4. Настройте переменные окружения:

    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-инструменты

Инструмент

Описание

Аргументы

list_books()

Возвращает все книги

нет

find_book(title)

Поиск по названию

title — строка

find_books_by_author(author)

Поиск по автору

author — строка

find_books_by_genre(genre)

Поиск по жанру

genre — строка

add_book(title, author, genre, year)

Добавить книгу

title, author, genre, year

calculate(expression)

Безопасный калькулятор

expression — строка

💻 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"

Команды бота:

Команда

Описание

Пример использования

/start

Начать новый диалог, показать главное меню

\/start

/help

Показать справку по всем командам

\/help

/history

Показать историю диалога (последние 10 сообщений)

\/history

/clear

Очистить историю диалога, сбросить состояние

\/clear

/exit

Остановить бота

\/exit

/all_books

Показать все книги из каталога

\/all_books

/find_book

Поиск книги по названию

\/find_book → введите название

/find_author

Поиск книг по автору

\/find_author → введите имя автора

/find_genre

Поиск книг по жанру

\/find_genre → введите жанр

/add_book

Добавить новую книгу в каталог

\/add_book → введите название

/calc

Математический калькулятор

\/calc → введите выражение

Как работают команды:

📚 Просмотр каталога:

  • \/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.

Текстовые команды:

Помимо команд с /, бот понимает обычные текстовые команды на русском и английском:

Действие

Текстовые команды

📚 Все книги

список книг, покажи все книги, каталог, all books, all_books

🔍 Найти по названию

найди книгу, найди книгу по названию, find book, find_book

👤 Найти по автору

найди по автору, поиск по автору, find author, find_author

📖 Найти по жанру

найди по жанру, поиск по жанру, find genre, find_genre

➕ Добавить книгу

добавь новую книгу, добавить книгу, add book, add_book

🧮 Калькулятор

сколько будет 10*5, калькулятор, calc 10*5

🗑️ Очистить

очистить, clear

🚪 Выйти

выйти, выход, exit

Как работает:

  1. Пользователь получает главное меню при /start

  2. Команды из словаря обрабатываются мгновенно (без LLM)

  3. Свободные фразы отправляются в LLM с историей диалога (контекст помнит 10 сообщений)

  4. При поиске по названию бот показывает обложку книги (через Open Library API)

  5. Если обложка не найдена — показывается дефолтная обложка с emoji 📕

  6. Состояние диалога отслеживается для многошаговых операций (добавление книги)

  7. Поиск в БД не зависит от регистра и падежей («войну» найдёт «Война»)

  8. Все команды регистрируются в Telegram автоматически при запуске (set_my_commands)

🔌 API Endpoints

Метод

Endpoint

Описание

GET

/health

Проверка работоспособности

GET

/tools/list_books

Список всех книг

GET

/tools/find_book?title=...

Поиск по названию

GET

/tools/find_books_by_author?author=...

Поиск по автору

GET

/tools/find_books_by_genre?genre=...

Поиск по жанру

POST

/tools/add_book

Добавить книгу (JSON)

POST

/tools/calculate

Калькулятор (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

Команды:

Команда

Описание

Статус

/start

Приветствие и меню

/help

Справка по командам

/clear

Очистка истории диалога

/exit

Остановка бота

Текстовые команды:

Команда

Результат

Статус

список книг

Список книг из БД

найди книгу по названию

Поиск с обложкой

найди по автору

Список книг автора

найди по жанру

Список книг жанра

добавь новую книгу

Пошаговый ввод

калькулятор

Результат вычисления

выйти

Бот остановлен

Функции:

  • ✅ Текстовые команды (рус/англ) + свободная речь через LLM

  • ✅ Контекст диалога (/history, «ещё раз»)

  • ✅ Пошаговый ввод параметров + добавление одной фразой

  • ✅ Обложки книг (Open Library API)

  • ✅ Дефолтная обложка при отсутствии

  • ✅ Состояние диалога (state machine)

  • ✅ Кнопки выбора жанра

  • ✅ Работа через прокси (TELEGRAM_PROXY_URL)

5. Проверка логирования

  • ✅ Логи записываются в mcp_server/library.log

  • ✅ Логи содержат информацию о запуске, инициализации БД и запросах

  • ✅ Консольный вывод минимизирован (только запуск/остановка сервера)

📋 Чек-лист результатов

Компонент

Тест

Статус

Сервер

Запуск без ошибок

Создание БД

Эндпоинт /docs

Эндпоинт /tools/*

Эндпоинт /health

Логирование в файл

CLI-клиент

Все 21 тест

Telegram-бот

Главное меню

Текстовые команды

Пошаговый ввод

Обложки книг

Команда /exit


💻 Технологии

  • Python 3.11+

  • FastAPI — веб-фреймворк

  • SQLite — база данных

  • pyTelegramBotAPI — Telegram-бот

  • OpenAI API (ProxyAPI) — LLM fallback для свободной речи

  • requests — HTTP-запросы

  • colorama — цветной вывод в CLI

📝 Примечания

  • База данных автоматически инициализируется при первом запуске сервера (30 тестовых книг)

  • Telegram-бот требует настроенного токена в .env

  • LLM 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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server that allows searching and retrieving book information from Aladin's book store API, including book details, bestseller lists, and category-based searches.
    9
    4
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that exposes tools for querying a bookstore inventory, allowing AI agents to search and retrieve book information via the Model Context Protocol.
    225
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A library management MCP server supporting book search, member management, and loan operations through natural language commands.
    13
    4
    MIT

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/ElenaBelyasnik/vpf08-library-mcp'

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