Selectel Billing MCP Server
Click on "Install 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., "@Selectel Billing MCP ServerGet my current balance"
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.
Selectel MCP Server
MVP MCP-сервера для получения балансов Selectel через сервисного пользователя.
Возможности
Подключение аккаунта Selectel один раз через
.env, REST API или MCP toolАвтоматическое обновление токена Selectel (24 часа) без участия пользователя
MCP tools
connect_selectel_account,get_balanceиget_balance_predictionAudit log всех вызовов MCP tools
Related MCP server: Agent Bazaar
Стек
Python 3.12+
FastAPI
PostgreSQL
SQLAlchemy 2.x
Alembic
Pydantic Settings
httpx
MCP (Streamable HTTP transport)
Docker / Docker Compose
Структура проекта
app/
├── main.py # FastAPI + MCP mount
├── mcp_stdio.py # Stdio entry point для Hermes Agent
├── config.py # Настройки из env
├── db.py # SQLAlchemy engine/session
├── models.py # ORM-модели
├── schemas.py # Pydantic-схемы API
├── selectel_client.py # Клиент Selectel API
├── mcp_tools.py # MCP tools
├── api/
│ └── users.py # REST API подключения аккаунта
├── services/
│ ├── balance_formatter.py
│ └── credentials_service.py
└── tests/
└── test_balance_formatter.py
alembic/ # Миграции БД
Dockerfile
docker-compose.yml
requirements.txtБыстрый старт
1. Создайте .env
cp .env.example .envЗаполните учётные данные Selectel (один раз):
DEFAULT_USER_ID=default
SELECTEL_ACCOUNT_ID=12345
SELECTEL_SERVICE_USER_NAME=svc-user
SELECTEL_SERVICE_USER_PASSWORD=your-passwordПри старте сервис сохранит их в БД. Дальше авторизация и обновление токена выполняются автоматически.
2. Запуск через Docker Compose
docker compose up --buildСервисы:
app— http://localhost:8000postgres— localhost:5432
Миграции применяются автоматически при старте контейнера app.
3. Локальный запуск (без Docker)
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# PostgreSQL должен быть доступен
export DATABASE_URL=postgresql://postgres:postgres@localhost:5432/selectel_mcp
alembic upgrade head
uvicorn app.main:app --reloadОдноразовая настройка и автоматическая авторизация
Вы передаёте account_id, service_user_name и service_user_password один раз. Сервер:
Сохраняет credentials в PostgreSQL
Получает токен Selectel (живёт ~24 часа)
Кеширует токен в БД
Автоматически обновляет токен по логину/паролю из БД, когда он истекает
При
401сбрасывает токен и запрашивает новый без вашего участия
Способ 1: через .env (рекомендуется для одного аккаунта)
DEFAULT_USER_ID=default
SELECTEL_ACCOUNT_ID=12345
SELECTEL_SERVICE_USER_NAME=svc-user
SELECTEL_SERVICE_USER_PASSWORD=your-passwordСпособ 2: через MCP tool connect_selectel_account
{
"account_id": "12345",
"service_user_name": "svc-user",
"service_user_password": "your-password"
}user_id опционален, если задан DEFAULT_USER_ID в .env.
Способ 3: через REST API
curl -X POST http://localhost:8000/users/demo-user/selectel-credentials \
-H "Content-Type: application/json" \
-d '{
"account_id": "12345",
"service_user_name": "svc-user",
"service_user_password": "password"
}'После любого из способов достаточно вызывать get_balance — без повторной передачи пароля.
Подключение пользователя (REST API)
curl -X POST http://localhost:8000/users/demo-user/selectel-credentials \
-H "Content-Type: application/json" \
-d '{
"account_id": "12345",
"service_user_name": "svc-user",
"service_user_password": "password"
}'Логика endpoint:
Получает токен Selectel по логину и паролю сервисного пользователя
Выполняет тестовый запрос баланса
При успехе сохраняет credentials в БД
Возможные ошибки:
400— неверный логин или пароль403— нет доступа к балансу502— проблемы с Selectel API
Подключение в Cursor
Запустите сервис:
docker compose up --buildНастройте credentials в
.envили вызовитеconnect_selectel_accountодин разВ проекте уже есть
.cursor/mcp.json:
{
"mcpServers": {
"selectel": {
"url": "http://localhost:8000/mcp"
}
}
}Откройте этот проект в Cursor (или добавьте блок
selectelв~/.cursor/mcp.jsonдля всех проектов)Cursor Settings → Tools & MCP — убедитесь, что сервер
selectelв статусе connected (зелёный)Если не подключается — перезапустите Cursor и проверьте
curl http://localhost:8000/health
В чате можно спросить: «Проверь мой баланс в Selectel» — агент вызовет get_balance без передачи пароля.
Нужен Cursor 0.48+ (поддержка Streamable HTTP).
Подключение в Hermes Agent
Hermes удобнее подключается через stdio — агент сам запускает MCP-процесс, без Docker и PostgreSQL.
Вариант 1: stdio (рекомендуется)
git clone https://github.com/EduardGuselnikov/mcp_selectel_billing.git
cd mcp_selectel_billing
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtДобавьте в ~/.hermes/config.yaml:
mcp_servers:
selectel:
command: "/absolute/path/to/mcp_selectel_billing/.venv/bin/python"
args: ["-m", "app.mcp_stdio"]
env:
DATABASE_URL: "sqlite:////Users/you/.hermes/selectel-mcp.db"
DEFAULT_USER_ID: "default"
SELECTEL_ACCOUNT_ID: "12345"
SELECTEL_SERVICE_USER_NAME: "svc-user"
SELECTEL_SERVICE_USER_PASSWORD: "your-password"
tools:
resources: false
prompts: falseИли через CLI:
hermes mcp add selectel \
--command /absolute/path/to/mcp_selectel_billing/.venv/bin/python \
--args -m app.mcp_stdio \
--env DATABASE_URL=sqlite:////Users/you/.hermes/selectel-mcp.db \
--env DEFAULT_USER_ID=default \
--env SELECTEL_ACCOUNT_ID=12345 \
--env SELECTEL_SERVICE_USER_NAME=svc-user \
--env SELECTEL_SERVICE_USER_PASSWORD=your-passwordПроверка:
hermes mcp test selectel
hermes mcp listВ чате Hermes: «Проверь мой баланс в Selectel».
Готовый манифест для каталога Hermes: hermes/manifest.yaml. Примеры конфигурации: hermes/config.example.yaml.
Вариант 2: HTTP (если уже запущен Docker)
mcp_servers:
selectel:
url: "http://localhost:8000/mcp"Перед использованием: docker compose up --build и credentials в .env.
MCP tools
MCP endpoint: http://localhost:8000/mcp
Открытие
/mcpв браузере может не показать страницу — это нормально, MCP работает через POST (JSON-RPC), а не через обычный GET.
connect_selectel_account (один раз)
{
"account_id": "12345",
"service_user_name": "svc-user",
"service_user_password": "password"
}get_balance
{}или с явным user_id:
{
"user_id": "demo-user"
}Если задан DEFAULT_USER_ID в .env, user_id можно не передавать.
get_balance_prediction
Оценка, на сколько хватит текущего баланса (в часах по категориям услуг). API: GET /v2/billing/prediction (документация Selectel).
{}Пример ответа:
Прогноз: на сколько хватит текущего баланса при текущем потреблении.
• Облачные серверы и основные услуги: 4 дн. 4 ч.
• Объектное хранилище: средств недостаточно
• VMware: 1 дн.
• VPC: 5 ч.Возвращает человекочитаемый текст с балансами по agreement_id.
Пример ответа:
На аккаунте Selectel найдены балансы в валюте RUB.
ID договора: 263632, тип биллинга: primary
• Бонусный баланс: 36 614,64 ₽
• VK-баланс: 0 ₽
• Основной баланс: 5,14 ₽
Сумма балансов: 36 619,78 ₽
Задолженность: 0 ₽
Итоговый доступный баланс: 36 619,78 ₽
Режим оплаты: prepayHealth check
curl http://localhost:8000/healthТесты
pytestПеременные окружения
Переменная | Описание |
| URL PostgreSQL |
| Пользователь по умолчанию для |
| ID аккаунта Selectel (одноразовая настройка через |
| Логин сервисного пользователя |
| Пароль сервисного пользователя |
| URL авторизации Selectel |
| URL API балансов |
| URL API прогноза баланса |
| Таймаут HTTP-запросов |
Безопасность
Авторизация в Selectel выполняется по логину и паролю сервисного пользователя
Пароли и токены не логируются
API не возвращает пароль и токен
Управление токенами Selectel
Токен Selectel живёт ~24 часа — это ограничение API Selectel, не MCP-сервера
Сервер кеширует токен в БД и обновляет его автоматически по сохранённому паролю
Срок кеша:
now() + 23 hours(запас 1 час до обновления)При
401 Unauthorizedтокен сбрасывается и запрос повторяется автоматическиПользователю не нужно повторно передавать credentials после первоначальной настройки
Дальнейшее расширение
Архитектура готова к добавлению:
услуг
счетов
расходов
отчётов
аналитики
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/EduardGuselnikov/mcp_selectel_billing'
If you have feedback or need assistance with the MCP directory API, please join our Discord server