Enable Banking について
Enable Banking は、Enable Banking を通じて欧州の銀行口座に接続する MCP サーバーです。資金移動は行わず、取引明細と残高の読み取り、同意の管理、取引の絞り込み、CSV 出力に対応し、口座名義人の承認を必要とします。
主な機能
- 01対応銀行の検索と同意の管理
- 02口座と残高の一覧表示
- 03取引明細の取得と絞り込み
- 04取引明細の CSV 出力
- 05同意の有効期限確認
活用シーン
- 01複数口座の入出金の集計
- 02EUR 口座の利用可能残高の確認
- 03取引先・方向・金額による明細の絞り込み
- 04会計担当者向けの四半期取引データの出力
MCP 対応
MCP サーバーとして、銀行検索、口座への同意、口座、残高、取引のツールをクライアントに提供します。銀行へのアクセスは読み取り専用で、同意の開始には口座名義人の承認が必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @foreverworks/mcp-enable-bankingENABLE_BANKING_CONFIGPath of app.json: your Enable Banking application's id, its redirect URL and the name of its private key file, as the README describes it.ENABLE_BANKING_KEYシークレットPath of the application's private key (PEM), when app.json does not name it.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
10掲載時のツール一覧 · 3 日前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| label | string | いいえ | 保存先の名前:a-z、0-9、_、-。デフォルト:同じ銀行、国、psu_type の保存済み同意のラベル(更新時に置き換えます)。該当するものがなければ、銀行名と国名を使用します(例:example_bank_de)。 |
| code_or_url | string | はい | リダイレクト URL 全体(...?code=...&state=...)、またはコード値のみ。 |
詳細
Enable Banking MCP サーバー
AI アシスタントから、Enable Banking を通じて銀行取引明細と残高を読み取り、検索、エクスポートできます。Enable Banking は、ヨーロッパ各地の銀行向けに認可された PSD2 プロバイダーです。資金を移動することはありません。読み取りのほかに行うのは、同意の開始、保存、終了だけです。start_auth は、このサーバーで唯一の money ツールです。銀行に180日間の読み取りアクセスを求めるため、クライアントは呼び出しのたびに確認を求めます。
必要なものは、Enable Banking アプリケーション(ID、登録済みリダイレクト URL、秘密鍵)と、180日ごとに銀行のアプリで各同意を承認する口座名義人です。口座名義人がその場にいない場合、銀行は1日に約4回まで口座を読み取ることを許可します。この回数は、その同意を利用するすべてのプログラムで共有されるため、期間を一度読み取ってから、ここで対象を絞り込んでください。
質問できること
- 「どの銀行の同意がありますか?それぞれいつ期限切れになりますか?」
- 「今年、Example Supplier SRL にいくら支払いましたか?」
- 「すべての口座を対象に、9月の1,000 RONを超える入金を表示してください。」
- 「EUR口座の利用可能残高はいくらですか?」
- 「前四半期の取引をCSVでエクスポートして、会計士に渡してください。」
- 「Example Bank との同意は来週終了します。更新してください。」
インストール
Claude Code の場合:
claude mcp add enable-banking -e ENABLE_BANKING_CONFIG="<path to Enable Banking app.json>" -- npx -y @foreverworks/mcp-enable-banking
Claude Desktop(Settings、Developer、Edit Config)とその他ほとんどのクライアントでは、同じコマンドを JSON として読み込みます。
{
"mcpServers": {
"enable-banking": {
"command": "npx",
"args": ["-y", "@foreverworks/mcp-enable-banking"],
"env": {
"ENABLE_BANKING_CONFIG": "<path to Enable Banking app.json>"
}
}
}
}
いずれも、公開されているパッケージを Node 22.19 以降で実行します。VS Code と Claude Desktop のバンドルでは、サーバーの追加時に各設定の入力を求められます。任意項目は空欄のままにしてください。Cursor では、代わりに各設定を環境変数から読み込むため(${env:ENABLE_BANKING_CONFIG} など)、Cursor を起動する前に設定してください。上記のコマンドで設定するのは必須項目のみです。残りの設定については設定をご覧ください。
クローンから
git clone https://github.com/foreverworks/mcps.git && cd mcps
npm ci && npm run build
claude mcp add enable-banking -e ENABLE_BANKING_CONFIG="<path to Enable Banking app.json>" -- node "$PWD/servers/enable-banking/dist/index.js"
JSON 設定では、コマンドは node、引数は servers/enable-banking/dist/index.js のフルパスです。複数のクライアントでHTTP経由の実行中のコピーを共有する方法については、docs/deploying.mdをご覧ください。
設定
| 変数 | 必須 | 意味 |
|---|---|---|
ENABLE_BANKING_CONFIG | はい | app.json(以下を参照)のパスです。サーバーは読み取りのみ行います。 |
ENABLE_BANKING_KEY | いいえ | アプリケーションの秘密鍵(PEM)のパスです。未設定の場合は、app.json の private_key に指定されたファイルを、app.json のあるフォルダーからの相対パスとして使用します。 |
ENABLE_BANKING_STATE_DIR | いいえ | 同意情報(sessions.json)、そのバックアップ、ロックの保存先です。既定値は docs/configuration.md を参照してください。 |
ENABLE_BANKING_EXPORTS_DIR | いいえ | export_transactions が CSV ファイルを書き込む場所です。既定値は state フォルダー内の exports/ です。 |
app.json には、コントロールパネルから取得したアプリケーションの詳細を記述します。
{
"application_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"application_name": "Example Books",
"environment": "sandbox",
"redirect_url": "https://example.com/bank-callback",
"private_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee.pem"
}
application_id と redirect_url は必須です。また、ENABLE_BANKING_KEY が設定されていない場合は private_key も必須です。redirect_url は登録済みのものと完全に一致する必要があります。application_name と environment は health の応答に表示されるラベルにすぎません。サンドボックスか本番環境かは application_id によって決まります。テストまたはプロキシ用に、api_base で https://api.enablebanking.com を上書きできます。それ以外のキーは無視されます。systemd では、認証情報ディレクトリー内のファイル名が認証情報名に変更されるため、そこで ENABLE_BANKING_KEY を設定してください。すべてのサーバーで共通の変数は docs/configuration.md に記載されています。
アプリケーションと鍵の取得
- Enable Banking のコントロールパネルで、トップメニューから API applications を開きます。「Add a new application」では、Sandbox 環境のままにしてください。テスト用銀行を使えば、実際の口座を使わずにすべてのツールを試せます。
- アプリケーション名を入力します(口座名義人にもこの名前が表示されます)。続けてリダイレクト URL を入力します。自分が管理するページであればどれでも使えます。
complete_authに必要なのは、ブラウザーが最後に移動するアドレスだけです。 - 既定の秘密鍵オプションをそのまま使い、Register を押します。ブラウザーが鍵を生成し、
<application id>.pemとして保存します。このサーバーだけが読み取れる場所に移動し、その隣にapp.jsonを作成してください。
本番環境では、Production 環境を選択して別のアプリケーションを登録します。登録直後は Inactive です。「Activate by linking accounts」を選ぶと、制限付きモードで有効になります。このモードでは、Enable Banking と契約を結ぶまで、自分が連携した口座のみ読み取れます。
初回実行
- アシスタントに Enable Banking の
healthチェックを実行するよう依頼します。アプリケーション名、環境、有効かどうか、リダイレクト URL、および保存済みの同意情報の件数が表示されます。application_idに対応していない鍵を指定すると、ここで失敗します。 - 対象の国で
list_aspspsを実行して銀行を探します。start_authにはその銀行のnameを指定します。psuTypesには口座の種類(business、personal)が、maxConsentDaysには同意期間の上限が表示されます。 - 銀行名、国、
psu_typeを指定してstart_authを実行し、承認します。返されたリンクは口座名義人が使います。銀行アプリが入ったスマートフォンを手元に用意し、5 分ほど確保してください。 - リンクを開き、銀行にサインインして、表示されたすべての口座にチェックを入れます。リクエストでは口座を指定しないため、すべての口座が対象になります。
- 銀行から
?code=...を付けてリダイレクト URL に戻されます。そのアドレス(またはコード)をすぐにcomplete_authに渡してください。コードは一度だけ、数分間有効です。応答には口座と同意期間の終了日が一覧表示されます。
同意を更新するには(残り日数は list_stored_sessions で確認できます)、銀行、国、口座の種類を指定して手順 3~5 を繰り返します。label を指定しない場合、新しい同意情報が古い同意情報とそのラベルに置き換わります。
シェルから node dist/index.js --health を実行すると、ENABLEBANKING: の行を 1 行出力して終了します。人の対応が必要な場合は終了コード 1、Enable Banking に障害がある場合は終了コード 2 で終了するため、毎日のタイマー実行に適しています。
ツール
read は銀行や保存済みの同意に変更を加えません(エクスポートではファイルのみを書き込みます)。write は保存済みの同意を変更します。money は銀行にアカウントへのアクセスを求めます。
| ツール | アクセス | 説明 |
|---|---|---|
health | read | Enable Banking がキーを受け付けるか、どのアプリケーションとしてどの環境で利用するか、ファイルの場所、保存済みの同意の数を確認します。 |
list_aspsps | read | Enable Banking が各国で接続できる銀行(すべての市場で空):start_auth が受け取る name、各銀行が提供するアカウントの種類、同意の最長期間を確認します。キャッシュの有効期間は1時間です。 |
list_stored_sessions | read | 保存済みの各同意について、ラベル、銀行、アカウント、有効期限を日付と残り日数で表示します。 |
start_auth | money | 銀行との同意を開始し、その銀行が提供するすべてのアカウントを180日間対象にします。アカウント名義人が開く必要があるリンクを返します。 |
complete_auth | write | 銀行からのリダイレクトを受けて同意を完了し、ラベルを付けて保存したうえで、対象アカウントと終了日を報告します。 |
revoke_session | write | 銀行で保存済みの同意を終了し、ここから削除します。以前のファイルはバックアップとして保持します。 |
list_accounts | read | 銀行に問い合わせて、同意が現在アクセスできるアカウントと、ほかのツールで使用する各アカウントの uid を取得します。 |
get_transactions | read | 1つのアカウント、同意のすべてのアカウント、または保存済みのすべてのアカウントについて、正確な符号付き金額を含む明細を取得します。銀行への追加の問い合わせなしで、テキスト、方向、金額による絞り込みもできます。 |
export_transactions | read | 長期間、多数のアカウント、または会計士向けに、同じ明細を CSV ファイルとして書き出します。ファイルのパス、サイズ、SHA-256 を返します。 |
get_balances | read | 1つのアカウントについて、銀行が報告するすべての残高(記帳済み、利用可能など)を取得します。それぞれ、PSD2 コードと意味を含む正確な金額を返します。 |
お金に関わる操作
start_auth は送金しませんが、180日間の読み取りアクセスを許可します。この判断はアカウント名義人のみが行うべきです。tools/list では money とマークされるため、クライアントは呼び出しごとに確認を求めます(Claude Code はすべての権限モードで確認を求めます)。MCP_CONFIRM=elicit を設定すると、サーバーが引数から生成した1行の確認メッセージで、直接確認を求めます。
enable-banking: Bank consent (PSD2, read-only: balances and transactions) with Example Bank (DE), personal accounts, every account the bank offers, valid 180 days: until 2030-07-01 if confirmed today
終了日は確認を求める際と、呼び出しの実行時に計算されるため、確認が遅れると終了日もその分遅くなります。アクセスは、アカウント名義人が銀行で承認すると開始します。
トラブルシューティング
config:「ENABLE_BANKING_CONFIG is not set」、または
app.json を示すメッセージが表示されます。ENABLE_BANKING_CONFIG に読み取り可能な app.json を設定し、
ENABLE_BANKING_KEY(または private_key)に鍵を設定してください。
auth:「cannot use the private key at ...」。鍵ファイルが存在しない、読み取れない、または RS256 の秘密鍵ではありません。ENABLE_BANKING_KEY または
private_key に、コントロールパネルで保存した .pem を指定してください。再起動しなくても、次の呼び出しで再度読み込まれます。
api のステータスが 401 または 403。Enable Banking が署名済みトークンを拒否しました。
鍵が application_id に対応していません(たとえば、サンドボックスの鍵と本番環境の ID を組み合わせている場合です)。
前日には成功した呼び出しで、api の reason が EXPIRED_SESSION、REVOKED_SESSION、CLOSED_SESSION
または SESSION_DOES_NOT_EXIST、あるいはステータスが 422 または 404。同意の期限が切れたか、銀行のアプリで取り消されました。再試行しても復旧しません。初回実行の手順 3〜5 に沿って更新してください。
complete_auth からの api で、reason が EXPIRED_AUTHORIZATION_CODE、
WRONG_AUTHORIZATION_CODE または outcome_unknown。コードは数分間だけ有効で、一度しか使えません。交換処理が中断された場合、再実行できません。もう一度 start_auth を実行し、承認後すぐに
complete_auth を呼び出してください。
api の reason: "ASPSP_RATE_LIMIT_EXCEEDED"。その日の口座読み取り回数を使い切っています。1 日待ってから、各期間を一度ずつ読み取り、フィルターで絞り込んでください。
input:「the bank refused the consent: ...」。口座名義人が拒否したか、銀行側でエラーが発生しました。start_auth からやり直してください。**「no code parameter
there」**は、銀行から返されたアドレスではなく、start_auth のリンクを貼り付けたことを意味します。
動作の仕組み
明細
金額は常に小数の文字列で扱い、JavaScript の数値には変換しません。JavaScript の数値では有効桁数が 15~17 桁に限られるためです(9007199254740993.01 は 9007199254740992 になります)。Enable Banking は符号なしの金額と credit_debit_indicator を送信します。get_transactions はテキストに符号を付け、支出を負数にします。金額が JSON の数値として返された行、または単純な小数表記でない行には、amountWarning が付きます。
検索は読み取り後にここで実行します。銀行は日付範囲内のすべての行を返すだけです。絞り込んだ結果にはフィルターがそのまま含まれ、読み取った行数を示す fetched と、一致した行数を示す count が並びます。
textは、相手先の名前と IBAN、支払参照、取引参照を対象に検索します。大文字と小文字、発音区別符号、IBAN 内の空白は無視されます。santierでȘANTIER EXEMPLU SRLや、一部の銀行が現在も送信するセディーユ付きのŞantierが見つかります。directionはcredit(入金)またはdebit(出金)です。amount_minとamount_maxは、符号を無視した金額の範囲を、正確な小数として両端を含めて指定します。金額を正確に読み取れなかった行は除外され、amountUnreadableに件数が記録されます。date_fromとdate_toは両端を含みます。空の場合は範囲を指定しません。transaction_statusの既定値はbookedです。名前(pending、cancelledなど)または PSD2 コードを指定します。空の場合は銀行の既定値が使われます。
複数の口座は一度に 1 つずつ読み取ります。銀行は短時間の連続リクエストを制限するためです。また、各行には口座が記載されます。拒否された口座は、他の口座の明細と並んで、エラーと対処方法とともに accounts に表示されます。最初の読み取りの前に引数を検証し、口座 uid(同意のたびに変わる UUID)の形式も確認するため、入力ミスでリクエストを消費することはありません。ページは最大 200 ページまで最後までたどります。
相手先は取引の反対側です。出金時の debtor_account は自分自身の IBAN であるため、取引の方向に基づいて相手側を選びます。銀行は参照情報を任意の位置で分割するため、送金情報の行はスペース 1 つで連結されます。
エクスポートには、account_label、account_iban、booking_date、value_date、direction、amount、currency、counterparty_name、counterparty_iban、remittance、reference、status、bank_code、merchant_category_code、amount_warning の各列があります。すべてのセルを引用符で囲みます。スプレッドシートで数式として実行される可能性のある値(=、+、@ で始まる値)には先頭にアポストロフィを付けますが、負の金額には付けません。各ファイル名には対象範囲、日付、作成時刻が含まれるため、誰かが開いているファイルを上書きすることはありません。また、ファイルはモード 0640 で書き込まれます。
同意と sessions.json
何よりも先に同意を保存します。Enable Banking がセッション ID を開示するのは一度だけで、再取得には口座名義人による新たな認証が必要になるためです。complete_auth はコードを交換して結果を保存し、その後、各口座の詳細を取得します。取得に失敗しても同意は有効なままで、該当する口座に detailsError が付きます。新しい銀行の同意には <bank>_<country>(example_bank_de など)のラベルが付きます。label を指定した場合はその値が使われます。
sessions.json は他のプログラムでも読み取れる形式で、src/domain/sessionsFile.ts で定義されています。
- ラベルをキーとするオブジェクト(
a-z 0-9 _ -。識別子は任意の位置に使用できます)。 - 各エントリーは
POST /sessionsのレスポンスをそのまま保持します。session_id、accounts(uid、account_id.iban、identification_hashなどを含む)、aspsp、psu_type、access.valid_untilが含まれます。 - JSON は 2 スペースでインデントされ、モード 0600 でロック下にアトミックに書き込まれます。他のラベルは引き継がれます。以前のファイルは、まず
sessions.json.bakに再シリアライズして保存されます。JSON オブジェクトではない場合は、sessions.json.unreadable-<ms>として別に保管されます。
identification_hash は同意をまたいで口座を識別し、更新後の同意を、置き換えられた同意の履歴に関連付けます。交換時にこのフィールドがない場合でも、complete_auth は同意を保存し、formatWarnings を報告します。
同意を終了すると、Enable Banking でセッションが閉じられ、銀行の同意が終了した後、ラベルが削除されます。銀行側ですでに終了している場合もラベルは削除されます。銀行が拒否した場合、こちらでは何も変更されません。
リクエスト
更新するための許可はありません。 各試行では、その場で秘密鍵を使って署名した JWT(RS256、有効期間は5分、application_id を kid として指定)を送信するため、health が失敗する場合は鍵または ID が原因であり、有効期限切れではありません。src/infra/http.ts は、5xx または接続切断時に読み取りを最大4回試み、401 または422は最終的な応答として扱い、Enable Banking が処理した可能性のある POST を再送信することはありません。
ワイヤー型は、Enable Banking の OpenAPI 定義から openapi-typescript で生成されます(npm run gen:types -w @foreverworks/mcp-enable-banking。差分を確認してください)。
src/domain/schema.ts では、実測に基づいて2つの調整を加えています。オプションのフィールドは null になる場合があり(明細書の最終ページでは continuation_key: null)、金額は string | number です。
キャッシュされるのは銀行カタログのみ(国ごとに1時間、メモリ内)です。これはすべての利用者に共通です。npx tsx scripts/smoke.ts は、実際の同意から過去3日間の明細書を1つ読み取ります。--consent を指定すると同意も更新しますが、その操作には口座名義人が必要です。
制限事項
- 口座情報のみ(AIS)です。決済開始には対応しておらず、今後対応する予定もありません。
- 同意の作成と更新には口座名義人が必要です。 銀行による認証は PSD2 の要件です。
- すべての同意で180日間、すべての口座を対象にします。
maxConsentDaysがこれより短い銀行では、期間が短縮されるのではなく、同意が拒否されます。 - 独自の履歴はありません(キャッシュ、アラート、カテゴリーなし)。そのため、明細の取得は毎回銀行に対して行われます。読み取り回数を減らす必要があるプログラムでは、独自の台帳を保持してください。
sessions.jsonはそのために利用できます。 - サーバーごとにアプリケーションは1つです。 サンドボックス用と本番環境用に、それぞれ設定が必要です。
Enable Banking 向けのその他のサーバー
2026-10-21に調査。Enable Banking は公式サーバーを公開していません。同社の GitHub 組織には API サンプル、コマンドラインツール、eIDAS ブローカーがありますが、公式サイトには MCP の記載がありません。コミュニティ製のサーバーが4つあり、Enable Banking 経由で口座情報を読み取ります。
- npm の
enable-banking-mcp:最もダウンロード数が多いサーバー(2026-10-18までの1か月で752件)。macOS上で stdio を使用し、秘密情報を Keychain に保存します。個人利用のみで、商用利用はできません。 - npm の
bankmcp(同月555件):ローカルで使うか、独自のサインイン機能を備えた環境にホストして使用でき、Webhook を呼び出す監視機能があります。金額は浮動小数点数に変換されます。 - GitHub の
banking-mcp:独自のデータベースに残高と取引を保存する、OAuth 対応の Cloudflare Worker です。カテゴリーとエクスポート機能を備えています。銀行の連携はツールではなく、コマンドラインから行います。 - GitHub の elcukro による
bank-mcp:Enable Banking に加え、Plaid、Tink、Teller に対応しています。金額は浮動小数点数に変換されます。
このサーバーは、他のどのサーバーにもない機能を提供します。金額は銀行から回答まで正確な10進数文字列のまま保持されます。同意の開始には money ツールを使い、確認時に銀行名、口座、終了日が表示されます。また、同意は他のプログラムからも読み取れるファイルにラベルごとに保存され、直前のファイルのバックアップに加え、各口座について更新と履歴を結び付けるハッシュも保持されます。一方、他のサーバーが提供する機能のうち、このサーバーにないものもあります。アラート(bankmcp)、ローカルキャッシュとカテゴリー(banking-mcp)、Enable Banking 以外の銀行への対応(bank-mcp)です。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。