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.
Related MCP Servers
- Flicense-qualityDmaintenanceExposes Monobank personal account data through MCP tools, allowing users to fetch client info, accounts, and jars. It also enables retrieving account statements for specific time periods.Last updated
- Alicense-qualityCmaintenancePer-call billing and metering proxy for MCP tool servers. Providers set pricing via the open MCP Billing Spec (MIT), consumers pay through Stripe Connect with signed receipts and SLA monitoring.Last updatedMIT
- AlicenseBqualityDmaintenanceManage VPS, domains, DNS, billing, and execute SSH commands from any MCP-compatible client. 27 tools + full API discovery across 500+ OVH endpoints.Last updated272MIT
- AlicenseCqualityDmaintenanceEnables interaction with Monarch Money data via MCP tools for accounts, budgets, and transactions.Last updated62954MIT
Related MCP Connectors
Wise (https://wise.com) MCP, multi-currency account access via Personal Token + SCA key. Reads profi
A paid remote MCP for AI SDK MCP gateway registry, built to return verdicts, receipts, usage logs, a
Official Sevalla MCP — full PaaS API access through just 2 tools.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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