关于 Tanzu Platform Chat: AI Chat Client for Cloud Foundry
Tanzu Platform Chat(cf-mcp-client)是基于 Spring AI 的聊天机器人应用,可部署到 Cloud Foundry 并使用平台 AI 服务。适合在 Cloud Foundry 环境中使用 LLM、向量数据库和 MCP 服务的团队。
主要功能
- 01部署到 Cloud Foundry 的 Spring 应用
- 02绑定 GenAI 服务的 LLM 聊天
- 03基于 Postgres 向量数据库的文档问答
- 04访问码与 SSO 两种认证方式
- 05支持 SSE 和 Streamable HTTP 的 MCP 服务
适用场景
- 01在 Cloud Foundry 上部署内部聊天助手
- 02基于上传的 PDF 文档进行问答
- 03让 LLM 调用已发布到服务市场的 MCP 服务
MCP 相关
作为 MCP 客户端,通过 cf cups 创建的用户提供服务或 Service Publisher 发布的服务绑定 MCP 服务器,LLM 可在回复时调用其能力。
详细介绍
Tanzu Platform Chat:面向 Cloud Foundry 的 AI 聊天客户端
概述
Tanzu Platform Chat(cf-mcp-client)是一款 Spring 聊天机器人应用,可部署到 Cloud Foundry,并使用平台 AI 服务。它基于 Spring AI 构建,可与大模型、向量数据库和 Model Context Protocol Agent 配合使用。
前提条件
- Java 21 或更高版本
- 例如,使用 sdkman 执行
sdk install java 21.0.7-oracle
- 例如,使用 sdkman 执行
- Maven 3.8+
- 例如,使用 sdkman 执行
sdk install maven
- 例如,使用 sdkman 执行
- 可访问带有 GenAI tile 或其他大模型服务的 Cloud Foundry Foundation
- 对 Cloud Foundry 环境具有开发者访问权限
部署到 Cloud Foundry
准备应用
- 为应用创建目录并进入该目录:
mkdir tanzu-platform-chat
cd tanzu-platform-chat
-
从 Releases page 下载最新的 JAR 文件和 manifest.yml 到此目录
-
在包含下载文件的目录中,将应用推送到 Cloud Foundry:
cf push
身份验证
访问此应用需要进行身份验证。提供两种身份验证方式:访问码和 SSO。两种方式可以同时使用。
访问码身份验证
默认情况下,应用受访问码保护。用户在登录页面输入访问码即可访问。
如果未设置 APP_AUTH_SECRET,访问码默认为 changeme。
要覆盖默认访问码,有两种方式:
选项 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 服务绑定到应用后,系统会自动启用单点登录。登录页面会在访问码表单旁显示“使用 SSO 登录”按钮。
- 创建 SSO 服务实例:
cf create-service p-identity uaa my-sso
- 将服务绑定到应用:
cf bind-service ai-tool-chat my-sso
cf restart ai-tool-chat
系统会自动从 Cloud Foundry 服务绑定中检测 SSO 提供程序,无需额外配置。
绑定大语言模型(LLM)
- 创建一个提供聊天大模型功能的服务实例:
cf create-service genai [plan-name] chat-llm
- 将服务绑定到应用:
cf bind-service ai-tool-chat chat-llm
- 重启应用以应用绑定:
cf restart ai-tool-chat
现在,聊天机器人将使用大模型响应聊天请求。

绑定向量数据库
- 创建一个提供嵌入大模型功能的服务实例
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 Agent
Model Context Protocol(MCP)服务是轻量级程序,可通过标准化接口向 AI 模型提供特定功能。这些服务充当大模型与外部工具、数据源或服务之间的桥梁,使 AI 应用能够执行搜索数据库、访问文件或调用外部 API 等操作,而无需复杂的自定义集成。
方法 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
Streamable HTTP 协议
- 使用
mcpStreamableURL标签,为基于 Streamable 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 Key 和 URI,以便更安全地配置对 MCP 服务的访问权限。应用程序会在向 MCP 服务发送请求时附加 API Key。
已发布的服务会在市场中显示,并拥有各自的服务代理和计划选项。
SSE 协议(服务器发送事件)
- 使用
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 Agent,大模型便可以在响应聊天请求时调用这些 Agent 的能力。应用程序同时支持 SSE 和 Streamable HTTP 协议。

绑定到 A2A Agent
Agent2Agent(A2A)是一种协议,可让独立的 AI Agent 系统彼此通信。与提供大模型可调用工具的 MCP 服务不同,A2A Agent 是能够处理消息并返回自身智能响应的独立 AI 系统。可以将 MCP 看作是为聊天机器人提供可用工具,而 A2A 则让聊天机器人能够向其他专业 AI Agent 征询意见。
主要区别:MCP 与 A2A
- MCP 服务:提供工具和数据源,供大模型在生成响应时调用
- A2A Agent:可直接向其发送消息并接收完整响应的独立 AI Agent
绑定 A2A Agent
- 使用
a2a标记,为 A2A Agent 创建用户提供的服务:
cf cups a2a-agent -p '{"uri":"https://your-a2a-agent.example.com/.well-known/agent.json"}' -t "a2a"
URI 应指向 Agent 的 Agent Card(位于 /.well-known/agent.json 的 JSON 描述文件)。
- 将 A2A 服务绑定到应用程序:
cf bind-service ai-tool-chat a2a-agent
- 重启应用程序以应用绑定:
cf restart ai-tool-chat
使用 A2A Agent
绑定 A2A Agent 后:
- 点击导航栏上的 Agents 按钮(🤖)
- Agents 面板会显示所有已连接的 A2A Agent,以及以下信息:
- 名称、描述和版本
- 健康状态(正常/异常)
- 能力(流式传输、推送通知、状态历史记录)
- 点击任一健康 Agent 上的“Send Message”
- 在对话框中输入消息,然后点击“Send”
- Agent 的响应会以独特的视觉样式显示在聊天中
Agent 消息的显示内容包括:
- 机器人图标(🤖)和 Agent 名称标题
- 第三级配色方案(与大模型的响应不同)
- 清楚标明响应来自哪个 Agent
你可以同时绑定多个 A2A Agent,每个 Agent 都能提供专门的能力。Agents 面板会显示每个 Agent 的健康状态,导航按钮则会根据 Agent 的整体健康状况显示状态指示灯(绿色/橙色/红色)。
使用向量存储实现对话记忆
如果你绑定了向量数据库和嵌入模型,那么聊天记忆会在应用程序重启和扩缩容后继续保留。
- 按照上文绑定到向量数据库中的说明操作

免责声明
本仓库是一个非官方项目,按“原样”提供。任何组织均未对其提供支持或认可,也不对其功能提供任何保证或担保。使用风险由你自行承担。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。