基于Spring AI的活动旅程MCP服务器
Spring Boot应用程序提供了一个完整的MCP(模型上下文协议)实现,包括客户端和服务器组件,与Spring AI集成,通过基于聊天的交互创建全面的营销活动。
建筑
该应用程序现在由两个主要组件构成:
1. MCP服务器 (McpServerConfig.java)
- 提供MCP服务器功能
- 与Spring AI聊天客户端集成
- 处理营销活动请求
- 管理服务器属性和配置
2. MCP客户端 (McpClientConfig.java)
- 通过SSE传输连接到MCP服务器
- 支持同步和异步客户端
- 提供工具回调集成
- 可定制的客户端行为
特性
- MCP服务器集成:完整的MCP服务器实施
- MCP客户端支持:具有自定义功能的多个客户端连接
- Spring AI集成:基于Spring AI框架
- 营销活动创建:生成完整的营销活动
- 目标受众细分:定义和分析目标受众
- 渠道战略发展:制定多渠道营销策略
- 电子邮件模板生成:生成电子邮件模板和内容
- WebSocket通信:实时聊天界面
- REST API:所有操作的HTTP端点
- 工具回调:MCP工具与Spring AI集成
先决条件
- Java 17或更高版本
- Maven 3.6或更高版本
- OpenAI API密钥或Azure OpenAI凭据
设置
- 克隆存储库
git clone
cd campaign-journey-backend- 设置您的AI凭据
选项1:OpenAI
export OPENAI_API_KEY=your-openai-api-key-here
export OPENAI_MODEL=gpt-4选项2:Azure OpenAI
export AZURE_OPENAI_API_KEY=your-azure-api-key-here
export AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com
export AZURE_OPENAI_DEPLOYMENT_NAME=gpt-4- 构建应用程序
mvn clean install- 运行应用程序
mvn spring-boot:run配置
MCP服务器配置
spring:
ai:
mcp:
server:
enabled: true
name: "Campaign Journey MCP Server"
version: "1.0.0"
description: "MCP Server for marketing campaign journey management using Spring AI"MCP客户端配置
spring:
ai:
mcp:
client:
enabled: true
name: "campaign-journey-mcp-client"
version: "1.0.0"
type: SYNC # or ASYNC
request-timeout: 30s
initialized: true
root-change-notification: true
toolcallback:
enabled: true
# SSE Transport
sse:
connections:
local-server:
url: http://localhost:8080
sse-endpoint: /sse用法
WebSocket连接
连接到WebSocket端点:
ws://localhost:8080/chatMCP命令
WebSocket接口支持MCP特定的命令:
/mcp/status - Check MCP server status
/mcp/tools - Get available MCP tools
/mcp/health - Check MCP health营销命令
"Create a marketing campaign for life insurance products"
"Define target audience for our insurance products"
"Develop a multi-channel marketing strategy"
"Generate an email template for promotion"
"Analyze campaign performance metrics"
"Optimize budget allocation across channels"REST API端点
市场营销运营
POST /api/marketing/campaign-创建活动POST /api/marketing/audience-定义受众POST /api/marketing/strategy-制定战略POST /api/marketing/template-生成模板POST /api/marketing/performance-分析性能POST /api/marketing/optimization-优化预算
MCP操作
GET /api/mcp/server/info-获取MCP服务器信息GET /api/mcp/server/health-检查MCP健康状况GET /api/mcp/clients-获取MCP客户端信息POST /api/mcp/request-发送MCP请求
将军
GET /api/capabilities-获取所有功能
MCP客户端定制
该应用程序提供可定制的MCP客户端:
同步客户端自定义程序
@Component
public class CustomMcpSyncClientCustomizer implements McpSyncClientCustomizer {
@Override
public void customize(String serverConfigurationName, McpClient.SyncSpec spec) {
spec.requestTimeout(Duration.ofSeconds(30));
spec.toolsChangeConsumer((tools) -> {
// Handle tools change
});
// ... more customization options
}
}异步客户端自定义程序
@Component
public class CustomMcpAsyncClientCustomizer implements McpAsyncClientCustomizer {
@Override
public void customize(String serverConfigurationName, McpClient.AsyncSpec spec) {
spec.requestTimeout(Duration.ofSeconds(30));
}
}运输支持
- SSE(服务器发送事件):远程MCP服务器的基于HTTP的传输
- 工作室:本地MCP服务器的标准I/O传输
- WebFlux:反应式传输支持(可选)
工具回调集成
MCP客户端自动与Spring AI的工具执行框架集成:
@Autowired
private SyncMcpToolCallbackProvider toolCallbackProvider;
ToolCallback[] toolCallbacks = toolCallbackProvider.getToolCallbacks();响应结构
所有回复包括:
type:响应类型(活动、细分、战略等)content:人工智能生成的内容status:成功/错误状态timestamp:响应时间戳- 基于响应类型的其他字段
故障排除
常见问题
- MCP客户端连接:检查SSE端点配置
- AI模型访问:验证API密钥和模型配置
- 运输问题:确保适当的运输配置
日志
启用调试日志记录:
logging:
level:
org.springframework.ai: DEBUG
com.example.mcp: DEBUG
org.springframework.ai.mcp: DEBUG发展
项目结构
src/main/java/com/example/mcp/
├── McpServerConfig.java # MCP Server configuration
├── McpClientConfig.java # MCP Client configuration
├── MarketingCampaignService.java # Marketing business logic
├── MCPClientService.java # MCP client operations
├── MCPWebSocketHandler.java # WebSocket message handler
├── WebSocketConfig.java # WebSocket configuration
├── MarketingCampaignController.java # REST API controller
└── McpServerApplication.java # Spring Boot main class添加新功能
- 新MCP工具:使用新的工具定义扩展MCP服务器
- 客户定制:为特定行为添加新的客户端自定义程序
- 运输支持实施新的运输机制
许可证
该项目根据MIT许可证获得许可。
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
