AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

オープンバンキング:MongoDB を使用した安全なデータ共有

MongoDB Atlas とエージェント型 AI を使用して将来を見据えたオープンバンキングエコシステムを構築し、同意取得ジャーニーとデータ共有を強化します。

ユースケース: 人工知能シングルビューパーソナライズ

業種: 金融サービス

製品およびツール: MongoDB Vector Search, MongoDB MCP Server, MongoDB Queryable Encryption

パートナー: LgChuin

このソリューションはオープンバンキングのエコシステムを提示し、MongoDB Atlas とエージェント型 AI を使用して機関間で金融データを安全に共有する方法を実証します。

LangGraph でエージェント型 AI フレームワークを実装し、同意承認を合理化してカスタマーに統合されたマルチバンクの財務ビューを提供する方法をご覧ください。MongoDB Atlas は、これらのオープンバンキングアーキテクチャを支える BIAN 標準のデータレイヤーとして機能します。

図 1:オープンバンキングの参照アーキテクチャ

図 1. オープンバンキングの参照アーキテクチャ

クリックして拡大します

図が示すように、プロセスは、カスタマーがLeafy MongoDB (架空の金融機関)にログインすると開始されます。カスタマーは、外部データ(Third-Party Provider(TPP)データやその他の金融機関データ(このデモではMongoDB Advisor、MongoDB Advisor、neoFinance、Green MongoDB )の外部データにアクセスするための同意を付与または拒否します。

マルチエージェント ワークフローはカスタマーリクエストを受け取り、次のタスクを実行します。

  • スーパーバイザーエージェント: やり取りを読み取り、各リクエストを適切なスペシャリストにルーティングします。

  • 同意エージェント: 外部行との安全なデータ共有同意を通じてカスタマーをガイドします。組織の選択、同意書の作成、金融機関のログイン、明示的なカスタマーの承認、取り消しを処理します。

  • 金融アドバイスエージェント:MCP サーバーを通じて直接 MongoDB にクエリを実行し、カスタマーの口座、取引、製品に関する単発の質問に答え、内外の銀行全体の支出を分析します。

このデモでは、 MongoDB Atlasとエージェント型 AI が、安全でインテリジェントなオープンバンキングのワークフローを強化する次の機能を示します。

同意レコードをプレーンテキストで保存すると、機密フィールドがデータベース管理者、バックアッププロセス、潜在的な侵害にさらされます。これらのリスクを防ぐために、オープンバンキング規制では、機関はすべての同意ライフサイクルイベント(作成、承認、データ取得、取り消し)で消費者の ID を保護することが義務付けられています。保管時の暗号化は、システムプロンプトやツール定義などの AI エージェントの構成も保護し、専有ロジックの露出を制限します。

MongoDB Queryable Encryption は、機密フィールドをドライバー レベルで暗号化することでこの問題を解決し、サーバーがプレーンテキストを認識しないようにします。フィルターが必要なフィールドは、等価クエリに設定できます。ドライバーはクエリ値を送信する前に暗号化するため、サーバーはプレーンテキストを表示することなく暗号化を照合します。復号化後の読み取りのみを必要とするフィールドは、クエリ サポートなしで暗号化されたままになります。

このデモでは、次の 2 つの場所でQueryable Encryptionを適用します。

  1. 同意コレクションleafy_bank_bian データベースの openbankingConsents、オープンバンキングバックエンドが管理)には、暗号化されたフィールドが4つあります。

    • Consumer.UserName

    • Consumer.UserId

    • Permissions

    • SourceInstitution.InstitutionName

    Consumer.UserNameフィールドは等価クエリをサポートしているため、データベースがプレーンテキストでユーザー名を参照することなく、サービスはカスタマーの同意書を一覧表示できます。

  2. エージェントプロファイルコレクション(チャットボットバックエンドの openbankingAgentProfiles)には、暗号化されたフィールドが3つあります。

    • agent_name (等価クエリ可能)

    • system_prompt

    • tool_config

エージェントのプロンプトは、実行時に暗号化された MongoDB から読み込まれます。Queryable Encryption は、各フィールドに対して個別のデータ暗号化キーを生成します。キーマネジメントプロバイダーとして、AWS Key Management Service(KMS)、Azure Key Vault、 Google Cloud KMS をサポートしています。

次の例では、オープンバンキングバックエンドの暗号化された接続設定を示しています。

from pymongo import MongoClient
from pymongo.encryption_options import AutoEncryptionOpts
class EncryptedMongoDBConnection(MongoDBConnection):
"""Subclasses the standard connection — services that type-hint
MongoDBConnection accept it without modification."""
def __init__(self, uri: str, auto_encryption_opts: AutoEncryptionOpts):
self.uri = uri
self.client = MongoClient(self.uri, auto_encryption_opts=auto_encryption_opts)

同意クエリはプレーンテキストと同じように機能します。ドライバーは暗号化と復号化を透過的に取り扱います。

# Standard query on a plaintext field — works as usual
consent = consents_collection.find_one({"ConsentId": consent_id})
# Equality query on an encrypted field — same syntax, driver encrypts the filter value
consents = list(consents_collection.find({"Consumer.UserName": user_name}))

暗号化された接続は標準の MongoDBConnection を拡張するため、基本クラスを型指定するすべてのサービスは変更せずにそれを受け入れます。

金融アドバイザーと利用者は、多くの場合、アカウントデータについてアドホックな応答を必要とします。「合計残高は?」、「最近の 10 トランザクションを表示」または「どの製品が対象となりますか?可能なクエリごとにカスタムAPIエンドポイントを構築するのは非効率的です。

MongoDB MCP サーバーは、 MongoDBコレクションを LLM エージェントが直接呼び出せるツールとして公開します。このデモでは、アプリケーションのスタートアップ時に MCPサーバーをサブプロセスとして起動し、 読み取り専用モードで leafy_bank_bianデータベースに接続し、結果として得られるツールを永続的なセッションを通じて LgGraphエージェントに渡します。

次の例は、MCPサーバーの統合を示しています。

from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain_mcp_adapters.tools import load_mcp_tools
mcp_client = MultiServerMCPClient({
"mongodb": {
"command": "npx",
"args": ["-y", "mongodb-mcp-server@latest"],
"transport": "stdio",
"env": {
**os.environ,
"MDB_MCP_CONNECTION_STRING": LEAFY_BANK_MONGODB_URI,
"MDB_MCP_READ_ONLY": "true",
"MDB_MCP_DISABLED_TOOLS": disabled_tools,
},
}
})
# Persistent session keeps MongoDB connection state across tool calls
async with mcp_client.session("mongodb") as session:
all_mcp_tools = await load_mcp_tools(session)
# Pre-connect so the agent never handles connection strings
connect_tool = next((t for t in all_mcp_tools if t.name == "connect"), None)
if connect_tool:
await connect_tool.ainvoke({"connectionString": LEAFY_BANK_MONGODB_URI})
# Only expose read/query tools to the agent
allowed_tools = {"find", "aggregate", "count", "list-collections", "collection-schema"}
mcp_tools = [t for t in all_mcp_tools if t.name in allowed_tools]

Leafy 金融エージェントは、これらのフィルタリングされたツールと、LungGraph 構成から認証されたカスタマーの識別子を読み取る get_current_user_id ツールを受け取ります。MongoDBクエリを自律的に生成することで、自然言語の質問に答えます。エージェントは次のアクションを実行できます。

  • find:検索に使用します。

  • aggregate:計算に使用します。

  • Collection-schema: 検出に使用します。

コレクションごとにカスタム ツール コードは必要ありません。

オープンバンキングのワークフローは、同意管理、財務分析、内部銀行データクエリという個別のドメインにまたがります。これら3つすべてを処理する単一のモノリシックエージェントには、大規模なツールセットと、相反する懸念を網羅するシステムプロンプトが必要になります。専門のエージェントに分割することで、各ツールセットを小さく保ち、各プロンプトを集中させることができます。

スーパーバイザーエージェントは、以下の専門家を調整します。

  • 同意エージェント:データ共有フローを管理します。

  • 金融アドバイスエージェント:支出を分析し、MCP サーバーを介して Leafy Bank データをクエリします。

LongGraph は意向に基づいて各カスタマーメッセージを適切なスペシャリストにルーティングし、 MongoDB Atlas はチェックポイントコレクションを通じて対話状態を永続化します。

次の例は、構造化出力を持つ監視ルーティングの例です。

from langgraph.graph import StateGraph, START, END
from langgraph.checkpoint.mongodb import MongoDBSaver
# Each specialist is built from a factory that loads its system prompt
# from a Queryable-Encryption-backed MongoDB collection at startup.
consent_agent = create_consent_agent(prompts["consent_agent"])
financial_advice_agent = create_financial_advice_agent(
prompts["financial_advice_agent"], mcp_tools
)
supervisor = create_supervisor_node(prompts["supervisor"])
def route_from_supervisor(state: AgentState) -> str:
# The supervisor writes its routing decision to state["next"]
return state.get("next", "FINISH")
workflow = StateGraph(AgentState)
workflow.add_node("supervisor", supervisor)
workflow.add_node("consent_agent", consent_agent)
workflow.add_node("financial_advice_agent", financial_advice_agent)
workflow.add_edge(START, "supervisor")
workflow.add_conditional_edges("supervisor", route_from_supervisor, {
"consent_agent": "consent_agent",
"financial_advice_agent": "financial_advice_agent",
"FINISH": END,
})
workflow.add_edge("consent_agent", "supervisor")
workflow.add_edge("financial_advice_agent", "supervisor")
checkpointer = MongoDBSaver(
client=db.client,
db_name=DATABASE_NAME,
checkpoint_collection_name=CHECKPOINTS_AIO_COLLECTION,
writes_collection_name=CHECKPOINTS_WRITES_AIO_COLLECTION,
)
graph = workflow.compile(checkpointer=checkpointer)

規制されたワークフロー(同意の承認、KYCの検討、支払いの承認)では、エージェントが続行する前に一時停止して決定を待つ必要があるヒューマンチェックポイントが必要です。LgGraph の interrupt() メカニズムは、完全なグラフ状態をMongoDBに直列化し、ペイロードを呼び出し元に返すことで、この要件を取り扱います。外部プロセスが完了すると、ワークフローは再開されます。

from langgraph.types import interrupt, Command
# Agent pauses, returns review payload to the calling application
review = interrupt({
"type": "APPROVAL_REQUIRED",
"details": approval_details,
})
# Application resumes the workflow after the human decision
await agent.ainvoke(Command(resume=decision), config)

MongoDB Atlasチェックポイントコレクションは、完全な交信状態を保持します。

  • メッセージ履歴

  • 有効な同意書

  • ルーティングの決定

ワークフローは、過去 秒(ボタンをクリック)または 時間(オーバーナイトのコンプライアンス検討)の中断に耐えられます。各サブエージェントは、最終応答を生成するまで ReAct ループ(理由 → 実行 → 監視)を実行し、その後、次のルーティング決定のためにスーパー秒エージェントに制御を返します。

このデモでは、2 つのMongoDB Atlasデータベースを使用します。

  • leafy_bank_bian:このデータベースには、デモの実行基盤となる、カスタマー(PartyReferenceDataDirectory)、アカウント(CurrentAccount)、トランザクション、製品などの共有された BIAN 標準の運用モデルが含まれています。このデータベースは、Queryable-Encrypted のopenbankingConsentsコレクションの同意レコードと、承認された同意に基づいて取得された外部データを保存するcachedExternalDataコレクションも保持します。

  • open_finance:このデータベースには、外部機関のソースデータ—external_accountsと提携機関のexternal_productsに加えて機関登録簿が含まれています。

Leafy Bank は leafy_bank_bian データを所有し、書き込み (write) を行います。外部データは同意を得て借用され、所有されません。データは承認された同意に基づいて open_finance から読み取られ、付与された ConsentId でタグを付けた状態で cachedExternalData にキャッシュされ、同意が取り消されるか期限切れになると消去されます。これが機関自身の口座やトランザクションのレコードに統合されることはありません。

以下は、 コレクション内のドキュメントの例です。

  • accounts (leafy_bank_bianから):

    {
    "accountId": "ACC-e0583b3b",
    "accountBank": "Leafy Bank",
    "accountNumber": "212100310",
    "currency": "USD",
    "balance": { "current": 315, "available": 315, "ledger": 315, "hold": 0, "overdraftLimit": 0 },
    "customerSnapshot": { "customerId": "CUST-00528224" },
    "gl": { "accountCode": "2121", "costCenter": "CC-RETAIL-DEFAULT" },
    "productId": "PROD-STD-SA-USD",
    "openedAt": "2024-12-07"
    }
  • openbankingConsents (leafy_bank_bian から)、機密フィールドに Queryable Encryption を適用した同意レコード:

    {
    "ConsentId": "urn:greenbank:Cf5b9ff59e06f77",
    "Status": "AUTHORISED",
    "Consumer": { "UserName": "< encrypted >", "UserId": "< encrypted >" },
    "Permissions": "< encrypted >",
    "Purpose": "FINANCIAL_ADVICE",
    "SourceInstitution": { "InstitutionName": "< encrypted >", "InstitutionId": "679a1001a9711d00a3bb01a1" },
    "CreationDateTime": "2026-02-05T10:55:30Z",
    "ExpirationDateTime": "2026-08-04T10:55:30Z",
    "StatusHistory": [
    { "Status": "AWAITING_AUTHORISATION", "DateTime": "2026-02-05T10:55:30Z" },
    { "Status": "AUTHORISED", "DateTime": "2026-02-05T10:56:06Z" }
    ]
    }

外部トランザクションは Leafy Bank 自体のトランザクションと同じ BIAN 標準スキーマを使用します。口座名義人は送信トランザクションでは支払人、受信トランザクションでは受取人として表示されるため、さまざまな機関からのデータがコンシステントな形式になります。

次のセクションでは GitHub リポジトリにアクセスして、ソリューション内のすべてのコレクションからサンプルデータを調べます。

このソリューションをビルドするには、オープンバンキングバックエンド、エージェント型チャットボット バックエンド、統合 UI という、連携するサービスを実装します。

完全な実装については、対応する GitHub リポジトリの手順に従ってください。

パート 1:オープンバンキングのバックエンドGitHub リポジトリ)

1
  • MongoDB Atlasプロジェクトとクラスターを作成します。

  • このデモで使用する2つのデータベースを作成します。内部データ用の leafy_bank_bian と、外部データと同意情報用の open_finance を作成します。

2
  • プラン作成ドキュメントと README に記載されているコレクションに入力します。

  • サンプルデータをロードして、参照フローをエンドツーエンドで実行します。

3
  • ローカルマスターキーを生成するか、本番環境用にクラウド KMS(例: AWS KMS)を構成します。

  • 設定スクリプトを実行して、Queryable-Encrypted encrypted_consents コレクションとそのキー ボールトを作成します。

4
  • open-finance-next-gen FastAPIアプリ(ローカルまたは希望ランタイム)を配置します。

  • リポジトリに記載されている MongoDB 接続、KMS プロバイダー、API 設定の環境変数を構成します。

5

次のタスク用にセキュア エンドポイントを実装および検証します。

  • 同意を管理:カスタマーの同意を作成、承認、取り消し、一覧表示します。

  • 外部カスタマーデータを取得:同意範囲で絞り込まれたアカウント、ローン、返済履歴、識別情報、トランザクションを検索します。

  • 外部データをキャッシュ:アドバイスエージェントがライブで再取得しないように、承認された同意の下で取得されたデータを保存します。

  • データを計算:集計パイプラインを使用して、残高、負債合計、ローン移行オファーを決定します。

README の記述どおりにインデックスと同意期限の処理(バックグラウンド スイーパー)を設定します。

一部の 2: エージェント チャットボットバックエンド (GitHubリポジトリ)

1
  • チャットボットリポジトリから LingGraph ベースのマルチエージェントバックエンドを配置します。

  • LLMプロバイダー(例: Amazon Bedrock経由のClaude)、Open BankingバックエンドへのHTTPクライアント、および会話状態をチェックポイントするためのMongoDB接続を設定します。

2
  • 設定スクリプトを実行して、Queryable-Encrypted encrypted_agent_profiles コレクションを作成します。

  • エージェントのシステムプロンプトとツール構成をシードします。グラフはスタートアップ時にこれらを読み込みます。

3

カスタマーからのメッセージが適切なエージェントにルーティングされるように、スーパーバイザーのパターンを実装します。以下のタスクを実行する2つのエージェントを構成します。

  • 同意エージェント:機関を一覧表示し、同意を作成し、外部銀行ログインをトリガーし、データ共有を承認または取り消します。LangGraph interrupt() を使用して、銀行ログインおよび明示的な同意承認のために一時停止します。

  • 金融アドバイスエージェント:カスタマーの口座、トランザクション、製品に関する単発の質問に答え、内部銀行と外部銀行全体の支出を分析します。読み取り専用の MCP サーバーを介して MongoDB を直接クエリします。

4
  • スタートアップ時に MongoDB MCP サーバーをサブプロセスとして起動し、読み取り専用モードで leafy_bank_bian データベースに接続します。

  • 金融アドバイスエージェントには、読み取りおよびクエリツール(findaggregatecountlist-collectionscollection-schema)のみを公開します。

5
  • ウェブまたはモバイルのフロントエンドが呼び出せるチャットエンドポイントとなる接続されたデバイス(サーバー送信イベント付きの FastAPI例)を提供します。

  • エンドポイントが中間メッセージをストリームし、金融ログインと同意承認の LingGraph の割り込みを処理するようにします。

パート 3:統合 UIGitHubリポジトリ)

1
  • open-finance-next-gen-ui Next.js アプリを配置し、チャットボットとオープンバンキングバックエンド URL を指すように設定します。
2

README ファイルの参照シナリオを実行します。

  • 外部銀行を接続し、AI アシスタントを通じて同意を付与します。

  • 内部アカウントと外部アカウント全体の統合されたマルチバンクポジションを表示します。

  • 金融アドバイスエージェントに、銀行間の支出インサイトを問い合わせます。

3
  • 運用データと同意データを永続化します。

  • 集計ワークロードと会話チェックポイントを強化します。

  • 完全なエージェント型の同意とアドバイスのジャーニーをサポートします。

段階的な設定コマンド、環境変数、APIの詳細については、前述の各リポジトリの README ファイルの指示に従います。

  • MongoDB Atlas のオープンバンキングデータを統合:MongoDB Atlas の内部データセットと外部データセットを運用データ層として統合し、統合の複雑さと重複を削減します。

  • 集計パイプラインで分析を簡素化:MongoDB の集計パイプラインを使用して、単一のクエリパスで内部アカウントと外部アカウント全体の残高、負債合計、支出スコアを計算します。

  • MongoDB Queryable Encryption で機密の同意データを保護:Queryable Encryption を同意属性に適用して、機密フィールドのクエリを実行するとともに、規制されたオープンバンキングのワークロードに対して強力なプライバシー制御を維持します。

  • エージェント的なAIによる同意プロセスの効率化 : LingGraph ベースのマルチエージェント チャットボットを統合して、同意の範囲、期間、目的を 自然言語で説明することで、マルチバック フロー全体での放棄を減らし、カスタマーエクスペリエンスを向上させます。

  • BIAN 標準モデルでデータを標準化:すべての機関からのデータがコンシステントな形式になるように、内部アカウントと外部のアカウント、トランザクション、同意を BIAN サービスドメイン標準でモデル化します。

  • Saul Calderon

  • Kiran Tulsulkar

  • Ainhoa Múgica

  • Andrea Alaman Calderon