BankMCP™ について
BankMCP™は、Enable Banking経由で個人の銀行口座に接続する、オープンソースのセルフホスト型MCPサーバーです。口座データを読み取り専用で公開し、残高や取引を保存せず、送金にも対応しません。
主な機能
- 01残高と取引の取得
- 02加盟店名や請求書番号で取引検索
- 03月ごとの収支サマリー作成
- 04残高や支払いの監視設定
- 05銀行接続用プロンプトの提供
活用シーン
- 01口座残高と利用可能残高の確認
- 02請求書の入金確認
- 03月ごとの収入と支出の確認
- 04残高がしきい値を超えた際の通知
MCP 対応
BankMCP™は、読み取り専用の口座データとツールをMCPクライアントに公開します。ローカルのstdioまたはリモートHTTPで接続でき、プロンプトから銀行接続を開始できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
BankMCP™
AI が銀行口座の情報を読み取ります。 口座について何でも質問できます。読み取り専用、セルフホスト可能、ユーザーは 1 人です。標準の MCP に対応し、Claude と Ollama でテスト済みです。
BankMCP™ は銀行ではありません。自分でホストする小さなオープンソースサーバー(npm パッケージ bankmcp)です。Enable Banking を通じて銀行に接続します。Enable Banking は 2,700 以上の欧州の銀行を 1 つの PSD2 API で利用できるようにし、コネクターとしてあらゆる MCP クライアントに公開します。読み取り専用で、決済は行わず、第三者がデータを保管することもありません。
「Acme からの請求書は支払い済みですか?」・「8 月に食料品にいくら使いましたか?」・「支払い中のサブスクリプションと年間費用を教えてください。」・「残高が 5,000 を下回ったら知らせてください。」
仕組み
Your assistant ──OAuth──▶ your BankMCP™ server ──JWT──▶ Enable Banking ──PSD2──▶ your bank
- アシスタント(Claude、ChatGPT、Cursor、その他の MCP クライアント)は、コネクターとしてサーバーと通信します。パスワードで一度サインインすれば、あとはトークンが処理します。
- サーバーは Enable Banking のアプリケーションキー、銀行の同意情報、口座 ID を保持します。残高や取引は保存せず、テレメトリーも送信しません。
- Enable Banking は、サーバーと銀行の間に入るライセンスを受けたプロバイダーです。問い合わせた残高や取引はすべて、サーバーに届くまで Enable Banking のサーバーを経由しますが、Enable Banking がそれらを保存することはありません。また、銀行の認証情報を見ることもありません。銀行独自のサイトでログインするためです。この経由は PSD2 の仕組みに必要であり、データの流れの中で唯一、あなたのマシン上で完結しない部分です。
セットアップ
実行方法は 2 つあります。どちらも無料の Enable Banking アカウントが必要で、所要時間は 10 分ほどです。
- 自分のマシンで実行:Claude Desktop、Claude Code、Cursor、その他のデスクトップ MCP クライアント向けです。デプロイは不要で、パスワードも必要ありません。
- 小規模なサーバーで実行:claude.ai やスマートフォンで使いたい場合に適しています。
自分のマシンで実行
サーバーとその状態は自分のコンピューター上に保存され、AI ベンダーやアプリの開発元がデータを見ることはありません。ただし、前述のとおり、銀行との接続は自分のコンピューター上ではなく、Enable Banking を経由します。
Node 24 以降が必要です。BankMCP™ をクライアントに追加します。
Claude Code:
claude mcp add bankmcp -- npx -y bankmcp
Claude Desktop:
bankmcp.mcpb
をダウンロードして開きます。Claude Desktop が拡張機能としてインストールします。または、claude_desktop_config.json に手動で追加します。
{ "mcpServers": { "bankmcp": { "command": "npx", "args": ["-y", "bankmcp"] } } }
Cursor など:同じコマンド npx -y bankmcp を stdio サーバーとして使用します。
次に、銀行についてアシスタントに何でも質問してください。アシスタントが localhost のアドレスを返します。開くとセットアップページが表示され、Enable Banking にアプリケーションを登録するための値が示されます。その後、アプリケーション ID とキーのファイルを指定します。Enable Banking では銀行へのリダイレクトに https が必要なため、サーバーが自分で作成した localhost の証明書について、ブラウザーに一度だけ警告が表示されます。そのまま進んでください。「銀行に接続して」と伝え、銀行のサイトでログインします。
警告を表示させないようにするには、ブラウザーがすでに信頼している証明書を使用してください。mkcert で mkcert localhost 127.0.0.1 を実行すると証明書を作成できます。TLS_CERT_PATH と TLS_KEY_PATH に 2 つのファイルのパスを指定すると、サーバーは自分で証明書を生成せず、それらを使用します。BankMCP™ 自体がシステムの信頼ストアを変更することはありません。
状態は ~/.bankmcp に保存されます。このフォルダーを削除すると、すべての情報が消去されます。
サーバーで実行
1. デプロイ
どのコンテナホストでも利用できます。サーバーには /data
への永続ボリュームと、公開された https アドレスが必要です。それ以外の設定はすべてブラウザー上で求められます。
ビルド済みイメージはリリースごとに公開されます:
ghcr.io/noskillish/bankmcp(タグ付けされたソースから GitHub Actions
でビルド。linux/amd64 および linux/arm64)。
Railway:
では、公開済みイメージを
/data にボリュームをマウントし、ドメインを設定した状態でデプロイします。入力する項目はありません。
手動で行う場合:New Project、Deploy from GitHub repo の順に選び、この
リポジトリを選択して、/data にマウントするボリュームを追加し、ドメインを生成します(Settings、
Networking、ポート 8080)。サーバーは Railway から自身のアドレスを取得します。
Fly.io: チェックアウトしたリポジトリから、fly.toml を使って次の 3 つのコマンドを実行します:
fly launch --copy-config --no-deploy # pick an app name and region
fly volumes create data --size 1
fly deploy
Render:
は render.yaml を使用します。Render の永続ディスクには有料インスタンスが必要です。
自分のマシンで Docker を使う場合:
docker run -d --name bankmcp --restart unless-stopped \
-p 8080:8080 -v bankmcp-data:/data ghcr.io/noskillish/bankmcp:latest
または、compose.yaml を使って docker compose up -d を実行します。その後、手前に TLS
ターミネーターを配置し(Caddy なら次の 2 行です:
YOUR-HOST { reverse_proxy localhost:8080 })、BASE_URL に公開アドレスを設定します。
サーバーはデフォルトで、すべてのインターフェースにバインドします。プロキシが同じマシン上で
実行される場合は、ローカルネットワーク上の他のデバイスからログインページやセットアップページにアクセスされないよう、
BIND_HOST=127.0.0.1 を設定してください。
アドレスを開きます。初回起動時にはセットアップページが表示されます。
2. Enable Banking アプリケーションを登録する
セットアップページから登録できます。Enable Banking アカウントのメールアドレス(または、新規作成に使用するメールアドレス)を入力し、サインインリンクを送信 を押します。 Enable Banking から一度だけ使えるリンクがメールで届きます。次のページに貼り付けてください。 サーバーはそのリンクで一度サインインし、適切なリダイレクトアドレスとポリシーアドレスを設定してアプリケーションを作成し、 キーペアを生成して、ID とキーを保存します。サインイン情報は保存されません。ローカルサーバーでは、 リンクをクリックするだけで同じ操作が行われ、貼り付ける必要はありません。
手動で行う場合:セットアップページには、Enable Banking のフォームで求められる値が正確に表示され、
それぞれにコピー用ボタンがあります。https://enablebanking.com/cp/applications で値を入力してアプリケーションを作成し、
秘密鍵を生成 を選択したまま保存します。.pem ファイルが一度だけダウンロードされます。これがキーです。
セットアップページにアプリケーション ID を貼り付け、.pem ファイルを選択します。保存する前に、
ID とキーが Enable Banking によって検証されます。
どちらの場合も、実際のアカウントには Production、テストデータには Sandbox を選択します。 自分のアカウント用の Production アプリケーションは、コントロールパネルで アカウントをリンクして有効化 を一度実行すると有効になります。 詳しくは下記の 本番環境への移行 をご覧ください。
3. セットアップを完了する
12 文字以上のパスワードを選択します。その後、Ready ページに、確認された内容(アプリケーション、 リダイレクト URL の登録状況と有効化状況)と、コピー用のコネクターアドレスが表示されます。
環境変数による設定を希望する場合は、以下を設定するとセットアップページは表示されません:
4. アシスタントにコネクターを追加する
claude.ai(またはデスクトップアプリ)で、Settings → Connectors → Add custom
connector の順に選択します。名前を BankMCP™ にし、https://YOUR-HOST/mcp を貼り付けて保存し、
Connect をクリックします。サーバーにパスワードページが表示されます。管理者パスワードを入力してください。
ログインが必要なのはこのときだけです。
Claude Code の場合:
claude mcp add --transport http bank https://YOUR-HOST/mcp
その後、Claude Code 内で /mcp を実行してサインインします。
その他の MCP クライアント(ChatGPT、Mistral Le Chat、Cursor、VS Code)も同様に使えます:
URL をリモート MCP サーバーとして追加し、パスワードでサインインしてください。Claude、Claude Code、Ollama でテスト済みです。
その他のクライアントも同じ標準に準拠しています。
ドメインが ALLOWED_REDIRECT_HOSTS に含まれていないクライアントは、そこに追加する必要があります。
5. 銀行を接続する
アシスタントに 「銀行を接続して」 と伝えます(または connect-bank プロンプトを使います)。銀行を検索してリンクを表示するので、銀行にログインして承認すると、口座が表示されます。同意の有効期間は最長180日です。有効期限が近づくと通知され、同じ会話で更新できます。
口座名を提案されたら、「日常用」「共同支出」「住宅ローン」などのラベルを付けてください。すべてのツールで、IDの代わりにラベルを使用できます。
自分の口座で本番環境を利用する
Enable Bankingの本番環境を通常利用するには契約が必要ですが、自分の口座にアクセスするための制限モードがあり、個人による非商用利用が明示的に認められています。Productionアプリケーションを登録した後、次の手順を実行します。
- (Inactive)アプリケーションでActivate by linking accountsをクリックします。
- 銀行にログインして承認します。利用する銀行ごとに繰り返します。
- アプリケーションが有効になり、APIからはこの方法でリンクした口座のみが返されます。
利用する前に、Enable Bankingの利用規約のRestriction of Useセクションをお読みください。制限モードは自分の口座向けであり、他者にサービスを提供するためのものではありません。このプロジェクトによって規約が変更されることはありません。
利用できる機能
ツール(すべて読み取り専用):
| ツール | 機能 |
|---|---|
list_banks, start_consent, consent_status, disconnect_bank | 銀行の接続と管理 |
list_accounts, set_account_label | 記帳残高付きの口座と、口座に付ける任意の名前 |
get_balances | 1つの口座の記帳残高と利用可能残高 |
get_transactions | 符号付き金額、取引先1件、摘要1件をページ分割して取得 |
search_transactions | 全口座から加盟店名または請求書番号を検索。単語全体で一致 |
monthly_summary | 月ごとの入出金。自分の口座間の振替は除外 |
create_watch, list_watches, delete_watch, check_watches | Webhook通知付きのバックグラウンドルール |
attest_account | デフォルトでは無効。口座を証明する相手に向けて、IBANが自分のものかどうかを署名付きで「はい/いいえ」で証明します。ATTESTATION.mdを参照してください |
プロンプト:connect-bank、monthly-summary、build-budget、
savings-scan、subscription-audit、unusual-transactions。
ウォッチはサーバー上で実行されます。ルールには、残高が指定額を下回るまたは上回る場合、1回の引き落としが指定額を超える場合、指定した名前に一致する入金または出金がある場合、「この日付までに入金されなかったら知らせて」があります。PSD2で定められた非対話型アクセスの上限に従い、口座の確認は1日あたり最大4回です。通知はNOTIFY_WEBHOOK_URLにSlackメッセージまたはJSON POSTとして送信されます。
Enable Banking独自のWebhookが対応しているのは支払い開始のみなので、口座データはポーリングされます。PSD2のもとでは、これを回避する方法はありません。
Claude Codeプラグイン
このリポジトリはClaude Codeプラグインマーケットプレイスでもあります。bankプラグインには3つのスキルがあります。/bank:setupはBankMCP™をマシンにインストールする手順を案内し、/bank:deployはホスティングの手順を案内します。また、bankにはデータの扱い方として、口座マップ、分類ルール、月次レビューの形式、ウォッチを作成するタイミングが記載されています。
サーバーを指定してから、インストールします。
export OPENBANK_URL=https://YOUR-HOST/mcp # put this in your shell profile
/plugin marketplace add noskillish/bankmcp
/plugin install bank@bank
次に/mcpを開き、bankを選択してAuthenticateをクリックし、パスワードを入力します。組織の管理者が関与する必要はありません。プラグインはユーザーごとに利用します。
スキルはplugin/skills/bank/SKILL.mdにあります。これを独自のスキルにコピーして、口座マップや加盟店ルールを記入してください。サーバーは汎用のままで、ルールは自分だけのものとして保持できます。
ローカルモデル(実験的)
どのモデルからリクエストされるかは、サーバーには関係ありません。npm run chat は
Ollama モデルを stdio 経由で同じツールに接続するため、AI
ベンダーに取引データが送信されることはありません。
ollama pull qwen3:8b
npm run chat -- "what's my balance?"
24 GB の MacBook Air で測定したところ、口座ごとの残高は正しいものの、合計は誤っており、
回答ごとに 10 分かかりました。8B モデルはまだ金銭を扱う用途では信頼できません。
実用的になるのは、実際の GPU を搭載したマシンで動く 30B クラスのモデルです。ツール呼び出しに対応する
任意の MCP クライアント(LM Studio、Goose、Jan)から、node src/stdio.ts を直接指定することもできます。
どちらの場合も、あなたと銀行の間には Enable Banking が介在します。この部分には規制があり、避けられません。
セキュリティに関する注意事項
- このサーバーは、ユーザーが 1 人の完全な OAuth 2.1 認可サーバーです。 ディスカバリー、動的クライアント登録、PKCE は MCP SDK が提供します。 トークンはハッシュ化して保存されます。パスワードを 5 回間違えると、そのアドレスからのアクセスが 15 分間ロックされ、すべてのアドレスから合計 20 回間違えると、全員のサインインが 15 分間ロックされます。 ロック中も、すでに接続済みのアシスタントは引き続き動作します。
- 状態は
DATA_DIR内の 1 つの JSON ファイルに保存されます。そこには、同意情報、口座 ID、 監視設定(すでに通知を発生させた取引の ID を含む)、OAuth トークンが含まれます。 残高や取引はディスクに書き込まれません。アシスタントは通常のチャットと同様に会話を保持し、 監視通知では一致した取引が Webhook に送信されます。同意をやり直さずに済むようにしたい場合は、 ファイルをバックアップしてください。すべてを忘れさせるには、ファイルを削除してください。 - 既知の MCP クライアントのドメイン(Claude、ChatGPT、Mistral、Cursor、VS Code)または
localhost にリダイレクトするクライアントのみ登録できます(
ALLOWED_REDIRECT_HOSTS)。 これにより、フィッシングリンクからサインインを別のサイトへ誘導されるのを防ぎます。 リストにないクライアントを使う場合は、そのドメインを追加してください。サインインページにも、 リダイレクト先のホスト名が表示されます。 - 通知の送信先は 1 か所だけです。ホスト上で運用者が設定する
NOTIFY_WEBHOOK_URLで、 https である必要があります。監視設定で独自の Webhook を指定することはできないため、 クライアントや、そうするよう誘導されたアシスタントが、取引データを別のアドレスや サーバーのネットワーク内にある接続先へ送ることはできません。 - コードを読む方向けに、チェックが行われる場所を説明します。すべての
/mcpリクエストは、 ツールの実行前にsrc/app.tsのrequireBearerAuthを通ります。トークンは、completeLoginでのパスワード確認後に、src/auth.tsのSingleUserProviderによって 発行および検証されます。ユーザーは 1 人のため、有効なトークンが認可のすべてであり、 ツールにはそれ以上のユーザーごとのチェックはありません。ローカルモード(npx bankmcp)では OAuth は使われません。マシン上のクライアントは stdio 経由でサーバーと通信し、 そのマシンでプロセスを実行できる人は誰でも利用できます。 - 取引の説明や取引相手の名前は、たとえば支払いを送ってきた人など、第三者が記入します。 サーバーはアシスタントに対し、これらを指示ではなくデータとして扱うよう伝えます。 それでも、アシスタントがこれらに惑わされる可能性はあります。
- 管理者パスワードを知っている人は、口座を閲覧できます。長くしてください。
サインインが成功するたびにログに記録され、
NOTIFY_WEBHOOK_URLが設定されていれば、 メッセージとしてあなたに送信されます。自分が行っていないサインインは警告の合図です。 - パスワードを忘れた場合は、ホスト上で
ADMIN_PASSWORD(またはADMIN_PASSWORD_HASH)を設定して 再起動してください。環境変数の値は、セットアップ時に保存した値より優先されます。 ADMIN_PASSWORD_HASH(またはADMIN_PASSWORD)を変更して再起動すると、すべてのクライアントが ログアウトします。これが緊急停止スイッチです。さらに対処するには、銀行側で同意を取り消すか、 状態ファイルを削除してください。- 支払いツールはありません。支払いには認可を受けた PISP と、まったく異なるセキュリティモデルが 必要なため、対象外です。
コマンド
npm start # http server (reads env from the environment)
npm run dev # same, with reload and .env
npm run check # verify config and the Enable Banking application
npm run hash-password # produce ADMIN_PASSWORD_HASH
npm run watch -- --force # run all watches once, print what fired
npm test # unit tests (node:test)
npm run typecheck
sh scripts/build-mcpb.sh # Claude Desktop bundle → dist/bankmcp.mcpb
npm run banks # refresh docs/banks/banks.json from Enable Banking's bank list
npm run site # build the subpages of the landing page into docs/
Node 24 以降が必要です(TypeScript を直接実行するため、ビルド手順はありません)。
ディレクトリ構成
src/stdio.ts entry point for npx bankmcp: stdio server plus the localhost https side
src/server.ts entry point for a hosted deployment: OAuth, /mcp, callback, status page
src/app.ts the Express app shared by both entry points
src/local.ts localhost https server and self-signed certificate for local mode
src/mcp.ts McpServer factory (tools, prompts, instructions)
src/tools.ts the MCP tools
src/prompts.ts the MCP prompts
src/watcher.ts background rule checks and notifications
src/auth.ts single-user OAuth provider
src/setup.ts first-run setup: validates and stores id, key and password
src/pages.ts the HTML pages: setup, sign-in, connected, status, privacy, terms
src/config.ts environment and data-directory configuration
src/enablebanking.ts JWT signing and a thin typed API client
src/store.ts the JSON state file
src/data.ts shaping balances and transactions for an assistant
src/cli.ts check, hash-password, watch
bin/bankmcp.js the npx entry; dispatches to stdio or cli
scripts/ build-mcpb.sh (Claude Desktop bundle), banks.ts and site.ts (landing subpages), local-chat.ts (Ollama bridge)
plugin/ Claude Code plugin: setup and deploy skills, bank skill
docs/ landing page (GitHub Pages, bankmcp.dk); docs/banks holds the bank list and its pages
これは何であり、何ではないか
BankMCP™ はサービスではなくソフトウェアです。ホスト型の BankMCP™ はなく、登録するアカウントもありません。また、サーバー、キー、銀行への同意を管理するのは、あなた以外の誰でもありません。利用する人はそれぞれ自分用のコピーをデプロイし、そのコピーの唯一の運用者となります。各自で Enable Banking のアプリケーションを登録し、Enable Banking の利用規約に同意し、自身のホスティング、パスワード、セキュリティに責任を負います。
作者が公開するのはコードだけです。他者のためにインスタンスを運用することはなく、データを受け取ることもありません。また、Enable Banking、Anthropic、いずれの銀行とも提携していません。BankMCP™ は銀行ではなく、資金を保管せず、金融に関する助言も行いません。
アテステーション(ATTESTATION_ENABLED、デフォルトでは無効)を有効にしても、これらの点は変わりません。支払い開始機能が追加されることも、同意の範囲が広がることもありません。内部で銀行に対して行われる呼び出しは、get_balances がすでに行っている残高の読み取りと同じです。また、問い合わせた第三者が知るのは、すでに把握している 1 つの IBAN についての「はい」か「いいえ」だけです。その情報を特定のサービスと共有することが Enable Banking の規約に適合するかどうかは、ここに記載された他のすべての事項と同様に、運用者であるあなた自身が判断してください。
自己責任でご利用ください。 デプロイした場合、そのデプロイとセキュリティの責任はあなたにあります。本ソフトウェアは現状有姿で提供され、いかなる種類の保証もありません。また、作者は本ソフトウェアの使用方法や、それに起因するいかなる損失についても責任を負いません。下記の MIT ライセンスが適用されます。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。