模型上下文协议服务器

一个基于Spring框架和Java 21的现代模型上下文协议(MCP)服务器实现,提供工具、资源和提示功能。

  • by diwang01
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 diwang01/spring-mcp-server

使用说明

Spring MCP服务器

使用Spring Framework和Java 21的现代模型上下文协议(MCP)服务器实现。

特性

  • ✨ Java 21:利用最新的Java特性(记录、密封类、模式匹配、开关表达式)
  • 🚀 弹簧靴3.3+:具有完全依赖注入的现代Spring框架
  • 🔧 MCP协议:实现工具、资源和提示
  • 🧪 测试良好:使用JUnit5进行全面的单元测试
  • 📦 Maven 构建:易于依赖管理和构建

建筑

应用清洁代码原则

  1. 不可变性记录:所有DTO都使用Java记录来实现简洁、不可变的数据结构
  2. 密封类:具有编译时穷尽性的类型安全层次结构
  3. 函数式编程:可选、流API和功能错误处理
  4. 坚实的原则:单一责任、依赖注入、接口隔离
  5. 现代开关表达式:模式匹配以实现更清晰的条件逻辑

项目结构

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

最佳实践

  1. 零安全:使用 Optional 对于可以为null的值
  2. 不可变性:记录和 List.copyOf() 用于防御性复制
  3. 错误处理:尽可能无例外地处理功能错误
  4. 线程安全:默认情况下不可变的数据结构
  5. 依赖注入:带弹簧的构造注射
  6. 测试:全面覆盖的参数化测试

许可证

MIT许可证