MCP协议客户端-服务器演示

一个基于Spring Boot和Docker的MCP协议实现,提供AI工具集成和自然语言处理功能。

  • by badarinath-katti
  • Shell
  • 本地部署
  • 更新于
在 GitHub 查看 badarinath-katti/mcp-sse

使用说明

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部署选项

  1. 组合式服务容器 (推荐):
OPENAI_API_KEY=sk-your-actual-api-key ./build-and-cleanup.sh
  1. 手动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
  1. 使用Docker Compose:
OPENAI_API_KEY=sk-your-actual-api-key docker-compose up -d
  1. 推送到注册表:
REGISTRY_USERNAME=your-username ./push-to-registry.sh

地方发展

  1. 构建这两项服务:
cd client && ./mvnw clean package -DskipTests && cd ..
cd server && ./mvnw clean package -DskipTests && cd ..
  1. 启动MCP服务器:
cd server && ./mvnw spring-boot:run
  1. 启动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库存信息

测试服务

手动测试

  1. 测试MCP客户端AI端点:
# Simple AI interaction
curl http://localhost:8080/1

# AI with stock price lookup (uses MCP server tools)
curl http://localhost:8080/2
  1. 检查服务运行状况:
# 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