使用说明
MCP客户端服务器演示
该项目演示了使用Spring Boot的模型上下文协议(MCP)客户端-服务器实现,该实现与Docker容器化,便于部署。
建筑
- MCP客户端 (端口8080):连接到MCP服务器并为AI驱动的交互提供REST端点的Spring Boot应用程序
- MCP服务器 (端口8095):实现MCP协议并向客户端提供工具/功能的Spring Boot应用程序
服务概述
MCP客户端服务
- 通过SSE(服务器发送事件)连接到MCP服务器
- 为AI聊天交互提供REST端点
- 使用OpenAI集成进行自然语言处理
- 自动发现并使用MCP服务器中的工具
MCP服务器服务
- 实施MCP协议以发现和执行工具
- 提供股票价格和公司信息工具
- 通过标准化协议公开MCP功能
- 在WebFlux上运行用于响应式编程
运行应用程序
先决条件
- 已安装Docker和Docker Compose
- Java 17+(用于本地开发)
- Maven 3.6+(用于本地开发)
- OpenAI API密钥(用于AI功能)
快速入门(自动脚本)
将自动构建和清理脚本与您的OpenAI API密钥一起使用:
OPENAI_API_KEY=sk-your-actual-api-key ./build-and-cleanup.sh
此脚本将:
- 构建客户端和服务器端Maven项目
- 使用linux/amd64平台创建Docker镜像
- 在具有环境变量的组合容器中启动服务
- 清理不必要的文件
- 为AI功能配置OpenAI API密钥
环境变量设置
选项1:直接命令行
OPENAI_API_KEY=sk-your-actual-api-key ./build-and-cleanup.sh
选项2:导出环境变量
export OPENAI_API_KEY=sk-your-actual-api-key
./build-and-cleanup.sh
选项3:创建.env文件
echo "OPENAI_API_KEY=sk-your-actual-api-key" > .env
source .env
./build-and-cleanup.sh
Docker部署选项
- 组合式服务容器 (推荐):
OPENAI_API_KEY=sk-your-actual-api-key ./build-and-cleanup.sh
- 手动Docker构建:
# Build both projects
cd client && ./mvnw clean package -DskipTests && cd ..
cd server && ./mvnw clean package -DskipTests && cd ..
# Build and run Docker image with environment variables
docker build --platform linux/amd64 -f Dockerfile.combined -t mcp-combined .
docker run -d -p 8080:8080 -p 8095:8095 \
-e OPENAI_API_KEY=sk-your-actual-api-key \
--name mcp-services mcp-combined
- 使用Docker Compose:
OPENAI_API_KEY=sk-your-actual-api-key docker-compose up -d
- 推送到注册表:
REGISTRY_USERNAME=your-username ./push-to-registry.sh
地方发展
- 构建这两项服务:
cd client && ./mvnw clean package -DskipTests && cd ..
cd server && ./mvnw clean package -DskipTests && cd ..
- 启动MCP服务器:
cd server && ./mvnw spring-boot:run
- 启动MCP客户端(在另一个终端中):
cd client && OPENAI_API_KEY=sk-your-actual-api-key ./mvnw spring-boot:run
API终点
MCP客户端服务(http://localhost:8080)
GET /1-向AI询问“你好吗?”GET /2-通过AI查询SAP公司股价
客户端自动连接到MCP服务器,并使用可用的工具来增强AI响应。
MCP服务器服务(http://localhost:8095)
- 实现MCP协议端点
- 提供工具发现和执行功能
- 可用工具:
howsStocks(company)-获取股票表现信息getStockPrice(company)-获取当前股价
支持的公司:
- IBM:股价和业绩数据
- 微软股票信息
- SAP:SAP库存信息
测试服务
手动测试
- 测试MCP客户端AI端点:
# Simple AI interaction
curl http://localhost:8080/1
# AI with stock price lookup (uses MCP server tools)
curl http://localhost:8080/2
- 检查服务运行状况:
# Test client service
curl -I http://localhost:8080/
# Test server service
curl -I http://localhost:8095/
配置
环境变量
OPENAI_API_KEY-客户端服务中的AI功能所需REGISTRY_USERNAME-用于镜像推送的Docker注册表用户名IMAGE_TAG-Docker镜像的自定义标签(默认:时间戳)
应用程序属性
客户服务(client/src/main/resources/application.yml):
spring:
application:
name: client
部署选项
1.组合容器(默认)
这两个服务都在一个容器中运行,使用supervisord进行流程管理。
2.Docker注册表推送
将镜像推送到Docker Hub或私有注册表进行部署:
REGISTRY_USERNAME=your-username ./push-to-registry.sh
3.平台特定构建
图像是用 linux/amd64 注册表兼容性平台。
Docker容器管理
组合容器使用supervisord来管理这两个服务:
- 客户端服务:运行方式
client监督程序 - 服务器服务:运行方式
server监督程序 - 日志:可在
/tmp/client.out.log和/tmp/server.out.log
主要特点
- MCP协议:实现AI工具集成的模型上下文协议
- 反应式体系结构:使用Spring WebFlux进行非阻塞操作
- Docker就绪:具有流程监督的单容器部署
- 注册表兼容:Docker注册表的平台特定构建
- 人工智能集成:OpenAI与自动工具发现的集成
- 清洁构建流程:自动生成和清理脚本
可用脚本
./build-and-cleanup.sh-完成构建、映像创建和部署./push-to-registry.sh-将Docker镜像推送到注册表./start-services.sh-服务启动和健康检查脚本
项目结构
mcp/
├── client/ # MCP Client (Spring Boot)
│ ├── src/main/java/com/sap/client/
│ │ ├── ClientApplication.java
│ │ └── SimpleQuestion1.java
│ └── pom.xml
├── server/ # MCP Server (Spring Boot)
│ ├── src/main/java/com/sap/server/
│ │ ├── ServerApplication.java
│ │ └── MyService.java
│ └── pom.xml
├── Dockerfile.combined # Multi-service container
├── supervisord.conf # Process management
└── build-and-cleanup.sh # Automated build script
故障排除
服务沟通问题
# Check container logs
docker logs mcp-combined-container
# Check specific service logs
docker exec mcp-combined-container cat /tmp/client.out.log
docker exec mcp-combined-container cat /tmp/server.out.log
从头开始重建
# Stop and remove existing container
docker stop mcp-combined-container
docker rm mcp-combined-container
# Rebuild everything
./build-and-cleanup.sh
OpenAI API关键问题
确保您的OpenAI API密钥设置正确:
# For local development
export OPENAI_API_KEY=your-actual-api-key
# For Docker deployment
docker run -e OPENAI_API_KEY=your-actual-api-key ...
停止服务
# Stop Docker container
docker stop mcp-combined-container
# Remove container
docker rm mcp-combined-container