---
name: tbank-login
description: |
  Как залогиниться в T-Bank MCP и управлять сессией. Используй когда пользователь
  хочет войти, залогиниться, авторизоваться, или когда тулы возвращают SESSION EXPIRED /
  NO_SESSION. Также срабатывает при «я хочу посмотреть счета» (если сессии ещё нет).
  НЕ срабатывает для переводов, заказов, аналитики — только логин + управление сессией.
---

# Логин и управление сессией T-Bank MCP

## Инструменты

| Тул | Что делает |
|---|---|
| `login(phone)` | Начинает SSO-логин. Отправляет SMS OTP. Возвращает какой шаг следующий (otp/password/pin). |
| `confirm_otp(otp)` | Отправляет SMS-код. |
| `confirm_password(password)` | Отправляет пароль аккаунта (первый логин на новом устройстве). |
| `confirm_pin(pin)` | Отправляет PIN (re-auth). |
| `refresh_session()` | Обновить сессию без OTP. Единый тул: способ выбирается сам. |
| `session_status()` | Проверить жива ли сессия. |
| `keepalive()` | Пинг — продлевает сессию (~2ч TTL). |
| `push_unread_count()` | Число непрочитанных push-уведомлений. |

## Флоу первого логина

1. `login(phone)` → SMS отправлена
2. Пользователь сообщает SMS-код → `confirm_otp(code)`
3. Если банк просит пароль → `confirm_password(password)`
4. session.json сохранён. Готово.

## Обновление сессии (SESSION EXPIRED / NO_SESSION)

Access-токен живёт ~2ч. `ensure_fresh()` освежает сессию сам на первом вызове
каждого флоу, поэтому вручную refresh нужен только если тул вернул `SESSION EXPIRED`.

1. Вызови `refresh_session()` — это **единый** тул обновления: способ он выберет
   сам и обойдётся без OTP и пароля.
2. Повтори упавший тул.
3. Если `refresh_session()` вернул `REAUTH_REQUIRED` — оба пути истекли. Скажи
   пользователю: нужен полный логин (`login(phone)` + OTP + пароль). НЕ пытайся
   обновлять дальше и не зацикливайся.

## Где хранится сессия

- Канонический путь: `~/.local/share/tbank-mcp/session.json` (права 0600).
  Переопределяется env `TBANK_SESSION`.
- `login_cli.py` и MCP-сервер читают **один и тот же** файл — ручная настройка
  пути не нужна.
- Сессия переживает перезапуск MCP: после рестарта токен не считается свежим
  только потому, что процесс новый, — если он устарел, обновление произойдёт само.
