Skip to content
Agentmart
Submit a tool

T-Bank MCP

T-Bank (Т-Банк) mobile banking: accounts, cards, transfers, bill pay, grocery, tickets, travel

Connector by icyberdeveloper · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 38
Write a review

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/icyberdeveloper-tbank-mcp

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

T-Bank (Т-Банк) mobile banking: accounts, cards, transfers, bill pay, grocery, tickets, travel

Use cases: payments-billing, finance-accounting

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 25, 2026.

Tools
19 read · 31 write · 0 delete · 40 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Tools by what they do 90

Read from the source code; the running server may list different tools.

Read 19 · Look things up without changing anything.

  • cinema_search
  • flight_search
  • get_data
  • grocery_good_info
  • grocery_plan_order
  • grocery_rank
  • grocery_search
  • hotel_info
  • hotel_search
  • list_accounts
  • list_cards
  • list_operations
Show 7 more tools
  • payment_attempts
  • payment_status
  • place_info
  • search_app
  • session_status
  • shop_search
  • train_search

Write 31 · Create, change, send or run things.

  • cinema_book
  • cinema_schedule
  • concert_schedule
  • confirm_otp
  • confirm_password
  • confirm_payment
  • confirm_pin
  • flight_book
  • grocery_add_to_cart
  • grocery_checkout
  • grocery_order_cancel
  • grocery_order_status
Show 19 more tools
  • grocery_set_cart
  • grocery_stores
  • login
  • messenger_messages
  • messenger_send
  • order_details
  • orders
  • pay_bill
  • place_schedule
  • push_unread_count
  • ticket_cancel
  • ticket_pay
  • train_book
  • train_pay
  • train_refund
  • transfer
  • transfer_requisites
  • transfer_sbp_resolve
  • travel_order_details

Not yet classified 40 · We could not tell from the name and description.

  • account_requisites
  • afisha_catalog
  • afisha_places
  • bank_documents
  • card_limits
  • card_operations
  • card_requisites
  • cinema_seats
  • concert_hall
  • debug_report
  • diagnostics
  • documents
Show 28 more tools
  • flight_history
  • flight_offer
  • flight_seats
  • flows
  • grocery_cart
  • insurance_policies
  • invest_accounts
  • invest_operations
  • invest_portfolio
  • invest_securities
  • keepalive
  • messenger_conversations
  • messenger_file
  • messenger_unread
  • operations_histogram
  • payment_commission
  • payment_providers
  • payment_qr
  • payment_receipt
  • refresh_session
  • shop_cart
  • spending_categories
  • ticket_qr
  • train_calendar
  • train_seats
  • travel_payment_options
  • travel_ticket_file
  • trips

Network hosts it talks to 23

  • api-common-gw.t-bank-app.ru · found in code
  • api-invest-gw.t-bank-app.ru · found in code
  • api-invest.t-bank-app.ru · found in code
  • api.t-bank-app.ru · found in code
  • api.tinsurance.ru · found in code
  • cx-evolution-api.t-bank-app.ru · found in code
  • github.com · found in code
  • glama.ai · found in code
  • hotels.t-bank-app.ru · found in code
  • id.t-bank-app.ru · found in code
  • id.tbank.ru · found in code
  • lifestyle.t-bank-app.ru · found in code
  • ms-loyalty-api.tinkoff.ru · found in code
  • my-home.tinkoff.ru · found in code
  • myauto.t-bank-app.ru · found in code
  • push-history-api.t-bank-app.ru · found in code
  • search.t-bank-app.ru · found in code
  • shortcuts.t-bank-app.ru · found in code
  • social-api.t-bank-app.ru · found in code
  • tbank.ru · found in code
  • tm.t-bank-app.ru · found in code
  • trains.t-bank-app.ru · found in code
  • webview.t-bank-app.ru · found in code

Files it touches

  • ~/.claude/skills
  • /etc/pki/tls/certs/ca-bundle.crt
  • /etc/ssl/ca-bundle.pem
  • /etc/ssl/cert.pem
  • /etc/ssl/certs/ca-certificates.crt
  • Your home directory (~)
  • ~/.local/share/tbank-mcp
  • ~/.local/share/tbank-mcp/attempts.jsonl
  • ~/.local/share/tbank-mcp/calls.jsonl
  • ~/.local/share/tbank-mcp/chat-files
  • ~/.local/share/tbank-mcp/events.jsonl
  • ~/.local/share/tbank-mcp/receipts
  • ~/.local/share/tbank-mcp/session.json
  • Any path the agent passes to its tools

Tools (90)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • account_requisites

    Реквизиты счёта для перевода извне: получатель, счёт, БИК, корсчёт, ИНН/КПП. account_id — из list_accounts(). currencies — через запятую (RUB,USD,EUR).

  • afisha_catalog

    Афиша вертикали за ПЕРИОД дат: что идёт с date_from по date_to. kind — "кино" | "концерт" | "театр". У выставок каталога по датам нет — для них search_app(screen="afisha") или place_schedule(). city обязателен (или city_id числом), даты — YYYY-MM-DD; одна дата = один день. Диапазон реально работает: неделя показывает заметно больше, чем сутки, — туда попадают разовые показы, которых в однодневной выдаче нет. У кино сеансы здесь НЕ приходят: их даёт cinema_schedule(event_id, date). У концертов и спектаклей ближайшие слоты видно сразу. query — фильтр по названию, местный.

  • afisha_places

    Площадки города: кинотеатры, залы, театры, музеи — с их objectId. Это единственный способ узнать objectId площадки, не заходя через какое-то событие в ней. Дальше objectId принимают cinema_schedule(object_id=…) — весь репертуар кинотеатра на день, — place_schedule() и place_info(). kind — "кино" | "концерт" | "театр" | "выставка". city обязателен (или city_id числом). query — фильтр по названию. Он МЕСТНЫЙ: у банка текстового поиска по площадкам нет, поэтому страницы читаются целиком до фильтрации. pages — сколько страниц по 100 прочитать.

  • bank_documents

    Справки, заказанные в банке (о движении средств, о доходах и т.п.).

  • card_limits

    Лимиты по карте (на покупки, на снятие) и сколько уже израсходовано. ucid — из list_cards().

  • card_operations

    Операции по КОНКРЕТНОЙ карте. card_id — поле id из list_cards(). Серверного фильтра по карте нет (API умеет только excludeCardIds), поэтому берутся операции за период и фильтруются по полю card. limit=0 — показать все за период. desc_len — ширина колонки описания (0 = описание целиком, обрезка помечена «…»).

  • card_requisites

    Реквизиты карты: держатель, срок, номер. ucid — из list_cards(). По умолчанию номер маскируется, а CVV не выводится вообще. reveal=True выдаёт ПОЛНЫЙ номер и CVV — этого достаточно, чтобы платить картой. Ставь его ТОЛЬКО когда пользователь явным текстом попросил показать полные реквизиты, и предупреди, что они попадут в переписку. «Покажи мою карту» — это не такая просьба.

  • cinema_book

    ЗАБРОНИРОВАТЬ места. Создаёт заказ, но НЕ платит — деньги списывает отдельный ticket_pay(). Неоплаченная бронь отваливается сама. kind — "кино" | "концерт" | "театр" | "выставка". seats — через запятую: для кино "7:10,7:11" (ряд:место из cinema_seats), для остальных — составные seatId из cinema_seats(kind=…) как есть. seat_type применяется ТОЛЬКО к кино: у трёх других вертикалей поля type в запросе нет вовсе — так в захвате. Покажи пользователю итоговую сумму со сбором ДО вызова ticket_pay.

  • cinema_schedule

    Сеансы кино на дату. date — YYYY-MM-DD. limit — сколько площадок/фильмов показать, 0 = все (по умолчанию 20). Городской режим (event_id+city, без cinema/around) может вернуть сотни кинотеатров разом — сузь cinema/around или подними limit, если нужно больше показанных по умолчанию 20. Три режима: - object_id БЕЗ event_id — ВЕСЬ репертуар кинотеатра на день, один запрос. Так и надо отвечать на «что идёт завтра в этом кинотеатре»: перебирать афишу города по фильму и дорого, и неполно — сегодняшний список не знает о фильме, который идёт только завтра. - event_id + object_id — один фильм в …

  • cinema_search

    Найти фильм в прокате и его eventId (нужен для cinema_schedule). query — часть названия; пусто = вся сегодняшняя афиша города (её видно целиком только при limit=0 — по умолчанию показаны первые 20). city — город афиши, ОБЯЗАТЕЛЕН: молчаливая Москва даёт правдоподобный список чужого города. Известно 65 городов; если нужного нет в таблице, передай city_id числом (его видно в ошибке и в выдаче площадок). Сам eventId от города не зависит. pages — сколько страниц афиши сканировать (по 30 фильмов; раньше потолок 8 страниц был зашит). Если шапка говорит «остальные НЕ проверены» — подними pages, limit…

  • cinema_seats

    Свободные места на сеансе. Денег не двигает. slot_id и object_id — из cinema_schedule()/concert_schedule(). row — показать только один ряд, max_price — потолок цены за место. kind — "кино" | "концерт" | "театр" | "выставка" (принимает и movie / concert / spectacle / exhibition). sector_id — показать один сектор; без него приходят все. limit — поднять кап показа (по умолчанию 40 мест / 24 номера в ряду; хвост «…ещё N» подсказывает значение). У кино места нумерованные — бронь идёт как "ряд:место". У остальных трёх вертикалей место опознаётся составным seatId, и его надо вернуть в cinema_book ЦЕ…

  • concert_hall

    Секторы со свободной рассадкой (входные билеты, фан-зоны). kind — "концерт" или "театр": у кино места нумерованные, а у выставок такого экрана в API нет вовсе. Только чтение: примера создания заказа именно с этого экрана в захвате нет, поэтому бронировать отсюда MCP не умеет — только смотреть наличие. Сами места с их seatId видны в cinema_seats(kind=…).

  • concert_schedule

    Показы концерта, спектакля или выставки: площадка, дата, slotId и objectId для cinema_seats(). kind — "концерт" | "театр" | "выставка". Кино сюда НЕ ходит: у него показы привязаны к дате, это cinema_schedule(event_id, date). object_id — сузить до одной площадки. limit — сколько площадок показать, 0 = все (по умолчанию 15). Даты в запросе нет — приходит всё будущее сразу, у гастрольных событий площадок может быть много. Даты в запросе нет: приходит всё будущее сразу, поэтому нужный день выбирай из напечатанного. event_id — из search_app(query, screen="afisha").

  • confirm_otp

    Отправить SMS-код.

  • confirm_password

    НЕ вызывай напрямую из чата: пароль аккаунта не должен проходить через агента. Этот тул существует для логин-CLI (tbank-mcp-login, в репозитории — login_cli.py), который читает пароль из терминала, невидимого модели. Если банк просит password (первый логин на новом устройстве) — попроси пользователя запустить tbank-mcp-login (или login_cli.py из репозитория).

Show 75 more tools
  • confirm_payment

    Подтвердить платёж, который банк держит на WAITING_CONFIRMATION (второй фактор). Это НЕ то же, что confirm_otp — тот подтверждает ЛОГИН и шлёт код в id.t-bank-app.ru/auth/step. Платёжный код идёт другим путём. Вызывай этот тул, когда transfer_requisites / transfer / pay_bill вернули «ТРЕБУЕТСЯ ПОДТВЕРЖДЕНИЕ»: спроси у пользователя код из SMS или пуша и передай attempt_id из того ответа и otp='<код>'. Код нигде не логируется. Продолжение берётся из журнала попытки по attempt_id (operationTicket, initialOperation, тип подтверждения) — новый платёж НЕ создаётся, повторно списать нельзя. Неверны…

  • confirm_pin

    Отправить PIN (re-auth).

  • debug_report

    Как этим MCP пользовались: какие тулы звали, в каком порядке, что получили в ответ и где застряли. Для отладки самого MCP, не для банковских задач. Пишется автоматически при каждом вызове любого тула (выключается TBANK_TRACE=0). Секретов и свободного текста в трассе нет — см. tbank_mcp/trace.py. runs — сколько последних запусков сервера взять (0 = все, что есть в файле). top — сколько строк показывать в каждом разделе. Что смотреть: «повторы» — один и тот же тул с теми же аргументами подряд. Агент не понял ответ. Это самый прямой указатель на плохую формулировку в докстринге. «ответ…

  • diagnostics

    Единая точка диагностики — БЕЗ секретов. Недавние redacted-события (checkout delivery/order/payment, оплата авиа, refresh сессии) ПЛЮС реестр попыток оплаты одним списком, чтобы после неопределённого исхода смотреть в одном месте. reconstruct попытку / найти последний подтверждённый шаг. Источник событий: ~/.local/share/tbank-mcp/events.jsonl; попыток — attempts.jsonl (полный вид — payment_attempts()). limit — сколько ПОСЛЕДНИХ событий показать (0 = все); шапка называет общее число, так что видно, сколько осталось за кадром.

  • documents

    Документы клиента: паспорт, загранпаспорт, ВУ, СНИЛС, ИНН, ОСАГО/КАСКО, ПТС/СТС. kind — фильтр по названию или коду (напр. "паспорт", "RusDriversLic"); пусто = все. В хранилище лежат и документы РОДСТВЕННИКОВ, которые клиент когда-то вводил — они отсеиваются по дате рождения; include_others=True покажет и их.

  • flight_book

    КУПИТЬ авиабилет. РЕАЛЬНЫЕ ДЕНЬГИ. Это ОДИН шаг: у авиа нет отдельной брони, вызов сразу оформляет и списывает. Подтверждение — кнопка: тул сам покажет «Оплатить/Отмена» с итоговой суммой. НЕ спрашивай «да/нет» текстом — покажи тариф, багаж и правила из flight_offer(), согласие даёт кнопка. Клиент без элиситации получает отказ, деньги при этом не двигаются. Исходов три, и тул различает их честно: билет оформлен → в ответе PNR и заказ; подписать оплату не удалось (нет активной сессии банка) → «ОПЛАТА НЕ ОТПРАВЛЕНА», деньги не двигались, можно повторить после refresh_session(); запрос ушёл, но …

  • flight_history

    История авиапоисков — и единственный источник кодов IATA с названиями. Резолвера «название → код» у банка нет, поэтому если пользователь называет город словами, ищи код здесь, а не подставляй по памяти. Технический нюанс: как и flight_search(), этот эндпоинт отвечает по мобильной сессии благодаря X-Travel-Context='mb' — заголовку, подобранному пробой вживую, а не увиденному в пассивном перехвате трафика.

  • flight_offer

    Тарифы, багаж и правила возврата по выбранному рейсу. offer_id — из flight_search(). Один рейс из выдачи разворачивается в несколько тарифов: та же дата и тот же борт, но разный багаж и разные правила возврата. Тул показывает их по возрастанию цены и нумерует — этот номер (fare=1, 2, …) уходит в flight_book(). fare=N — показать багаж и правила только по одному тарифу. Цена читается заново: та, что была в поиске, могла устареть.

  • flight_search

    Поиск авиабилетов. from_code/to_code — коды IATA (MOW, LED, SVO), date — YYYY-MM-DD. direct_only=True оставляет только рейсы без пересадок, max_price — потолок цены за всё предложение. Оба отсекают ДО limit, поэтому limit=15 с direct_only покажет 15 прямых, а не 15 самых дешёвых стыковок. Без этого прямой рейс на ближней дате лежит на сотой строке выдачи. Резолвера «название города → код» у банка нет. Коды вместе с названиями отдаёт flight_history() — оттуда их и бери, а не угадывай. only_bookable=True (по умолчанию) — только те предложения, что бронируются внутри банка; их отдаёт первый же…

  • flight_seats

    Карта мест в салоне с ценами. offer_id — из flight_search(), fare — номер тарифа из flight_offer(). Места платные и НЕобязательные: без них билет всё равно оформляется, ряд выдадут при регистрации. Выбранные места передаются в flight_book(..., seats="13A,13B") — по одному на пассажира, в том же порядке.

  • flows

    Гид по флоу: порядок вызовов для конкретной задачи. topic — что тебе нужно, своими словами: «продукты», «перевод», «билеты», «карты», «заказы», «кбжу», «инвест», «кредит», «чат», «поиск», «логин», «поезд», «самолёт», «отель», «поездки», «маркетплейс». Без аргумента — список тем и общие правила (там же про тулы с реальными деньгами). Отдаёт только подходящие разделы, а не весь файл.

  • get_data

    Универсальный getter. section = subscriptions | subscription_bills | credit_schedule | credit_rating | statements | invoices | templates | contacts | cards | loans | autopayments | sbp | sbp_me2me | promocodes | offers | gifts | services | bundles | manager | merchant_subs | profile | homes | cars | shortcuts | finhealth_total | finhealth_turnover | finhealth_presets | finhealth_invest | invest_accounts | invest_offers | invest_yield | pension | broker_margin | shared | shared_owned | business_info | appointments | account_details | full_debt_amount | statement_exist. Секция вне списка — отказ…

  • grocery_add_to_cart

    Добавить товары в корзину. items = JSON [{id, count}, ...]. app_id/point_id — из grocery_stores() (обязательны). Запомни их — тот же магазин нужен для grocery_cart и grocery_checkout. Строку, у которой итоговое количество выше остатка (countAvailable), тул отклоняет с CART_QUANTITY_CONFLICT и НЕ пишет корзину — количество сам не уменьшает. Реши расхождение (меньше или замена) и повтори.

  • grocery_cart

    Содержимое корзины. app_id/point_id — из grocery_stores() (обязательны) и должны совпадать с теми, что использовались в grocery_add_to_cart. По каждой строке печатает «в наличии N» (остаток countAvailable), а если запрошено больше остатка — блок CART_QUANTITY_CONFLICT с перечнем SKU и, вместо подсказки на checkout, инструкцию сначала устранить расхождение.

  • grocery_checkout

    Полный чекаут: доставка → заказ → оплата. РЕАЛЬНЫЕ ДЕНЬГИ. app_id/point_id — из grocery_stores() (обязательны, тот же магазин что в корзине). Если корзина просит больше остатка (count > countAvailable), тул останавливается ДО доставки: отвечает CART_QUANTITY_CONFLICT с перечнем SKU, заказ не создаётся и деньги не двигаются. Это проверка по инварианту корзины, а не расшифровка кода магазина. Уменьши до «в наличии» или замени (с согласия пользователя) и повтори. Подтверждение — кнопка, не текст: тул сам делает предпросмотр (только бэкенд знает, во что пересчитаются весовые товары), показывает …

  • grocery_good_info

    Карточка товара: состав, КБЖУ, вес, срок хранения, производитель. good_id — из grocery_search()/grocery_plan_order(). КБЖУ приводится на 100 г и на упаковку (у части сетей КБЖУ есть только текстом — он разбирается).

  • grocery_order_cancel

    Отменить продуктовый заказ (Город) — оплаченный или ещё нет. Деньги за оплаченный возвращаются на счёт списания. Покажи пользователю заказ и дождись согласия, прежде чем отменять. paymentId НЕ нужен (в отличие от ticket_cancel): приложение отменяет по одному orderId. Вердикт — payload.status ("Success"/"Failed" + code; 605 = заказ уже отменён), внешний "status":"Ok" успехом НЕ является. app_id (из grocery_stores() или payment_attempts()) не обязателен, но с ним тул сразу перечитает заказ и покажет фактический статус — до перечитывания «принято» ещё не значит CANCELED. Если тул вернул ошибку,…

  • grocery_order_status

    Reconciliation: статус grocery-заказа по orderId (GET /api/grocery/order). Read-only. Проверь после UNKNOWN checkout, создался/оплатился ли заказ на бэкенде. app_id ОБЯЗАТЕЛЕН несмотря на пустой дефолт в схеме: без него банк отвечает сырым 400 вместо понятной причины. Магазин заказа известен из orders() (по имени) — соответствующий appId возьми из grocery_stores().

  • grocery_plan_order

    Спланировать заказ: для каждого ингредиента ищет (custom_ordered → global). ingredients = JSON массив, напр. ["свёкла","говядина","капуста"]. app_id/point_id — из grocery_stores() (обязательны). Каждая позиция помечена ✓ (уверенное совпадение) или «⚠ проверь» (нашёл, но токены совпали не полностью — вероятно не тот товар, сверь по имени). Матчинг чинит пунктуацию/порядок слов/словоформы, но синонимы и транслит НЕ угадывает — их добирай сам (см. лестницу в скиле: свои варианты → WebSearch → браузинг категории).

  • grocery_rank

    Кандидаты по запросу с атрибутами, опционально отсортированные. Это ИНСТРУМЕНТ, а не политика: сам по себе никакой стратегии выбора не применяет. Стратегию задаёт вызывающий, и только когда пользователь её попросил — иначе sort_by пустой и порядок остаётся магазинным. sort_by: price | weight | kcal | kcal_pack | protein | fat | carb (пусто = без сортировки). order: asc | desc. Питательные поля тянутся автоматически, если по ним сортируем (это +1 запрос на кандидата), либо по with_nutrition=True. Товары, у которых сеть не публикует нужное поле, всегда уходят в конец — и при asc, и при desc: «…

  • grocery_search

    Поиск товара по названию. app_id/point_id — из grocery_stores() (обязательны). Возвращает товары с тегом likely_raw (сырой/готовый). limit — сколько показать (0 = все подходящие); в шапке видно, сколько нашлось всего и сколько товаров вообще вернула сеть.

  • grocery_set_cart

    Изменить или убрать товары в корзине. Считает количества АБСОЛЮТНО, в отличие от grocery_add_to_cart, который прибавляет. items = JSON [{"id": "123", "count": 2}, ...]: count > 0 — сделать ровно столько (не прибавить); count = 0 — убрать товар из корзины; товары, которых нет в списке, остаются как были. clear=True — очистить корзину целиком, items тогда не нужен. Отдельного эндпоинта удаления у банка нет: корзина всегда перезаписывается целиком, поэтому тул сам дочитывает текущий состав и шлёт полный список. Возвращает содержимое корзины ПОСЛЕ изменения — сверь его с ожидаемым. Количе…

  • grocery_stores

    Магазины, доступные по адресу пользователя: appId/pointId (нужны всем остальным grocery-тулам), окно ближайшей доставки, её цена, минимальная сумма заказа и кешбэк. Это ИНСТРУМЕНТ, а не политика: без sort_by порядок остаётся тем, что вернул банк. Сортируй, только когда пользователь назвал критерий. sort_by: speed (быстрее приедет) | price (дешевле доставка) | min_sum (ниже минимальная сумма). order: asc | desc. «Быстрее» считается по КОНЦУ ближайшего окна — «привезут не позже», — потому что банк отдаёт два разных вида слота: «до 15 мин» и «завтра 08:00–11:00», и сравнимы они только по этому…

  • hotel_info

    Карточка отеля: адрес, время заезда, отзывы. С датами — ещё и тарифы: цена, питание, до какого числа бесплатная отмена. hotel_id — из hotel_search(). Забронировать через MCP нельзя: в API банка нет вызова, который принимал бы bookHash. Дальше — приложение или сайт.

  • hotel_search

    Поиск отелей. query — город, регион или название отеля («Сочи», «Красная Поляна»); checkin/checkout — YYYY-MM-DD; children — возрасты детей через запятую («5,12»). Забронировать отель через MCP НЕЛЬЗЯ — только найти и сравнить. Тарифы и условия отмены по конкретному отелю — hotel_info(hotel_id, checkin, checkout).

  • insurance_policies

    Действующие страховые полисы (ОСАГО/КАСКО/путешествия) с суммами и сроками.

  • invest_accounts

    Инвест-счета: брокерские и InvestBox. brokerAccountId отсюда — единственный аргумент invest_portfolio/invest_operations/invest_securities.

  • invest_operations

    Брокерские операции, новые сверху. limit применяется и к запросу, и к выводу (0 = всё, что вернул банк). operation_type — фильтр по типу; пусто = все. Полного списка банк не публикует. Наблюдались: buy, sell, payIn, payOut, tax, taxBack (живой ответ) и outMulti (захват приложения). Список не полон — сначала вызови без фильтра и посмотри, какие типы реально пришли в ответе, потом фильтруй по ним.

  • invest_portfolio

    Статистика портфеля (ввод/вывод, купоны, дивиденды, стоимость по месяцам) за период. broker_account_id — из invest_accounts().

  • invest_securities

    Бумаги в портфеле: тикер, количество, текущая цена, доля и доходность. broker_account_id — из invest_accounts(); пусто = все портфели. Учти: у брокерского счёта может быть НЕСКОЛЬКО портфелей (рублёвый, валютный), и brokerAccountId портфеля не совпадает с id счёта из invest_accounts() — поэтому пустой ответ на конкретный id ещё не значит «бумаг нет». Вызови без аргумента и посмотри, какие портфели есть.

  • keepalive

    Пинг — продлить сессию.

  • list_accounts

    Счета, балансы и карты каждого счёта (id + ucid). ucid — для card_limits/card_requisites, id — для card_operations. Полный список карт с типом и статусом — list_cards().

  • list_cards

    Все карты по всем счетам: id, ucid, баланс, тип. id — для card_operations, ucid — для card_limits/card_requisites. Карты, привязанные из ДРУГИХ банков, помечены «внешняя»: у них нет ucid, и card_limits/card_requisites по ним не работают.

  • list_operations

    Операции за период, новые сверху. limit — сколько показать (0 = все). В шапке всегда указано, сколько операций всего за период, поэтому видно, обрезан ли ответ. desc_len — ширина колонки описания (0 = описание целиком). Обрезанное описание кончается на «…» — полный текст даст desc_len=0.

  • login

    Начать логин. Отправляет SMS OTP. Возвращает какой шаг следующий (otp/password/pin). Спроси у пользователя код и вызови confirm_otp(otp); если банк попросит — confirm_pin(pin). Пароль вводится не через агента: пользователь запускает tbank-mcp-login (pip-установка) или login_cli.py (репозиторий) в своём терминале.

  • messenger_conversations

    Список чатов (одна страница банка). offset — с какого чата начать (следующая страница: offset из подсказки в шапке ответа), считая С НАЧАЛА списка. archived=True — архивные чаты. Не путать с offset у messenger_messages() — там отсчёт с КОНЦА (от самых новых), это два разных тула с разной точкой отсчёта.

  • messenger_file

    Скачать вложение из чата (выписку, отчёт, справку) НА ДИСК и вернуть путь. Содержимое тул не разбирает: файл лежит на той же машине, где работаешь ты, поэтому читай его своими инструментами — PDF, текст, картинку через Read по пути, таблицу (xlsx/docx) своим скриптом. file_id и conversation_id бери из ОДНОГО сообщения messenger_messages() — строка вида «[файл: имя | 67 КБ | file_id=…]». Пара обязательна: тот же file_id в другом чате отдаёт 401. Имя файла копировать не надо: его называет сам ответ банка, тул возьмёт оттуда. По умолчанию — в ~/.local/share/tbank-mcp/chat-files/ с правами 0600…

  • messenger_messages

    История чата, старые сверху. Банк отдаёт одну страницу истории; параметры листают её ЛОКАЛЬНО: limit — сколько сообщений показать (0 = вся страница); offset — сколько САМЫХ НОВЫХ пропустить (окно старее: offset=20, 40, …). Отсчёт с КОНЦА страницы — не то же самое, что offset у messenger_conversations(), где отсчёт с начала списка чатов; max_chars — кап текста одного сообщения (0 = целиком). Обрезка всегда помечена и называет полную длину; before_id — курсор банка: id сообщения, СТАРЕЕ которого догрузить ПРЕДЫДУЩУЮ страницу…

  • messenger_send

    Отправить сообщение в чат — НЕОБРАТИМО, его прочитает живой человек (обычно поддержка банка). Денег не двигает, но и отозвать нельзя. Покажи пользователю текст и дождись согласия, прежде чем отправлять. conversation_id — из messenger_conversations().

  • messenger_unread

    Чаты с непрочитанными сообщениями (по названиям, а не по сырым id).

  • operations_histogram

    Траты, сгруппированные банком. Возвращает сырой JSON (дерево summary + intervals[].aggregated[]); для готовой разбивки по категориям бери spending_categories() — он это дерево уже разворачивает. Внутренние переводы (между своими счетами) ИСКЛЮЧЕНЫ: эндпоинт всегда вызывается с config=allNotInner, как в приложении. Полный список операций, включая внутренние, — list_operations(). max_chars — предел размера ответа (0 = без предела). Шапка всегда называет, что урезано и на сколько. В захвате приложения этот эндпоинт вызывался 27 раз и КАЖДЫЙ раз с period=«day», group_by=«category» — только эта …

  • order_details

    Детали одного заказа (места, зал, код брони, состав корзины). Работает для развлекательных заказов (кино/концерты); для продуктов — grocery_order_status, для поездок — travel_order_details(order_id) (вагон, места, маршрут, отель).

  • orders

    Все заказы клиента: продукты, кино, концерты, авиабилеты, ж/д, отели. kind — "афиша" | "кино" | "путешествия" | "продукты" | код objectType; пусто = все. Отсортировано по дате создания, новые сверху. limit=0 — показать все.

  • pay_bill

    Оплатить счёт: ЖКХ, связь, интернет, штраф, налог. РЕАЛЬНЫЕ ДЕНЬГИ. provider_id и fields — из payment_providers(provider_id=…), fields — JSON вида {"account": "1234567890"}. Имена полей у каждого провайдера свои, угадывать их нельзя: тул сверяет значения с регуляркой из каталога и откажет до отправки. Перед оплатой тул сам считает комиссию (это же и проверка тела банком) и показывает пользователю кнопки «Оплатить/Отмена» с ИТОГОВОЙ суммой и комиссией (для сумм от TBANK_CONFIRM_ABOVE) — подтверждение даёт кнопка, НЕ спрашивай «да/нет» текстом заранее. Клиент без элиситации получает отказ «ПЛА…

  • payment_attempts

    Недавние попытки ОПЛАТЫ (read-only) — для reconciliation после неопределённого результата (UNKNOWN). Общий реестр: продукты (checkout), авиабилеты и прочие денежные операции, что ведут журнал попыток, — не только grocery. Показывает status/step/order_id/attempt_id/sum и детали ответа. Это же хранилище блокирует повторное списание, пока исход не подтверждён. Более широкая лента событий — diagnostics(), она же показывает и эти попытки одним списком. limit — сколько последних попыток показать (0 = все); в шапке видно общее число.

  • payment_commission

    Предпросмотр комиссии (денег НЕ двигает). body обязателен — это JSON-строка. Форма (сверена с захватом): {"payParameters": { "account": "<счёт списания из list_accounts()>", "moneyAmount": 1500, "currency": "RUB", "paymentType": "Transfer", // "Payment" для оплаты услуг "provider": "p2p-anybank", // или transfer-inner / id провайдера "providerFields": { ... } // для перевода по телефону — }} // provider_fields из одного кандидата // transfer_sbp_resolve(), как есть НЕ пиши pointe…

  • payment_providers

    Каталог платёжных провайдеров (ЖКХ, связь, штрафы, налоги, интернет…) — только чтение, денег не двигает. Без аргументов печатает ГРУППЫ провайдеров — с них и начинай, дальше payment_providers(group="ЖКХ"). group — это НАЗВАНИЕ группы, не id. query — подстрока по названию провайдера внутри группы (фильтрует ТЕКУЩУЮ страницу). page — номер страницы каталога, шапка подсказывает следующую. provider_id="<id>" печатает ПОЛЯ, которые провайдер требует для платежа: id поля, человеческое название, обязательность, подсказку и регулярку, по которой значение проверяется. Это единственный источник формы …

  • payment_qr

    Прочитать платёжный QR со счёта/квитанции (ГОСТ Р 56042-2014, строка ST0001…). ТОЛЬКО ЧТЕНИЕ, денег не двигает. Показывает получателя, его реквизиты, сумму из QR и комиссию — то есть всё, что нужно показать пользователю ПЕРЕД transfer_requisites(). Спрашивает у банка, каким провайдером этот QR платится: реквизитный счёт юрлица → transfer-legal (плати через transfer_requisites), любой другой провайдер → pay_bill. Назначение платежа в QR есть не всегда, а банк его требует — если в выводе «Назначение платежа» пусто, спроси у пользователя и передай comment=… .

  • payment_receipt

    Скачать PDF-чек по платежу. По умолчанию — в ~/.local/share/tbank-mcp/receipts/. save_to — свой путь файла. Существующий файл НЕ перезаписывается: чтобы заменить, передай overwrite=True. Чек — это платёжное поручение (плательщик, получатель, сумма, назначение), поэтому файл создаётся с правами 0600. payment_id берётся ровно из пяти мест, других производителей нет: orders() (поле paymentId в строке заказа), grocery_order_status(), и ответы transfer(), pay_bill() и ticket_pay(). В list_operations() его НЕТ — операция и платёж нумеруются по-разному.

  • payment_status

    Состояние платёжной попытки по attempt_id: висит ли она на подтверждении, подтверждена или её исход неизвестен. Показывает то, что MCP записал в журнал попытки. Наземная правда — в операциях по счёту: если для висящего платежа списания в list_operations нет, деньги ещё не ушли и его можно подтвердить через confirm_payment(attempt_id, otp).

  • place_info

    Карточка площадки: название, город, метро, залы. Адрес в самой карточке приходит ПУСТЫМ — во всех захваченных ответах, — так что with_halls=True дочитывает залы, где адрес есть. limit — сколько залов показать (<=0 — все), с честным «N всего, показано M».

  • place_schedule

    Что идёт на площадке: концерты, спектакли, выставки. КИНО здесь НЕТ — репертуар кинотеатра берётся cinema_schedule(object_id=…, date=…). object_id — из afisha_places() или search_app().

  • push_unread_count

    Число непрочитанных push-уведомлений.

  • refresh_session

    Обновить сессию. Сначала пробует refresh_token, при invalid_grant — silent re-login через SSO_SESSION (без OTP). Если оба пути не работают — REAUTH_REQUIRED.

  • search_app

    Полнотекстовый поиск по разделу приложения. screen — СТРОГИЙ enum, угадывать бесполезно (всё остальное → 400): afisha — кино, концерты, театр, выставки, спектакли (по умолчанию); отдаёт eventId, готовый для cinema_schedule/concert_schedule movie_main — только фильмы services — самый широкий: та же афиша плюс контакты из телефонной книги и сервисные блоки; id приходится доставать из диплинка concerts_main — только концерты (уже сузка внутри afisha) spectacle_main — только театр exhibition_main — только выставки grocery …

  • session_status

    Проверить жива ли сессия. Сам поднимает уровень до CLIENT, если окно портальной сессии (~11 минут) успело закрыться.

  • shop_cart

    Корзины маркетплейса — по одной на продавца. Оформление заказа через MCP не поддерживается: подтверждённого шага размещения в захвате нет. Корзину видно, оплатить её надо в приложении. limit — сколько позиций одной корзины показать (<=0 — все); каждая корзина рассчитывается отдельно, с честным «N всего, показано M».

  • shop_search

    Поиск товаров в маркетплейсе Т-Банка (Город → Шопинг). Пагинация СЕРВЕРНАЯ: offset листает выдачу, всего результатов видно в шапке. limit<=0 здесь НЕ значит «показать всё» (в отличие от большинства других тулов этого сервера) — молча используется 20; листай через offset. Печатает skuId, pointId и shopId — они опознают позицию, но добавить её в корзину через MCP нельзя: тула для этого нет, shop_cart() только читает. Оформить и оплатить заказ отсюда НЕЛЬЗЯ: в захвате нет подтверждённого шага размещения, только расчёт доставки. Собранную корзину пользователь оформляет в приложении.

  • spending_categories

    Траты по категориям.

  • ticket_cancel

    Отменить заказ билета. kind — "movie" или "concert". Отменяется заказ, у которого банк сам выставил isCancelAvailable=true — это видно в order_details(). Такой заказ уходит в PARTIALLY_CANCELED, а не CANCELED: билеты возвращают, сервисный сбор — нет, и «частично» здесь не ошибка. Билеты вернут, сервисный сбор не возвращается — покажи это пользователю и дождись согласия, прежде чем отменять. Заказ, помеченный isCancelAvailable=false, хост отменять отказывается: отвечает status=Failed с кодом и НИЧЕГО не меняет. Повторять такой вызов бессмысленно. Тул сначала читает заказ и, если банк отменят…

  • ticket_pay

    ОПЛАТИТЬ бронь билета. РЕАЛЬНЫЕ ДЕНЬГИ. Подтверждение — кнопка: тул сам покажет пользователю «Оплатить/Отмена» с суммой заказа (для сумм от TBANK_CONFIRM_ABOVE). НЕ спрашивай «да/нет» текстом заранее — покажи места и итог со сбором (из cinema_book), потом вызывай; согласие даёт кнопка. Клиент без элиситации получает отказ «ПЛАТЁЖ НЕ ВЫПОЛНЕН» — деньги там не двигаются. Все три первых аргумента бери из ответа cinema_book(): order_id, итоговую сумму и nfs_payment_token. Токен живёт только в ответе на создание заказа — order_details() его не отдаёт, поэтому переспросить потом будет негде. accoun…

  • ticket_qr

    Сам билет по оплаченному заказу: код брони, QR и ссылка на PDF. Лежит это в ленте заказов, а НЕ в order_details(), который отдаёт только код брони. Что именно есть — зависит от партнёра: из 75 афишных заказов код брони был у всех, QR у 53, а Ticketland не даёт ни QR, ни PDF. Тул печатает то, что есть, и прямо говорит, чего нет. QR — это короткая строка-payload, которую показывают сканеру, а не картинка. Пустой ответ означает «билета ещё нет» (или бронь не оплачена — неоплаченные в ленту не попадают), а не «заказа не существует».

  • train_book

    ЗАБРОНИРОВАТЬ места в поезде. Денег НЕ списывает, но ДЕРЖИТ места ~15 минут. train_id — из train_search(); seats — «вагон/место» через запятую, ровно как их печатает train_seats(): seats="03/10,03/12". passengers="me" — сам владелец счёта, паспорт берётся из данных банка (documents()). Для нескольких пассажиров — JSON-список: [{"me":true},{"first":"Имя","last":"Фамилия","middle":"Отчество", "birthDate":"1990-01-31","number":"1234567890","sex":"female"}] Число пассажиров должно совпадать с числом мест — кто первый в списке, тот едет на первом месте. Детская бронь (пассажир младше 18) через…

  • train_calendar

    Даты, на которые открыта продажа по направлению. Заодно дешёвая проверка пары кодов станций: на неверной паре ответ пуст.

  • train_pay

    ОПЛАТИТЬ бронь поезда. РЕАЛЬНЫЕ ДЕНЬГИ. Подтверждение — кнопка: тул сам покажет «Оплатить/Отмена» с суммой заказа. НЕ спрашивай «да/нет» текстом — покажи места и сумму из train_book(), согласие даёт кнопка. Клиент без элиситации получает отказ, деньги при этом не двигаются. БЕЗ card_id ничего не оплачивает: возвращает список КАРТ, которыми можно заплатить (счета показаны для справки — оплата со счёта только в приложении, этот тул принимает card_id). Выбери карту вместе с пользователем и вызови ещё раз с её card_id. Сумму тул берёт из самого заказа, а не из аргумента, — её нельзя разойтись с …

  • train_refund

    ВОЗВРАТ ЖД-билета. Необратим: место уходит обратно в продажу. Без confirm=True ничего не возвращает — показывает расчёт: сколько вернут за каждый билет и сколько удержат сборами. Покажи этот расчёт пользователю и только потом вызывай с confirm=True. ticket_ids — если пусто, возвращаются ВСЕ возвратные билеты заказа.

  • train_search

    Поиск поездов. origin/destination — ЧИСЛОВЫЕ коды станций банка (2000000 — Москва, 2004000 — Санкт-Петербург), date — YYYY-MM-DD. Резолвера «название станции → код» у банка нет. Если кода не знаешь, проверить пару можно train_calendar(origin, destination): она скажет, какие даты вообще в продаже, и на неверной паре ответит пусто. Дальше: train_seats(train_id) — вагоны и места, оттуда train_book().

  • train_seats

    Вагоны и свободные места в поезде. train_id — из train_search(). car_type — фильтр по типу («плац», «купе», «сид»), max_price — верхняя граница цены места. Места печатаются как «вагон/место» — именно в таком виде их ждёт train_book(train_id, seats="03/10,03/12"). Цены и наличие читаются заново на каждый вызов: место могли занять минуту назад.

  • transfer

    Перевод (РЕАЛЬНЫЕ ДЕНЬГИ). Подтверждение — кнопка, не текст: тул сам покажет пользователю выбор банка (если их несколько) и кнопки «Перевести/Отмена» (для сумм от TBANK_CONFIRM_ABOVE). НЕ спрашивай «да/нет» заранее — вызывай, когда сумма и получатель известны; согласие даёт кнопка. Клиент без элиситации получает отказ «ПЛАТЁЖ НЕ ВЫПОЛНЕН» — деньги там не двигаются вообще. from_account — счёт списания из list_accounts(). Пусто = первый рублёвый Current с положительным балансом; это ДОГАДКА, поэтому если пользователь выбирал счёт — передай его явно, иначе спишется с другого. Кредитную карту как…

  • transfer_requisites

    Перевод юрлицу или ИП по банковским реквизитам (БИК + счёт + ИНН). РЕАЛЬНЫЕ ДЕНЬГИ. Подтверждение — кнопка, не текст: тул сам покажет пользователю «Перевести/Отмена» (для сумм от TBANK_CONFIRM_ABOVE) ДО отправки. НЕ спрашивай «да/нет» заранее — покажи реквизиты и назначение (payment_qr для QR), потом вызывай; согласие даёт кнопка. Клиент без элиситации получает отказ «ПЛАТЁЖ НЕ ВЫПОЛНЕН» — деньги там не двигаются вообще. Два способа задать реквизиты, их можно смешивать: - qr="ST00012|Name=…|PersonalAcc=…" — строка платёжного QR со счёта. Заполняет всё сразу, включая сумму. Сначала покажи по…

  • transfer_sbp_resolve

    Резолвинг получателя по номеру (read-only, БЕЗ денег) — счёт в Т-Банке И банки СБП. Возвращает маскированное имя + банк + isDefaultBank и готовый provider_fields. Используй ПЕРЕД transfer()/payment_commission() для НОВОГО (несохранённого) получателя. provider_fields вставь в payParameters.providerFields комиссии — не пиши 8276 руками. Счёт в Т-Банке — отдельный кандидат (перевод внутри банка, не через СБП): у него НЕТ bankMemberId. Если он в списке, получатель — клиент Т-Банка, даже когда в СБП Т-Банка не видно; это разные списки, и раньше тул показывал только второй. Для transfer() передай p…

  • travel_order_details

    Детали поездки по orderId из orders("путешествия") — отель, поезд, самолёт. Для ЖД показывает вагон, места и статус электронной регистрации; для авиа — маршрут и документы; для отеля — даты, номер, питание, гостей. Билет или маршрутную квитанцию в файл — travel_ticket_file(order_id).

  • travel_payment_options

    Чем платить за поездку и сколько это стоит на самом деле: доступные счета, сколько бонусов можно списать, сколько кэшбэка вернётся, какие есть рассрочки. amount — сумма покупки (из flight_offer() или train_book()). Ничего не платит и ничего не меняет.

  • travel_ticket_file

    Сохранить билет в файл: ЖД-бланк или маршрутные квитанции по перелёту. По умолчанию — в ~/.local/share/tbank-mcp/receipts/. order_id — из orders("путешествия"), train_book() или flight_book(). Тул сам определяет вертикаль: у ЖД это один PDF-бланк на заказ, у авиа — по квитанции на пассажира плюс общая; сохраняются все. Файлы создаются с правами 0600: в билете паспортные данные пассажиров. Существующий файл не перезаписывается — для замены overwrite=True.

  • trips

    Поездки — самолёты, поезда и отели одной лентой. Без аргумента — список; с trip_id — карточка поездки: маршрут, статус, страховка. Это НЕ то же самое, что orders(): там заказы всех вертикалей вместе с продуктами и кино, здесь только поездки.

Compare and alternatives

    Featured in

    Signals

    Stars
    38
    Forks
    8
    Open issues
    1
    Contributors
    4
    Weekly downloads
    59
    Last commit
    Oct 5, 2026 (23 days ago)
    Last release
    Aug 23, 2026 (2 months ago)
    Last package publish
    Aug 23, 2026 (2 months ago)

    From GitHub (fetched Oct 24, 2026) and the package registry.

    Details

    Registry name
    io.github.icyberdeveloper/tbank-mcp
    Version
    0.2.2
    Auth
    No auth
    Packages
    pypi tbank-mcp
    License
    MIT
    First seen
    Oct 24, 2026
    Last checked
    Oct 24, 2026
    Cite this page

    T-Bank MCP. Agent Mart. https://agentmart.dev/connectors/icyberdeveloper-tbank-mcp (last updated 2026-10-24)