在当下的技术发展浪潮中,大语言模型(LLMs)正深度渗透至企业应用开发领域,持续改写着该领域的格局。开发者积极将其融入现代解决方案。然而,快速发展背后,大语言模型通信和上下文处理缺乏标准化协议的问题日益凸显。
本文介绍模型上下文协议(MCP),其与Spring AI集成,为解决上述难题提供有效途径,助力大语言模型在企业应用开发中更好地落地。
1.问题:缺乏规范的大语言模型集成
如今,大多数开发者通过特定供应商的API(如OpenAI、Anthropic或Azure OpenAI)与大语言模型进行交互。尽管这些API功能强大,但在没有标准接口的情况下进行集成会导致以下问题:
- 供应商锁定:更换大语言模型供应商需要重写核心逻辑。
- 上下文处理不一致:不同供应商在管理长期记忆、知识或工具访问方面存在差异。
- 系统行为不明确:没有正式规范来定义模型的需求,以及它们如何与外部工具和函数进行交互。
而模型上下文协议(MCP)正是为解决这些问题而生。
2.什么是MCP
模型上下文协议(MCP)是一种与供应商无关的协议,旨在实现大语言模型、智能体、工具、记忆系统和外部服务之间的互操作性。
模型上下文协议(MCP)是由Anthropic开发的开放标准,如今已成为一种开放协议,得到了包括LangChain、LangGraph,甚至Spring AI在内的多个社区和工具的支持。
可以把MCP想象成大语言模型领域的REST协议:它是一个简洁且可扩展的规范,定义了如何构建输入、输出、工具、记忆和上下文。
3.人工智能的通用标准:一次编写,随处可用
在AI领域,模型上下文协议(MCP)致力于打造统一的通信规范。OpenAI、Anthropic等行业巨头已采用MCP。
这一协议为开发者带来极大便利。过去,针对不同大语言模型供应商和辅助应用,需构建定制集成。现在,借助MCP,开发者只需实现一次,就能在Claude、ChatGPT等众多应用,以及未来支持该协议的客户端中复用,有效提升开发效率,降低成本。
4.MCP如何工作:简单的客户端 - 服务器架构
MCP的基础是简洁且模块化的客户端 - 服务器架构。可以将其想象成一个中心辐射型模型,宿主应用程序(客户端)通过与多个专门的MCP服务器进行通信来完成任务。
图片
具体如下:
- MCP宿主:这些是前端工具或应用程序,如Claude桌面应用、代码编辑器或人工智能智能体,它们希望与数据、工具或逻辑进行交互。
- MCP客户端:每个宿主应用程序通过该协议与一个或多个MCP服务器保持专用连接。这使得客户端可以发送请求、接收响应,甚至触发工具。
- MCP服务器:这些是轻量级的后端程序,通过模型上下文协议公开特定功能,如访问本地文件、触发API或运行工作流。每个服务器都可以是专门构建且独立的。
- 本地数据源:用户本地机器上的文件、数据库或微服务,可由MCP服务器安全访问。
- 远程服务:MCP服务器可以连接的API或云平台,扩展了服务器的功能范围,使其超越本地环境。
MCP支持开发者围绕一种名为JsonRpcMessage的正式模式来构建大语言模型交互。
5.MCP与Spring AI集成
Spring AI通过提供即用型的Spring Boot启动器,使将模型上下文协议(MCP)集成到应用程序变得轻松。这些启动器涵盖客户端和服务器端设置,并支持多种通信传输方式,如标准输入输出(STDIO)和服务器发送事件(SSE)。
5.1 客户端启动器
这些启动器帮助应用程序连接到MCP服务器:
- spring-ai-starter-mcp-client:核心的MCP客户端,内置对基于STDIO和HTTP的SSE通信的支持。
- spring-ai-starter-mcp-client-webflux:使用WebFlux为SSE传输添加响应式支持。
5.2 服务器启动器
这些用于使用Spring Boot构建自定义MCP服务器:
- spring-ai-starter-mcp-server:使用STDIO传输的基本服务器设置,适用于基于进程的通信。
- spring-ai-starter-mcp-server-webmvc:使用Spring MVC提供SSE服务器支持,适用于基于Servlet的环境。
- spring-ai-starter-mcp-server-webflux:适用于使用Spring WebFlux的应用程序的SSE服务器的响应式版本。
支持STDIO、Servlet SSE、WebFlux和WebMVC传输。
图片
6.使用STDIO传输启动Spring AI MCP服务器
以下是一个完整的示例,展示如何使用Spring AI设置MCP服务器。该示例功能完备,且使用Spring Boot进行了清晰的组织。此示例使用spring-ai-starter-mcp-server,并可选支持STDIO和/或基于HTTP的SSE传输。
官方文档提供了详细指南:https://docs.spring.io/spring-ai/reference/api/mcp/mcp-server-boot-starter-docs.html
6.1 Maven依赖
复制<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId> </dependency> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>${spring-ai.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>复制
@SpringBootApplication publicclass SpringMcpApplication { privatestaticfinal Logger log = LoggerFactory.getLogger(SpringMcpApplication.class); public static void main(String[] args) { SpringApplication.run(SpringMcpApplication.class, args); } @Bean public List<ToolCallback> danTools(SpringMCPServerService courseService) { log.info(Arrays.toString(Thread.currentThread().getStackTrace()).replace(',', '\n')); return Arrays.asList(ToolCallbacks.from(courseService)); } } @Service publicclass SpringMCPServerService { @Tool(name = "get_system_information", description = "Gathers detailed system-level diagnostics including directory info, OS and architecture details, JVM configuration, memory stats, CPU load, and installed software versions.") public static SystemInfo getSystemInfo() { SystemInfo info = new SystemInfo(); Properties props = System.getProperties(); info.osName = props.getProperty("os.name"); //...... } }复制
spring.application.name=courses spring.main.web-application-type=none spring.ai.mcp.server.name=jagnya-selflearn-mcp spring.ai.mcp.server.versinotallow=0.0.1 spring.main.banner-mode=off logging.pattern.cnotallow=
6.2 关键配置说明
- STDIO模式要求:
禁用Web应用类型(spring.main.web-application-type=none)
禁用Spring启动横幅(spring.main.banner-mode=off)
清空控制台日志模式(logging.pattern.cnotallow=)
7 MCP服务器与Claude(Anthropic)客户端的集成
现在我们已经实现了MCP服务器,接下来要将它与Anthropic的Claude AI进行集成。这可以验证服务器是否正常运行,以及是否能够为像Claude这样符合MCP规范的客户端提供上下文数据。
图片
8 MCP服务器与Claude桌面应用集成:分步指南
以下是如何将基于Spring的MCP服务器与Claude桌面应用(Anthropic)进行集成,以验证一切是否按预期工作:
1) 如果尚未下载,请从Anthropic网站下载并安装Claude桌面应用。
2) 启动Claude桌面应用程序。Claude设计为支持通过模型上下文协议(MCP)与自定义人工智能模型服务器进行通信。
- 进入Claude的“设置”。
- 导航到“开发者”部分。
- 点击“编辑配置”以打开claude_desktop_config.json。
- 使用自定义MCP服务器配置更新claude_desktop_config.json。例如:
{ "mcpServers": { "jagnya-spring-mcp": { "command": "/Users/user/Library/Java/JavaVirtualMachines/sapmachine-21.0.6/Contents/Home/bin/java", "args": [ "-jar", "/Users/<add ur path to jar>/spring-mcp/target/spring-mcp-0.0.1-SNAPSHOT.jar" ] } } }
3) 保存配置后,重启Claude桌面应用。
如果一切配置正确,你会看到:
- 一个代表开发者工具的锤子图标🛠️
- 一个代表自定义集成的插件图标🔌
- 点击锤子图标打开MCP工具。
- 在Claude中输入以下内容:Hi, get my system details with the Java version installed.
- Claude会弹出一个权限请求对话框,点击“允许”。
图片