tbank-mcp
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., "@tbank-mcpshow my account balances"
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.
T-Bank MCP
T-Bank (Т-Банк) MCP — mobile banking API server for Claude Code, Codex, ChatGPT, and other MCP-capable agents.
Features
76 tools: accounts, cards, documents, operations, grocery ordering, cinema and concert tickets, orders, transfers (including payment by bank requisites, from a scanned invoice QR), messenger, investments
11 skills, entered through the
tbankrouter skill: grocery order, tickets, travel search, transfer, bill pay, cards & documents, messenger, budget analysis, invest advisor, loginPinned CA trust: system store + the Russian Trusted Root CA (Минцифры), which no OS ships and every
*.t-bank-app.ruhost needs — that is most of the 22 hosts this MCP talks to. Shipped inca/roots/, pinned by SHA-256. Leaf/intermediate rotation needs no action; a root rotation is a PEM drop intoca/roots/(orTBANK_EXTRA_CA). Certificates are never learned from the network — see the header ofsrc/tls.py.Grocery checkout: search → cart → order → pay (proven end-to-end)
Secure login: password/PIN stay OUT of the LLM context (local CLI or env var)
Related MCP server: @theyahia/tkassa-mcp
Quick Install
As a Claude Code plugin (server + all 11 skills in one step)
/plugin marketplace add icyberdeveloper/tbank-mcp
/plugin install tbank@tbank-mcp
/reload-pluginsThere is no store to be admitted to — a marketplace is just a git repo with a
.claude-plugin/marketplace.json, and anyone can host one.
The venv and the Python dependencies are created on the server's first start by
bin/tbank-mcp: a plugin manifest cannot run install steps (install is not a
field in the schema), so the launcher does it once and every later start goes
straight to the server. Only the grocery checkout needs a browser, and 150 MB is
not something to download behind your back — install it yourself if you want that
flow:
~/.claude/plugins/*/tbank/.venv/bin/python -m playwright install chromiumManually (clone, no plugin)
git clone https://github.com/icyberdeveloper/tbank-mcp.git
cd tbank-mcp
python -m venv .venv && . .venv/bin/activate
pip install -e .
python -m playwright install chromium
# MCP server:
claude mcp add tbank -- ./.venv/bin/python -m src.server
# Skills — a COPY, so it does not follow the repo. Re-run after every pull, or
# the installed skills quietly describe an older version of these tools:
cp -r skills/* ~/.claude/skills/🔒 Login — the password never reaches the agent
The password and the PIN are secrets, and they are not put into the model's context. Logging in is done by a local script, or through an environment variable.
Option 1 (recommended): the local CLI
The script asks for the password itself, via getpass, so it is never echoed to the
terminal and never passes through the agent. Its prompts are in Russian, as shown:
cd tbank-mcp
.venv/bin/python login_cli.py +7XXXXXXXXXX
# [1/3] login(+7XXXXXXXXXX) ...
# SMS отправлена
# [2/3] SMS-код: **** ← the code from the SMS (hidden input)
# [3/3] Пароль (не отображается): **** ← your password (hidden input)
#
# ✓ ГОТОВО! Сессия сохранена: ~/.local/share/tbank-mcp/session.json (права 0600).
# MCP читает этот же файл — путь совпадает без ручной настройки.Or with the password in the environment, for CI and scripts:
TBANK_PASSWORD="your-password" .venv/bin/python login_cli.py +7XXXXXXXXXXThen start Claude Code. The agent picks up the saved session and works without the password, which never enters the LLM context.
Option 2: through the agent (convenient, but the LLM sees the password)
If you are content to hand the password to the agent:
> login(+7XXXXXXXXXX)
> [SMS code] 1234
> confirm_otp("1234")
> [bank asks password]
> confirm_password("YourPassword")⚠️ Note: the password ends up in the model's context and in call logs. For an account you care about, use Option 1.
Both options need the SMS code typed in either way, so there is no unattended
login: TBANK_PASSWORD / TBANK_PHONE are not read anywhere in this codebase,
and a section here used to claim otherwise.
Работа с MyT (рабочий календарь и парковка) переехала в отдельный MCP: tbank-myt. Другой аккаунт, другая сессия, свой
login_cli.py— здесь их больше нет.
Other agents (Codex, ChatGPT, Hermes, OpenClaw)
{
"mcpServers": {
"tbank": {
"command": "/path/to/tbank-mcp/.venv/bin/python",
"args": ["-m", "src.server"],
"cwd": "/path/to/tbank-mcp"
}
}
}Tools
Each tool's docstring is the reference — this table is only a map of the surface. The docstrings, the skills and everything the tools print are in Russian: the bank is Russian and so is the person reading the answer.
Group | Tools |
Login |
|
Session |
|
Reads |
|
Cards & accounts |
|
Documents |
|
Grocery |
|
Nutrition |
|
Orders |
|
Afisha |
|
Tickets |
|
Search |
|
Travel search |
|
Marketplace |
|
Messenger |
|
Money |
|
Invest |
|
Utility |
|
get_data(section) covers 60+ endpoints: subscriptions, credit_schedule, statements, loans, invest_accounts, pension, etc. (invest_portfolio is a tool of its own, not a section — see the docstring for the full list.)
Grocery tools (grocery_search, grocery_plan_order, grocery_add_to_cart, grocery_set_cart, grocery_cart, grocery_checkout) require app_id + point_id taken from grocery_stores() — there's no silent default store, so add/cart/checkout always operate on the same cart, instead of reporting an empty one right after something was added to a different store's.
Skills
Skill | What it does |
| Entry point — what the bank can do and which skill handles it |
| Recipe → search → cart → confirm → checkout |
| Cinema/concert: search → showtime → seats → book → pay |
| Trains, flights, marketplace — search only, no booking |
| Service bills — utilities, taxes, fines: catalogue → provider fields → commission preview → pay |
| P2P, SBP (СБП), account transfers |
| Cards, limits, requisites, passport and other documents |
| Bank chats and support |
| Spending analysis, subscription audit, savings tips |
| Portfolio, P&L, rebalancing, tax optimization |
| Multi-step login, session management |
Example requests
Ask in Russian — the tools answer in Russian. Everything below was run against the live bank.
Кино и афиша
Что идёт в кино сегодня?
Купи два билета на «Майкла» на завтра в Каро 11 около 20:00 в центре зала
Отмени заказ
Покажи последние 5 моих заказовДеньги
Покажи мои счета
Переведи 10 рублей Алёне на +79991234567
Какие последние 5 операций?
Покажи реквизиты счётаПродукты
Хочу оливье, собери корзину с минимальным КБЖУ
Хочу оливье, собери корзину с минимальной ценой
Хочу оливье, собери корзину из премиум продуктов
Найди самый дешёвый картофель за килограмм
Отмени заказКарты и документы
Покажи реквизиты основной карты
Какие лимиты по основной карте?
Покажи реквизиты моего паспорта
Когда истекает мой загранпаспорт?Tests
No pytest — the tests are standalone scripts. Run them all:
.venv/bin/python tests/run_all.py # every file, ~35 s, offline
.venv/bin/python tests/run_all.py transfer # only files matching "transfer"Each runs in its own process, and the runner redirects the attempt/event journals to
a temp directory so a test run never writes to ~/.local/share/tbank-mcp/.
Everything needed is in the repo: request contracts are pinned against scrubbed
fixtures in tests/fixtures/ (real structure and protocol values, synthetic personal
data), so the suite is meaningful on a clean clone. Where the original Burp capture is
present the tests additionally check the fixtures have not drifted from it.
Security
session.json— canonical path~/.local/share/tbank-mcp/session.json(override withTBANK_SESSION), mode 0600, owner-only. It holds tokens. Bothlogin_cli.pyand the MCP server read the same file, so there is nothing to configure. On start-up the MCP logs the path, size and permissions only — never a token or a cookie.Password / PIN — not in git, not in the code, and not in the LLM context if you use
login_cli.py.No secrets in the repo. Two kinds of committed material look secret-adjacent and are not:
ca/roots/*.pemare public CA root certificates, shipped on purpose and pinned by SHA-256 insrc/tls.py;tests/fixtures/*.jsonare request contracts scrubbed from a real capture — real structure and protocol values, synthetic account, phone, address and device ids. The captures themselves are gitignored and never leave the machine.events.jsonl+attempts.jsonl— redacted diagnostics in~/.local/share/tbank-mcp/. They carry step, http_status, blame, amount and order id, and never tokens, cookies, addresses, phone numbers, emails or account numbers. Safe to share while debugging; thediagnosticstool reads them.calls.jsonl— one line per tool call, so it can be seen how an agent uses this MCP: the tool, its arguments, the duration, and the FIRST LINE of the answer, which is what the agent actually read. Held to the same promise as the files above: arguments that are free text a person wrote (a chat message, a transfer note) or a credential are measured, never stored; long digit runs — account, card, order and payment ids — are replaced in the recorded line, both to keep them out and because the report groups by that line. Thedebug_reporttool reads it. On by default;TBANK_TRACE=0disables it,TBANK_TRACE_FILEmoves it, and it rotates at 5 MB.Device profile. Payments carry a 3DS/anti-fraud block whose device facts — screen size, locale, timezone, hardware model — default to the device the traffic was captured from. Override them with
TBANK_DEVICE_SCREEN_HEIGHT/_WIDTH/TBANK_DEVICE_LANGUAGE/TBANK_DEVICE_TIMEZONE/TBANK_DEVICE_MODELso your payments do not describe someone else's phone.Request-shape switches. Two divergences from the captured app are corrected behind env vars, so a rollback is one variable and no re-login (neither touches
session.json):TBANK_QUERY_PROFILE=legacy— restores sendingwuidto every host and injectingvendor/client_versionon every read. The app sendswuidonly towww.tbank.ruunder/api/common/, and the other two only on the OIDC authorize call, so the default is now the scoped form.TBANK_ACCEPT_PROFILE—json(default, and today's behaviour byte-for-byte) |auto| a comma-separated host list. The app does not sendapplication/jsonto its native hosts; that string is the Apple URL-loading default that appears when no Accept is set. The captured responses areapplication/jsoneither way, so this is fidelity rather than a fix — but 63 templates share the busiest host and there is no staging environment, so it is OFF until driven live. Roll it out one host class at a time, cheapest first:webview/shortcuts/my-home(unreachable or trivial reads) →api-invest*(invest_accounts,invest_portfolio) →api.t-bank-app.rustarting withkeepalive, whose Content-Type demonstrably becomestext/htmlwhile its body stays JSON →www.tbank.ru→ the three lifestyle shelf paths. A regression has one signature:_unwrapraisingHTTP_200because the body no longer parses. Comparedebug_report()before and after each step.
Money tools (
transfer,transfer_requisites,grocery_checkout,ticket_pay,pay_bill) require confirmation of a specific amount — "buy it" is not a confirmation.Tool annotations. Every tool declares what it does, in one table —
TOOL_KINDSinsrc/server.py— and a tool missing from it raises at import rather than defaulting to anything. Three kinds: 59 arereadOnlyHint: trueand may run without a prompt; 12 write something that costs nothing (a cart, a booking, a message, an OTP, a token, a local file) and are markeddestructiveHint: false; 5 debit an account —transfer,transfer_requisites,grocery_checkout,ticket_pay,pay_bill— and are the only ones carryingdestructiveHint, which is what forces a confirmation dialog. The line is drawn at money on purpose: a booking expires by itself and a cart line is a rewrite away, so confirming those is friction that teaches people to click through the one dialog that matters. The 12 writers are not marked read-only, because they do modify things and that flag states the opposite — if your client still prompts on them, allow them once in the client rather than changing what the server claims.
Disclaimer
For personal use with your own T-Bank account. Not affiliated with T-Bank.
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-qualityDmaintenanceAn MCP server that exposes Enable Banking API tools for interacting with bank accounts through Open Banking. It enables users to authenticate sessions, list accounts, and fetch transaction history or balances via a secure self-hosted server.2
- Alicense-qualityDmaintenanceMCP server for T-Kassa (T-Bank/Tinkoff) payment API. Provides 16 tools for payments, refunds, recurring charges, customer management, saved cards, SBP, receipts, and T-Invest portfolio.54MIT
- Flicense-qualityCmaintenanceA comprehensive banking system with MCP server capabilities and REST API, enabling account management, deposits, withdrawals, transfers, and transaction history through natural language or HTTP endpoints.

moolre-mcpofficial
FlicenseBqualityBmaintenanceMCP server that exposes Moolre's API as 24 tools for AI agents, enabling account management, transfers, payments, SMS, and WhatsApp operations.24
Related MCP Connectors
MCP Server for agents to onboard, pay, and provision services autonomously with InFlow
MCP server for Appcircle mobile CI/CD platform.
350+ production-ready APIs through one MCP server — weather, geocoding, validation, financial data.
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/icyberdeveloper/tbank-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server