操作mcp客户端
一 企业运营助理 使用模型上下文协议(MCP)、Java 25和Spring Boot 3.5构建。
🚀 描述
该项目整合了:
- 模型上下文协议(MCP):用于通过以下方式与外部工具进行通信
McpSyncClient - 春季AI 1.1.2:用于OpenAI GPT-4集成
- 弹簧靴3.5:用于企业架构
该应用程序通过MCP检索系统指标和最近的事件,对其进行处理,并使用GPT-4提供智能操作建议。
📋 先决条件
- JDK 25 (或JDK 21+)
- Maven 3.8+
- MCP服务器 奔跑在
http://localhost:8081/mcp(流式HTTP) - OpenAI API密钥
⚙️ 配置
1.设置OpenAI API密钥
Windows(PowerShell):
$env:OPENAI_API_KEY="sk-your-api-key-here"Linux/Mac:
export OPENAI_API_KEY="sk-your-api-key-here"或编辑 src/main/resources/application.properties 并替换 ${OPENAI_API_KEY} 直接用你的钥匙。
2.配置MCP服务器
客户端希望在以下位置有一个可流式传输的HTTP MCP服务器:
http://localhost:8081/mcp服务器必须公开以下工具:
getSystemMetrics→ 回报{ avgLatencyMs, errorRate }getRecentIncidents→ 返回以下列表[{ id, title, timestamp, status }]
3.应用程序属性
spring.application.name=operations-mcp-client
# MCP Client
spring.ai.mcp.client.type=SYNC
spring.ai.mcp.client.request-timeout=30s
spring.ai.mcp.client.toolcallback.enabled=false
spring.ai.mcp.client.streamable-http.connections.tools-server.url=http://localhost:8081
spring.ai.mcp.client.streamable-http.connections.tools-server.endpoint=/mcp
# OpenAI
spring.ai.openai.api-key=${OPENAI_API_KEY}
spring.ai.openai.chat.options.model=gpt-4
spring.ai.openai.chat.options.temperature=0.74.安装依赖项
mvn clean install🏃 运行应用程序
mvn spring-boot:run测试端点
curl http://localhost:8080/api/incidents/analyze或在浏览器中打开: http://localhost:8080/api/incidents/analyze
📁 项目结构
operations-mcp-client/
├── src/main/java/it/matteoroxis/operations_mcp_client/
│ ├── config/
│ │ ├── McpClientConfig.java # McpSyncClient configuration
│ │ └── SpringAIConfig.java # Spring AI ChatClient configuration
│ ├── controller/
│ │ └── IncidentController.java # REST controller GET /api/incidents/analyze
│ ├── model/
│ │ ├── Incident.java # Record: id, title, timestamp, status
│ │ └── SystemMetrics.java # Record: avgLatencyMs, errorRate, timestamp
│ ├── service/
│ │ └── IncidentAnalysisService.java # Core analysis service
│ └── OperationsMcpClientApplication.java
└── src/main/resources/
└── application.properties🔧 运作原理
执行流程
GET /api/incidents/analyze
│
▼
IncidentAnalysisService.analyze()
│
├── McpSyncClient → callTool("getSystemMetrics") → SystemMetrics
├── McpSyncClient → callTool("getRecentIncidents") → List
│
▼
ChatClient (OpenAI GPT-4)
│
▼
Operational recommendations in natural language模型
Incident
public record Incident(String id, String title, Instant timestamp, String status) {}SystemMetrics
public record SystemMetrics(int avgLatencyMs, double errorRate, Instant timestamp) {}REST端点
| 方法 | 路径 | 描述 |
|---|---|---|
GET | /api/incidents/analyze | 分析指标和事件,返回GPT-4建议 |
提示已发送至GPT-4
该服务动态构建一个包含以下内容的提示:
- 系统指标:平均延迟、错误率、时间戳
- 最近事件列表:ID、标题、状态、时间戳
- 分析约束:可能的原因、优先行动、需要收集的其他指标
📦 主要依赖关系
| 依赖关系 | 版本 | 目的 |
|---|---|---|
spring-boot-starter-web | 3.5.10 | REST API |
spring-ai-starter-mcp-client | 1.1.2 | MCP客户端 |
spring-ai-starter-model-openai | 1.1.2 | OpenAI集成 |
jackson-databind | - | MCP响应的JSON解析 |
🐛 故障排除
错误:启动时“连接被拒绝”
MCP服务器在以下位置不可用 http://localhost:8081。启动客户端之前,请确保服务器正在运行。
错误:“未提供编译器”
Maven找不到JDK。确保 JAVA_HOME 指向JDK:
# Windows
$env:JAVA_HOME="C:\Program Files\Java\jdk-25"错误:“无效的API密钥”
确认 OPENAI_API_KEY 环境变量设置正确。
事件字段显示“N/A”或“未知”
确保MCP服务器以预期格式返回JSON:
[
{ "id": "INC-42", "title": "...", "timestamp": 1234567890, "status": "Resolved" }
]这 timestamp 字段必须是以秒为单位的历元数(不是ISO-8601字符串)。
📚 使用的技术
- Java 25
- 弹簧靴3.5.10
- 春季AI 1.1.2
- MCP Java SDK (通过
spring-ai-starter-mcp-client) - OpenAI GPT-4
- 杰克逊
- 梅文
📄 许可证
这个项目是一个教育例子。
👤 作者
马泰奥·罗克西斯
