T-Bank MCP について
T-Bank MCP は、T-Bank(Т-Банк)のモバイルバンキング API を扱う MCP サーバーです。口座、カード、送金、公共料金の支払い、食料品の注文、チケット、旅行などに対応します。Claude Code や Codex などの MCP 対応エージェントから、このロシアの銀行サービスを利用する方を想定しています。ログイン用のパスワードと PIN は LLM のコンテキストに渡されません。
主な機能
- 01複数の銀行業務をカバーする 90 個のツール
- 02tbank エントリースキルから振り分けられる業務別スキル
- 03ロシアの信頼されたルート CA を含む固定の CA 信頼設定
- 04パスワードと PIN を LLM のコンテキストから除外
- 05検索から支払いまでの食料品注文フロー
活用シーン
- 01口座残高、カード限度額、直近の取引の確認
- 02ユーザーが金額を確認した上での送金や公共料金の支払い
- 03食料品の商品検索、カート作成、チェックアウト
MCP 対応
本プロジェクトは銀行関連のツールとスキルを MCP クライアントに提供する MCP サーバーです。支払い系のツールは、ユーザーが実行前に確認できるよう MCP elicitation に対応したクライアントが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
90掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| phone | string | はい |
詳細
T-Bank MCP
T-Bank (Т-Банк) MCP — Claude Code、Codex、ChatGPT、その他のMCP対応エージェント向けのモバイルバンキングAPIサーバーです。
ボタンを押すと tbank-mcpコマンドが登録されます。まずpip install tbank-mcpを実行してください。
機能
- 90個のツール:口座、カード、書類、取引、食料品の注文、映画やコンサートのチケット、列車や航空券の予約、ホテル検索、注文、振込(銀行口座情報による支払い、スキャンした請求書のQRコードからの支払いを含む)、メッセンジャー、投資
- 分野ごとのスキル:
tbankルータースキルから利用できます。食料品の注文、チケット、旅行、振込、請求書の支払い、カードと書類、メッセンジャー、予算分析、投資アドバイザー、ログイン - CA証明書の固定:システムストアに加え、ロシアのTrusted Root CA(Минцифры)を使用します。これはどのOSにも標準搭載されておらず、ほとんどのホストにあたる
*.t-bank-app.ruホストすべてで必要です。tbank_mcp/ca/roots/に同梱され、SHA-256で固定されています。リーフ証明書や中間証明書のローテーションには対応不要です。ルート証明書のローテーション時は、tbank_mcp/ca/roots/(またはTBANK_EXTRA_CA)にPEMファイルを追加します。検証バンドルはその証明書から~/.local/share/tbank-mcp/bundle.pemに生成(または再生成)されます。保存先はTBANK_CA_BUNDLEで変更できます。これは書き込み先であり、管理対象の入力ではありません。追加のルート証明書はTBANK_EXTRA_CA経由で追加してください。証明書がネットワークから取得されることはありません。詳しくはtbank_mcp/tls.pyのヘッダーをご覧ください。 - 食料品の決済:検索 → カート → 注文 → 支払い(エンドツーエンドで実証済み)
- 安全なログイン:パスワードとPINはLLMのコンテキストに入りません(ローカルCLIまたは環境変数を使用)
クイックインストール
Claude Codeプラグインとして(サーバーとすべてのスキルを一度に)
/plugin marketplace add icyberdeveloper/tbank-mcp
/plugin install tbank@tbank-mcp
/reload-plugins
参加が承認されているストアはありません。マーケットプレイスは.claude-plugin/marketplace.jsonを含むGitリポジトリにすぎず、誰でもホストできます。
仮想環境とPython依存関係は、サーバーの初回起動時にbin/tbank-mcpによって作成されます。プラグインマニフェストではインストール手順を実行できません(スキーマにinstallフィールドがありません)。そのため、ランチャーが一度だけ作成し、以降の起動ではサーバーを直接実行します。ブラウザーが必要なのは食料品の決済だけです。150 MBを知らないうちにダウンロードすることはないため、このフローを使いたい場合は自分でインストールしてください。
~/.claude/plugins/cache/tbank-mcp/tbank/*/.venv/bin/python -m playwright install chromium
PyPIから
pip install tbank-mcp
tbank-mcp-login +7XXXXXXXXXX # first login: SMS code + password in YOUR terminal, not the LLM
claude mcp add tbank -- tbank-mcp
tbank-mcp-skills # optional: the Claude Code skills, into ~/.claude/skills
tbank-mcpコンソールスクリプトでstdioサーバーが起動します。固定されたCAルート証明書、フローのリファレンス、スキルはすべてwheelに同梱されるため、どこからでも実行できます。tbank-mcp-loginはリポジトリのlogin_cli.pyと同じログインCLIで、どちらもサーバーが読み取る同じファイルにセッションを保存します。tbank-mcp-skillsはClaude Code用のスキルをインストールします(デフォルトは~/.claude/skills、別の場所には--targetを指定)。単純なcpとは異なり、廃止された名前の古いコピーを先に削除するため、アップグレード後に再実行してください。ここでも食料品の決済用ブラウザーはオプトインです。
python -m playwright install chromium
手動(プラグインを使わずクローン)
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 tbank_mcp.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. The
# installer also removes stale copies under RENAMED skill names, which a plain
# cp never does — the agent would keep loading the stale one:
.venv/bin/tbank-mcp-skills
🔒 ログイン — パスワードがエージェントに渡ることはありません
パスワードとPINは秘密情報であり、モデルのコンテキストには入りません。ログインはローカルスクリプトまたは環境変数を使って行います。
オプション 1(推奨):ローカル CLI
スクリプトは getpass を使ってパスワードを直接尋ねるため、ターミナルに表示されず、エージェントを経由することもありません。プロンプトは次のようにロシア語です。
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 читает этот же файл — путь совпадает без ручной настройки.
CI やスクリプトで使う場合は、パスワードを環境変数に設定する方法もあります。
TBANK_PASSWORD="your-password" .venv/bin/python login_cli.py +7XXXXXXXXXX
その後、Claude Code を起動します。エージェントは保存済みのセッションを取得し、LLM のコンテキストに入ることのないパスワードを使わずに動作します。
オプション 2:エージェント経由(便利ですが、LLM にパスワードが見えます)
エージェントにパスワードを渡してもよい場合は、次の方法を使います。
> login(+7XXXXXXXXXX)
> [SMS code] 1234
> confirm_otp("1234")
> [bank asks password]
> confirm_password("YourPassword")
⚠️ 注意: パスワードはモデルのコンテキストと呼び出しログに残ります。大切なアカウントには、オプション 1 を使ってください。
どちらの方法でも SMS コードを入力する必要があるため、無人でログインすることはできません。TBANK_PASSWORD(および TBANK_PIN)を読み取るのはログイン CLI(tbank-mcp-login / login_cli.py)だけです。上記の環境変数の例が該当し、MCP サーバーや LLM が読み取ることはありません。TBANK_PHONE はどこからも読み取られません。電話番号は常にコマンドライン引数として渡します。
MyT(業務カレンダーと駐車場)は、別の MCP の tbank-myt に移行しました。別のアカウント、別のセッション、専用の
login_cli.pyを使用します。これらはここにはもうありません。
その他のエージェント(Codex、ChatGPT、Hermes、OpenClaw)
{
"mcpServers": {
"tbank": {
"command": "/path/to/tbank-mcp/.venv/bin/python",
"args": ["-m", "tbank_mcp.server"],
"cwd": "/path/to/tbank-mcp"
}
}
}
pip install tbank-mcp を使えば、エントリー全体を "command": "tbank-mcp" に短縮できます。パスや cwd は不要です。
Cursor での使用
上の Install MCP Server ボタンをクリックするか、Cursor のサイドバーから Customize ページを開いてサーバーを追加します。または、~/.cursor/mcp.json(グローバル)/.cursor/mcp.json(プロジェクトごと)を作成します。
{
"mcpServers": {
"tbank": { "command": "tbank-mcp" }
}
}
Cursor は MCP のエリシテーションを表示するため、支払い確認ボタンがチャットで機能します。
Cherry Studio での使用
設定 → MCP → MCP サーバー → 追加:stdio と入力し、コマンドに tbank-mcp を指定します。引数は不要です。保存してサーバーを有効にし、ステータスが正常になるまで待ちます。
Cherry Studio はまだ MCP のエリシテーションを表示しません(対応リクエストは CherryHQ/cherry-studio#9145 を参照)。そのため、読み取りはできますが、金銭関連のツールはそこで実行を拒否します。これは意図的な動作です。
Goose での使用
CLI:goose configure → 拡張機能を追加 → コマンドライン拡張機能 を選択し、名前に tbank、コマンドに tbank-mcp を指定します。デスクトップ:サイドバー → 拡張機能 → カスタム拡張機能を追加 で、同じ値を指定します。
Goose はデスクトップと CLI の両方でエリシテーションを表示します。確認フォームは 5 分後にタイムアウトするため、支払い確認には速やかに回答してください。
読み取りはどの MCP クライアントでも可能です。支払いには MCP のエリシテーションを表示できるクライアントが必要です。金銭関連のツールは、ユーザーがボタンを押して金額を確認します(«Перевести/Отмена»、«Оплатить …?»)。この機能を備えていないクライアントでは、送信前に実行を拒否します(grocery_checkout はどのしきい値でも実行を拒否しますが、何も作成しない dry_run=True のプレビューは引き続き利用できます)。Hermes/Telegram と Claude Code(≥ 2.1.76)は表示できますが、Claude Desktop は表示できません。セキュリティの「TBANK_CONFIRM_ABOVE」を参照してください。
ツール
各ツールの説明文が正式な仕様です。この表は概要を示すものにすぎません。 説明文、スキル、ツールが出力するすべての内容はロシア語です。銀行がロシアの銀行であり、回答を読む人もロシア語を使うためです。
| グループ | ツール |
|---|---|
| ログイン | login, confirm_otp, confirm_password, confirm_pin |
| セッション | refresh_session, session_status, keepalive, push_unread_count |
| 参照 | list_accounts, list_operations, spending_categories, operations_histogram, get_data |
| カードと口座 | list_cards, card_limits, card_requisites, card_operations, account_requisites |
| 書類 | documents, bank_documents, insurance_policies, payment_receipt |
| 食料品 | grocery_stores, grocery_search, grocery_plan_order, grocery_add_to_cart, grocery_set_cart, grocery_cart, grocery_checkout, payment_attempts, grocery_order_status, grocery_order_cancel |
| 栄養 | grocery_good_info, grocery_rank |
| 注文 | orders, order_details, travel_order_details |
| アフィシャ | afisha_catalog, afisha_places, place_schedule, place_info |
| チケット | cinema_search, cinema_schedule, cinema_seats, concert_schedule, concert_hall, cinema_book, ticket_pay, ticket_cancel, ticket_qr |
| 検索 | search_app |
| 旅行検索 | train_search, train_calendar, flight_search, flight_offer, flight_history |
| 旅行予約 | train_seats, train_book, train_pay, train_refund, flight_seats, flight_book |
| ホテル | hotel_search, hotel_info |
| 旅行 | trips, travel_payment_options, travel_ticket_file |
| マーケットプレイス | shop_search, shop_cart |
| メッセンジャー | messenger_conversations, messenger_messages, messenger_file, messenger_send, messenger_unread |
| 送金 | transfer_sbp_resolve, transfer, payment_qr, transfer_requisites, payment_commission, pay_bill, payment_providers, confirm_payment, payment_status |
| 投資 | invest_accounts, invest_portfolio, invest_operations, invest_securities |
| ユーティリティ | flows, diagnostics, debug_report |
get_data(section) は、subscriptions、credit_schedule、statements、loans、invest_accounts、pension など、数十種類の参照セクションを扱います(invest_portfolio はセクションではなく独立したツールです。全リストについては説明文を参照してください)。
食料品ツール(grocery_search、grocery_plan_order、grocery_add_to_cart、grocery_set_cart、grocery_cart、grocery_checkout)には、grocery_stores() から取得した app_id と point_id が必要です。暗黙的に選択されるデフォルト店舗はありません。そのため、追加、カート表示、チェックアウトは常に同じカートに対して行われ、別の店舗のカートに追加した直後に空のカートが表示されることはありません。
スキル
| スキル | 内容 |
|---|---|
tbank | エントリーポイント — 銀行でできることと、どのスキルが対応するかを案内します |
tbank-grocery-order | レシピ → 検索 → カート → カートの表示 → チェックアウト(合計金額はツール独自のボタンで確認します) |
tbank-tickets | 映画/コンサート:検索 → 上映時刻 → 座席 → 予約 → 支払い |
tbank-travel | 鉄道と航空便:検索 → 座席 → 予約 → 支払い → 払い戻し。ホテルとマーケットプレイス:検索のみ |
tbank-bill-pay | 公共料金、税金、罰金などの請求書:カタログ → プロバイダーの入力項目 → 手数料の事前確認 → 支払い |
tbank-transfer-money | P2P、SBP(СБП)、口座振込 |
tbank-cards-documents | カード、利用限度額、口座情報、パスポート、その他の書類 |
tbank-messenger | 銀行のチャットとサポート |
tbank-budget-analyzer | 支出分析、サブスクリプションの監査、節約のヒント |
tbank-invest-advisor | ポートフォリオ、損益、リバランス、税金の最適化 |
tbank-login | 複数ステップのログイン、セッション管理 |
リクエスト例
ロシア語で質問してください。ツールの回答もロシア語です。以下はすべて実際の銀行に対して実行したものです。
映画とアフィシャ
Что идёт в кино сегодня?
Купи два билета на «Майкла» на завтра в Каро 11 около 20:00 в центре зала
Отмени заказ
Покажи последние 5 моих заказов
お金
Покажи мои счета
Переведи 10 рублей Алёне на +79991234567
Какие последние 5 операций?
Покажи реквизиты счёта
食料品
Хочу оливье, собери корзину с минимальным КБЖУ
Хочу оливье, собери корзину с минимальной ценой
Хочу оливье, собери корзину из премиум продуктов
Найди самый дешёвый картофель за килограмм
Отмени заказ
カードと書類
Покажи реквизиты основной карты
Какие лимиты по основной карте?
Покажи реквизиты моего паспорта
Когда истекает мой загранпаспорт?
テスト
pytest は使用しません。テストは単独のスクリプトです。すべて実行します:
.venv/bin/python tests/run_all.py # every file, under a minute, offline
.venv/bin/python tests/run_all.py transfer # only files matching "transfer"
各テストはそれぞれ別のプロセスで実行され、ランナーは試行/イベントのジャーナルを一時ディレクトリにリダイレクトするため、テストの実行によって ~/.local/share/tbank-mcp/ に書き込まれることはありません。
必要なものはすべてリポジトリ内にあります。リクエストのコントラクトは、サニタイズ済みの tests/fixtures/ 内のフィクスチャ(実際の構造とプロトコル値、合成された個人データ)に固定されているため、クリーンなクローンでも有意義なテストスイートを実行できます。元の Burp キャプチャがある場合、テストではフィクスチャがキャプチャから乖離していないことも確認します。
セキュリティ
session.json— 正規のパスは~/.local/share/tbank-mcp/session.json(TBANK_SESSIONで変更可能)、モードは 0600、所有者のみがアクセスできます。トークンを保持します。ログイン CLI と MCP サーバーは同じファイルを読み込むため、設定は不要です。起動時に MCP がログに記録するのはパス、サイズ、権限のみで、トークンや Cookie は決して記録しません。- パスワード/PIN — git にもコードにも含まれず、ログイン CLI(
tbank-mcp-login/login_cli.py)を使用すれば LLM のコンテキストにも含まれません。 - リポジトリにシークレットはありません。 コミット済みのファイルのうち、シークレットに見えるものが 2 種類ありますが、どちらもシークレットではありません。
tbank_mcp/ca/roots/*.pemは公開 CA ルート証明書で、意図的に同梱され、tbank_mcp/tls.pyで SHA-256 によるピン留めが行われています。tests/fixtures/*.jsonは実際のキャプチャから機密情報を除去したリクエストコントラクトです。実際の構造とプロトコル値を保ちつつ、アカウント、電話番号、住所、デバイス ID は合成データに置き換えています。キャプチャそのものは gitignore されており、マシンの外に出ることはありません。 events.jsonl+attempts.jsonl—~/.local/share/tbank-mcp/にある、機密情報を除去した診断情報です。ステップ、http_status、原因、金額、注文 ID が含まれ、トークン、Cookie、住所、電話番号、メールアドレス、口座番号は含まれません。デバッグ中に安全に共有できます。diagnosticsツールが読み込みます。calls.jsonl— ツール呼び出しごとに 1 行記録するため、エージェントがこの MCP をどのように使用しているか(ツール、その引数、所要時間、そしてエージェントが実際に読んだ回答の先頭行)を確認できます。上記のファイルと同じ取り決めに従っています。人が書いた自由形式のテキスト(チャットメッセージ、振込メモなど)や認証情報にあたる引数は、計測のみ行い、保存しません。長い数字の並び(口座、カード、注文、支払い ID)は、記録行内で置き換えます。記録に残さないためだけでなく、レポートがその行ごとに集計するためです。debug_reportツールが読み込みます。デフォルトで有効です。TBANK_TRACE=0で無効化でき、TBANK_TRACE_FILEで保存先を変更できます。5 MB でローテーションします。TBANK_CONFIRM_ABOVE— 即時に引き落としを行う支払いツール(transfer、transfer_requisites、pay_bill、ticket_pay、grocery_checkout、train_pay、flight_book)が確認ボタンを表示する金額(ルーブル)のしきい値です。クライアントが表示する MCP エリシテーションダイアログ(「振込/キャンセル」、「…を支払いますか?」、「N ₽ で注文を確定しますか?」)に対応します(デフォルトは0で、すべての支払いで確認を求めます)。これはサーバー側の設定であり、ツールの引数ではありません。エリシテーションに対応していないクライアントでも、確認を省略して処理を進めることはありません。しきい値以上の場合、ツールはジャーナルへの記録や送信を行う前に拒否します(「支払いは実行されませんでした…」)。ボタンがなければ、支払いも行われません。Hermes/Telegram と Claude Code(≥ 2.1.76)はエリシテーションを表示しますが、Claude Desktop は対応していません(読み取りはできますが、支払いはできません)。 正のしきい値を下回る場合は、どのクライアントでも確認を求めずに支払いが実行されます。ただし、grocery_checkoutはどのしきい値でもエリシテーションに対応していないクライアントを拒否します。支払いツールの中でこれだけは、合計金額を知るためにチェックアウトページを読み込む必要があり、その操作によって店舗に配送枠の確保を依頼することになるためです。その処理を行った後ではなく、行う前に拒否します。grocery_checkout(dry_run=True)は何も作成しないプレビューのため、どのクライアントでも引き続き使用できます。- デバイスプロファイル。 支払いには 3DS/不正利用対策ブロックが含まれます。そのデバイス情報(画面サイズ、ロケール、タイムゾーン、ハードウェアモデル)は、デフォルトでトラフィックのキャプチャ元のデバイスに設定されています。
TBANK_DEVICE_SCREEN_HEIGHT/_WIDTH/TBANK_DEVICE_LANGUAGE/TBANK_DEVICE_TIMEZONE/TBANK_DEVICE_MODELで変更すれば、自分の支払いに他人の電話の情報が記載されるのを防げます。 - リクエスト形式の切り替え。 キャプチャしたアプリとの相違点を 2 つ、環境変数で切り替えられるように修正しています。ロールバックは変数 1 つで済み、再ログインも不要です(どちらも
session.jsonには触れません)。TBANK_QUERY_PROFILE=legacy— すべてのホストへのwuidの送信と、すべての読み取りへのvendor/client_versionの挿入を元に戻します。アプリは/api/common/配下のwww.tbank.ruにのみwuidを送信し、残る 2 つは OIDC の authorize 呼び出しでのみ送信するため、デフォルトは対象を限定した形式になりました。TBANK_ACCEPT_PROFILE—json(デフォルト。現在の動作とバイト単位で同じ) |auto| ホストをカンマ区切りで指定します。アプリはネイティブホストにapplication/jsonを送信しません。この文字列は Accept が設定されていない場合に現れる、Apple の URL 読み込み時のデフォルト値です。どちらの場合もキャプチャされたレスポンスはapplication/jsonなので、これは修正ではなく忠実性を高めるための変更です。ただし、最も利用頻度の高いホストを 63 個のテンプレートが共有しており、ステージング環境もないため、実環境で検証されるまでは無効にしてあります。費用の低いものから、ホストの種類ごとに段階的に展開してください。webview/shortcuts/my-home(到達不能なもの、または単純な読み取り)→api-invest*(invest_accounts、invest_portfolio)→api.t-bank-app.ruはkeepaliveから開始します。ここでは、本文が JSON のままなのに Content-Type がtext/htmlになることが実証されています。→www.tbank.ru→ 3 つのライフスタイル系シェルフパス。回帰が起きると、本文を解析できなくなり_unwrapがHTTP_200を発生させます。各段階の前後でdebug_report()を比較してください。
- 金銭を扱うツール(
transfer、transfer_requisites、grocery_checkout、ticket_pay、pay_bill、train_pay、flight_book、confirm_payment)では、具体的な金額の確認が必要です。「買って」は確認になりません。確認には、実際の合計金額を表示するツール独自のボタン(エリシテーション。上記のTBANK_CONFIRM_ABOVEを参照)を使います。エージェントは事前に詳細(受取人、振込先情報、カート、座席と手数料)を表示し、テキストで「はい/いいえ」と尋ねることはありません。grocery_checkoutは最終金額を自ら提示し、ボタンに表示された金額を正確に請求します。金額が提示できない場合(空のカート、店舗が拒否したプレビュー、有効な正の合計金額がない場合)は、プレビューを返して請求は行いません。銀行がWAITING_CONFIRMATIONで保留した/v1/payは、confirm_payment(attempt_id, otp)で再開し、payment_status(attempt_id)で状態を確認します。再度振込を行うと保留中の支払いが 2 件目として作成されるため、繰り返してはいけません。 - ツールアノテーション。 すべてのツールの動作は
tbank_mcp/server.pyのTOOL_KINDSという 1 つのテーブルで宣言されています。宣言されていないツールがあると、デフォルト値にフォールバックするのではなくインポート時にエラーになります。種類は 3 つです。67 個はreadOnlyHint: trueで、プロンプトなしで実行できます。15 個は費用のかからない何か(カート、予約、メッセージ、OTP、トークン、ローカルファイル)を書き込み、destructiveHint: falseに設定されています。8 個は口座から引き落とすツール(transfer、transfer_requisites、grocery_checkout、ticket_pay、pay_bill、train_pay、flight_book、confirm_payment)で、destructiveHintが付くのはこれらだけです。これによってホストが実行前に確認を求めます(合計金額自体は、上記のとおりツール独自のエリシテーションボタンで確認します)。あえて金銭を基準にしています。予約は自動的に期限切れになり、カートの項目はすぐに書き換えられるため、これらに確認を求めるのは、重要な唯一のダイアログまでクリックして通過するよう人々に学習させるだけの手間になります。 15 個の書き込みツールを読み取り専用に設定していないのは、実際に変更を加えるためであり、そのフラグは正反対の意味を持つからです。クライアントがこれらに対して引き続き確認を求める場合は、サーバーの申告内容を変更するのではなく、クライアント側で一度だけ許可してください。
免責事項
ご自身の T-Bank アカウントで個人的にご利用ください。T-Bank とは提携していません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。