使用说明
MCP所有演示
最小模型上下文协议栈由以下部分组成:
- mcp服务器 --Spring Boot WebSocket服务器公开了4个必需的MCP todo工具
- mcp用户界面 --Next.js UI通过MCP通道调用工具
- 带Gemini的MCP测试客户端 -此测试客户端模拟 精确经验 在真实的LLM客户端(如Claude Desktop、Cursor等)中使用MCP-UI。它使用谷歌的Gemini AI和原生函数调用,与您的MCP服务器自然交互。
1.要求
| 组件 | 要求 |
|---|---|
| 服务器 | Java 17+,Maven 3.9+ |
| 客户端 | Node.js 18+(用20.19.0测试),npm 9+ |
2.目录布局
server/ # Java Spring Boot MCP server
client/ # Next.js UI client
3.运行MCP服务器
cd server
mvn spring-boot:run
这将在以下位置启动与MCP兼容的WebSocket端点 ws://localhost:8080/mcp 它公开了以下工具:
| 工具名称 | 描述 | 输入模式(摘要) | 输出 |
|---|---|---|---|
todo_create |
创建待办事项 | { title: string, completed?: boolean } |
{ todo } |
todo_list 列出所有 |
{} |
{ todos: Todo[] } |
|
todo_update |
更新待办事项 | { id: string, title?: string, completed?: boolean } |
{ todo } |
todo_delete |
删除待办事项 | { id: string } |
{ id, deleted: true } |
所有数据都保存在内存中(TodoService),因此重新启动服务器会重置列表。
4.运行MCP UI客户端
cd client
npm install
npm run dev
带Gemini的MCP测试客户端
此测试客户端模拟 精确经验 在真实的LLM客户端(如Claude Desktop、Cursor等)中使用MCP-UI。它使用谷歌的Gemini AI和原生函数调用,与您的MCP服务器自然交互。
🎯 这表明了什么
- 自然语言交互:用户用简单的英语与Gemini聊天
- 自动工具调用:Gemini分析消息并调用相应的MCP工具
- 交互式UI渲染:服务器返回MCP-UI资源→ 在聊天中内联呈现
- 无缝更新:用户与UI交互→ 动作回流→ 工具再次调用→ UI实时更新
这是 精确地 Claude Desktop或Cursor将如何处理MCP-UI资源!
🚀 快速开始
1.安装依赖项
cd test-client
npm install
2.配置环境
创建一个 .env 文件在 test-client 目录:
GEMINI_API_KEY=your-gemini-api-key-here
MCP_WS_URL=ws://localhost:8080/mcp
获取Gemini API密钥:
- 首选https://aistudio.google.com/app/apikey
- 单击“创建API密钥”
- 复制密钥并将其粘贴到您的
.env文件
3.启动MCP服务器
在单独的终端中:
cd server
mvn spring-boot:run
等到你看到: Started McpServerApplication
4.启动测试客户端
cd test-client
npm run dev
您应该看到:
🚀 Starting MCP Chat Client with Gemini...
📡 Connecting to MCP server at ws://localhost:8080/mcp...
✅ Connected! Found 4 tools:
• todo_create: Create a todo item
• todo_list: List all todo items
• todo_update: Update a todo item
• todo_delete: Delete a todo item
🌐 Chat UI is ready!
👉 Open: http://localhost:3003
5.打开聊天界面
打开http://localhost:3003在浏览器中开始聊天!
💬 对话示例
尝试以下自然语言提示:
- “显示我的待办事项” → 双子座来电
todo_list→ 交互式仪表板显示为内联 - “添加购买杂货的新待办事项” → 双子座来电
todo_create→ 仪表板更新新待办事项 - “将第一个待办事项标记为已完成” → 双子座来电
todo_update→ UI立即刷新 - “删除id为abc-123的待办事项” → 双子座来电
todo_delete→ Todo消失了
🔄 运作原理
- 用户键入消息 自然语言
- Gemini分析 使用其本机函数调用的消息
- 双子座决定 根据工具的描述调用哪个MCP工具
- 工具已执行 通过WebSocket连接到您的Spring Boot MCP服务器
- 服务器响应 与:
- JSON数据(待办事项列表、创建的待办事项等)
- MCP-UI资源 (交互式HTML仪表板)
- UI内联渲染 在聊天对话中使用iframe
- 用户交互 在渲染的UI中使用表单/按钮
- 行动回流 通过聊天→ Gemini再次调用工具→ UI更新
🎨 你会看到什么
- 聊天界面 类似于Claude/ChatGPT
- 消息 从你和助理
- 交互式UI卡 当工具返回MCP-UI资源时显示为内联
- 实时更新 当您与仪表板交互时
🛠️ 建筑
- 前端:基于React的聊天UI(作为静态HTML)
- 后端:Node.js服务器:
- 通过WebSocket连接到MCP服务器
- 将Gemini AI与函数调用集成
- 处理聊天消息和工具执行
- 返回用于内联渲染的MCP-UI资源
🐛 故障排除
“无法连接到MCP服务器”
- 确保Spring Boot服务器在端口8080上运行
- 检查一下
MCP_WS_URL在.env匹配您的服务器URL
“需要GEMINI_API_KEY环境变量”
- 确保您创建了
.env文件 - 验证API密钥是否正确(无额外空格)
UI不呈现
- 检查浏览器控制台是否有错误
- 验证MCP服务器是否正在返回UI资源(检查服务器日志)
📚 后续步骤
在本地测试后,您可以:
- 将MCP服务器部署到云提供商
- 将其用于真正的LLM客户端,如Claude Desktop或Cursor
- 添加更复杂的UI交互
- 使用其他工具进行扩展
5.快速测试集成
- 启动Spring Boot服务器。
- 在第二个终端中启动Next.js开发服务器。
- 负载
http://localhost:3000,等待连接指示器显示“已连接”。 - 从iframe内的MCP-UI仪表板或通过回退刷新按钮创建/更新/删除待办事项——主机只需将操作中继回MCP服务器。
6.故障排除
Cannot find module '.next/server/middleware-manifest.json'–删除.next文件夹并重新运行npm run dev强制进行清洁建设。- WebSocket未连接 –确保服务器正在运行,客户端也在运行
NEXT_PUBLIC_MCP_WS_URL与服务器URL匹配。 - MCP-UI iframe保持空白 –确认Spring服务器正在返回
ui字段(参见McpWebSocketHandler)并且您的浏览器控制台没有显示CSP错误。手册todo_list工具调用应始终刷新UI资源。