Tanzu Platform Chat: AI Chat Client for Cloud Foundry
Tanzu Platform Chat: AI Chat Client for Cloud Foundry について
Tanzu Platform Chat(cf-mcp-client)は、Spring AI で構築されたチャットボットアプリケーションで、Cloud Foundry にデプロイしてプラットフォームの AI サービスを利用します。Cloud Foundry 上で LLM、ベクターデータベース、MCP サーバーを使用するチーム向けです。
主な機能
- 01Cloud Foundry にデプロイする Spring アプリケーション
- 02GenAI サービスを用いた LLM チャット
- 03Postgres ベクターデータベースによる文書問答
- 04アクセスコードと SSO の認証方式
- 05SSE と Streamable HTTP に対応した MCP サーバー連携
活用シーン
- 01Cloud Foundry 上での社内向けチャットアシスタントの展開
- 02アップロードした PDF 文書に基づく質問応答
- 03LLM からサービスマーケットプレイスに公開された MCP サーバーを呼び出す構成
MCP 対応
MCP クライアントとして動作し、cf cups で作成したユーザー提供サービスや Service Publisher のサービスを通じて MCP サーバーをバインドします。LLM は応答時にそれらの機能を呼び出せます。
詳細
Tanzu Platform Chat:Cloud Foundry 向け AI チャットクライアント
概要
Tanzu Platform Chat(cf-mcp-client)は、Cloud Foundry にデプロイしてプラットフォームの AI サービスを利用できる Spring チャットボットアプリケーションです。Spring AI で構築されており、LLM、ベクトルデータベース、Model Context Protocol エージェントに対応しています。
前提条件
- Java 21 以降
- 例:sdkman を使用する場合は
sdk install java 21.0.7-oracle
- 例:sdkman を使用する場合は
- Maven 3.8 以降
- 例:sdkman を使用する場合は
sdk install maven
- 例:sdkman を使用する場合は
- GenAI タイルまたはその他の LLM サービスがある Cloud Foundry Foundation へのアクセス
- Cloud Foundry 環境への開発者アクセス
Cloud Foundry へのデプロイ
アプリケーションの準備
- アプリケーション用のディレクトリを作成し、そのディレクトリに移動します。
mkdir tanzu-platform-chat
cd tanzu-platform-chat
-
リリースページから最新の JAR ファイルと manifest.yml をダウンロードし、このディレクトリに保存します。
-
ダウンロードしたファイルがあるディレクトリから、アプリケーションを Cloud Foundry にプッシュします。
cf push
認証
アプリケーションにアクセスするには認証が必要です。アクセスコードと SSO の 2 つの認証方法を利用できます。両方を同時に使用できます。
アクセスコード認証
デフォルトでは、アプリケーションはアクセスコードで保護されています。ユーザーはログインページでコードを入力してアクセスします。
APP_AUTH_SECRET が設定されていない場合、アクセスコードのデフォルト値は changeme です。
デフォルトのアクセスコードを変更するには、次の 2 つの方法があります。
方法 1:環境変数として設定する
cf set-env ai-tool-chat APP_AUTH_SECRET my-secret-code
cf restart ai-tool-chat
方法 2:manifest.yml に追加する
環境変数を manifest.yml に追加します。
env:
JBP_CONFIG_OPEN_JDK_JRE: '{ jre: { version: 21.+ } }'
APP_AUTH_SECRET: ((APP_AUTH_SECRET))
次に、プッシュ時に変数を指定します。
cf push --var APP_AUTH_SECRET=my-secret-code
SSO 認証(任意)
アプリケーションに p-identity サービスがバインドされると、シングルサインオンが自動的に有効になります。ログインページには、アクセスコードの入力フォームと並んで「Sign in with SSO」ボタンが表示されます。
- SSO サービスインスタンスを作成します。
cf create-service p-identity uaa my-sso
- サービスをアプリケーションにバインドします。
cf bind-service ai-tool-chat my-sso
cf restart ai-tool-chat
SSO プロバイダーは Cloud Foundry サービスバインディングから自動検出されるため、追加の設定は不要です。
大規模言語モデル(LLM)へのバインド
- チャット LLM 機能を提供するサービスインスタンスを作成します。
cf create-service genai [plan-name] chat-llm
- サービスをアプリケーションにバインドします。
cf bind-service ai-tool-chat chat-llm
- バインディングを適用するため、アプリケーションを再起動します。
cf restart ai-tool-chat
これで、チャットボットは LLM を使用してチャットリクエストに応答します。

ベクトルデータベースへのバインド
- 埋め込み LLM 機能を提供するサービスインスタンスを作成します。
cf create-service genai [plan-name] embeddings-llm
- ベクトルデータベースとして使用する Postgres サービスインスタンスを作成します。
cf create-service postgres on-demand-postgres-db vector-db
- サービスをアプリケーションにバインドします。
cf bind-service ai-tool-chat embeddings-llm
cf bind-service ai-tool-chat vector-db
- バインディングを適用するため、アプリケーションを再起動します。
cf restart ai-tool-chat
- 画面右側にあるドキュメントツールをクリックし、.PDF ファイルをアップロードします。
これで、チャットボットはアップロードしたドキュメントに関する質問に応答します。

MCP エージェントへのバインド
Model Context Protocol(MCP)サーバーは、標準化されたインターフェースを通じて AI モデルに特定の機能を提供する軽量なプログラムです。これらのサーバーは、LLM と外部ツール、データソース、サービスをつなぐ橋渡しとして機能します。これにより、複雑な独自の連携を実装することなく、データベースの検索、ファイルへのアクセス、外部 API の呼び出しなどの操作を AI アプリケーションで実行できます。
方法 1:ユーザー提供サービスを使用する
SSE プロトコル(サーバー送信イベント)
mcpSseURLタグを使用して、SSE ベースの MCP サーバー向けのユーザー提供サービスを作成します。
cf cups mcp-server-sse -p '{"uri":"https://your-sse-mcp-server.example.com"}' -t "mcpSseURL"
- MCP サービスをアプリケーションにバインドします。
cf bind-service ai-tool-chat mcp-server-sse
ストリーミング可能な HTTP プロトコル
mcpStreamableURLタグを使用して、ストリーミング可能な HTTP ベースの MCP サーバー向けのユーザー提供サービスを作成します。
cf cups mcp-server-streamable -p '{"uri":"https://your-streamable-mcp-server.example.com"}' -t "mcpStreamableURL"
- MCP サービスをアプリケーションにバインドします。
cf bind-service ai-tool-chat mcp-server-streamable
方法 2:Service Publisher が提供するサービスを使用する
Service Publisher タイルの一般的なユースケースは、MCP サーバーを公開し、Tanzu Platform のサービスマーケットプレイスで利用できるようにすることです。サービスバインディングには API キーと URI が含まれ、MCP サーバーへのアクセスをより安全にプロビジョニングできます。アプリケーションはリクエストに API キーを追加します。
公開されたサービスは、それぞれ独自のサービスブローカーとプランの選択肢を伴ってマーケットプレイスに表示されます。
SSE プロトコル(Server-Sent Events)
mcpSseURLタグを使用して、SSE ベースの MCP サーバー向けに、公開済みサービスブローカーからサービスを作成します。
cf create-service your-published-service service-plan mcp-server-sse -t "mcpSseURL"
- MCP サービスをアプリケーションにバインドします。
cf bind-service ai-tool-chat mcp-server-sse
Streamable HTTP プロトコル
mcpStreamableURLタグを使用して、Streamable HTTP ベースの MCP サーバー向けに、公開済みサービスブローカーからサービスを作成します。
cf create-service your-published-service service-plan mcp-server-streamable -t "mcpStreamableURL"
- MCP サービスをアプリケーションにバインドします。
cf bind-service ai-tool-chat mcp-server-streamable
セットアップを完了する
- バインディングを適用するため、アプリケーションを再起動します。
cf restart ai-tool-chat
これでチャットボットが MCP エージェントに登録され、LLM はチャットリクエストへの応答時にエージェントの機能を呼び出せるようになります。アプリケーションは SSE プロトコルと Streamable HTTP プロトコルを同時にサポートします。

A2A エージェントへのバインド
Agent2Agent(A2A)は、独立した AI エージェントシステム間の通信を可能にするプロトコルです。LLM が呼び出せるツールを提供する MCP サーバーとは異なり、A2A エージェントは、メッセージを処理して独自のインテリジェントな応答を返す独立した AI システムです。MCP はチャットボットに使用可能なツールを与えるものであり、A2A はチャットボットが他の専門的な AI エージェントに相談できるようにするものだと考えてください。
主な違い:MCP と A2A
- MCP サーバー:LLM が応答を生成する過程で呼び出すツールやデータソースを提供します
- A2A エージェント:メッセージを直接送信し、完全な応答を受け取ることができる独立した AI エージェントです
A2A エージェントをバインドする
a2aタグを使用して、A2A エージェント向けのユーザー提供サービスを作成します。
cf cups a2a-agent -p '{"uri":"https://your-a2a-agent.example.com/.well-known/agent.json"}' -t "a2a"
URI はエージェントの Agent Card(/.well-known/agent.json にある JSON 記述子)を指す必要があります。
- A2A サービスをアプリケーションにバインドします。
cf bind-service ai-tool-chat a2a-agent
- バインディングを適用するため、アプリケーションを再起動します。
cf restart ai-tool-chat
A2A エージェントを使用する
A2A エージェントをバインドした後は、次の操作を行います。
- ナビゲーションレールの Agents ボタン(🤖)をクリックします
- Agents パネルに、接続されているすべての A2A エージェントと次の情報が表示されます。
- 名前、説明、バージョン
- ヘルスステータス(正常/異常)
- 機能(ストリーミング、プッシュ通知、状態履歴)
- 正常なエージェントの「Send Message」をクリックします
- ダイアログにメッセージを入力し、「Send」をクリックします
- エージェントの応答が、視覚的に区別できるスタイルでチャットに表示されます
エージェントのメッセージは次のように表示されます。
- ロボットアイコン(🤖)とエージェント名のヘッダー
- 三次色の配色(LLM の応答とは異なります)
- どのエージェントが応答したかを示す明確な表示
複数の A2A エージェントを同時にバインドでき、それぞれが専門的な機能を提供します。Agents パネルには各エージェントのヘルスステータスが表示され、ナビゲーションボタンには、エージェント全体のヘルス状態に基づいてステータスインジケーター(緑/オレンジ/赤)が表示されます。
会話メモリーにベクトルストアを使用する
ベクトルデータベースと埋め込みモデルにバインドすると、アプリケーションの再起動やスケーリング後もチャットメモリーが保持されます。
- 上記のベクトルデータベースへのバインドの手順に従います

免責事項
このリポジトリは、現状有姿で提供される非公式のプロジェクトです。いかなる組織からもサポートまたは承認されておらず、機能に関する保証は一切ありません。ご自身の判断でご使用ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。