使用说明
Spring MCP服务器
使用Spring Framework和Java 21的现代模型上下文协议(MCP)服务器实现。
特性
- ✨ Java 21:利用最新的Java特性(记录、密封类、模式匹配、开关表达式)
- 🚀 弹簧靴3.3+:具有完全依赖注入的现代Spring框架
- 🔧 MCP协议:实现工具、资源和提示
- 🧪 测试良好:使用JUnit5进行全面的单元测试
- 📦 Maven 构建:易于依赖管理和构建
建筑
应用清洁代码原则
- 不可变性记录:所有DTO都使用Java记录来实现简洁、不可变的数据结构
- 密封类:具有编译时穷尽性的类型安全层次结构
- 函数式编程:可选、流API和功能错误处理
- 坚实的原则:单一责任、依赖注入、接口隔离
- 现代开关表达式:模式匹配以实现更清晰的条件逻辑
项目结构
src/main/java/com/example/mcp/
├── McpServerApplication.java # Main application entry point
├── config/
│ └── McpServerConfig.java # MCP server configuration
├── tool/
│ ├── EchoTool.java # Example tool: echo messages
│ └── DateTimeTool.java # Example tool: date/time operations
├── resource/
│ └── SystemInfoResource.java # Example resource: system information
└── prompt/
└── TemplatePromptProvider.java # Example prompts: code review templates
组件
工具
- 回声工具:演示使用可选参数进行字符串操作
- DateTimeTool:显示时区处理和带有错误处理的日期格式
资源
- 系统信息资源:使用密封类提供JVM和系统运行时信息
提示
- Templeprompt提供商:具有功能组合的代码审查和解释模板
建筑
mvn clean package
跑步
mvn spring-boot:run
测试
mvn test
使用的Java 21功能
记录
public record EchoInput(String message, String prefix) {}
密封类
public sealed interface SystemInfo permits JavaInfo, RuntimeInfo, MemoryInfo {}
模式匹配
return switch (info) {
case JavaInfo java -> formatJava(java);
case RuntimeInfo rt -> formatRuntime(rt);
case MemoryInfo mem -> formatMemory(mem);
};
文本块
String template = """
Please review the following code:
{{code}}
""";
依赖项
- 弹簧靴3.3.5
- Spring AI MCP(里程碑)
- Java 21
- JUnit5
- 断言J
最佳实践
- 零安全:使用
Optional对于可以为null的值 - 不可变性:记录和
List.copyOf()用于防御性复制 - 错误处理:尽可能无例外地处理功能错误
- 线程安全:默认情况下不可变的数据结构
- 依赖注入:带弹簧的构造注射
- 测试:全面覆盖的参数化测试
许可证
MIT许可证
