AI在线 AI在线

MCP融合Spring AI,Java程序员大模型技术再上一层楼

在当下的技术发展浪潮中,大语言模型(LLMs)正深度渗透至企业应用开发领域,持续改写着该领域的格局。 开发者积极将其融入现代解决方案。 然而,快速发展背后,大语言模型通信和上下文处理缺乏标准化协议的问题日益凸显。

在当下的技术发展浪潮中,大语言模型(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会弹出一个权限请求对话框,点击“允许”。

图片图片

相关资讯

十大步骤详解Spring AI MCP机制底层实现,小白误入!

MCP分为MCP Client和MCP Server:MCP Client负责进行工具发现和工具调用MCP Server负责提供工具和工具执行总体流程图图片十大步骤详解第一步,MCP Client接收用户的问题,比如“今天是几月几号”。 第二步,MCP Client发送tools/list请求给MCP Server进行工具发现。 利用Spring AI开发的MCP Server,可以利用@Tool注解定义工具,比如:图片并利用MethodToolCallbackProvider提供出去:在MCP Server的MpcServerAutoConfiguration自动配置类中定义了一个McpSyncServer的Bean,它会依赖注入ListToolCallbackProvider,这样McpSyncServer中就拿到了MCP Server中定义的所有Tools(调用ToolCallbackProvider的getToolCallbacks()即可拿到)。
4/11/2025 9:01:37 AM
IT周瑜

基于 Spring AI + MCP + DeepSeek-R1-7B 构建企业级智能 Agent 工具调用系统

在大模型 Agent 发展浪潮下,如何通过模型驱动外部工具调用(Tool Calling)已成为构建智能业务系统的关键能力。 本文将手把手带你通过 Spring AI MCP(Model Context Protocol) DeepSeek-R1-7B 打造一个可落地的企业级智能 Agent。 项目背景与架构设计技术选型Spring AISpring 官方推出的 AI 接入框架,支持 LangChain、MCP、RAG 等能力;MCP(Model Context Protocol)模型与工具之间通信的协议桥梁;DeepSeek-R1-7B国产高性能开源大模型,已支持 Chat Completion、Tool Calling 接口;Ragflow用作 RAG 架构引擎(可选);系统功能用户向模型提问模型判断是否调用工具(如数据库查询)MCP 注册的工具服务完成任务模型生成最终响应环境准备安装依赖复制本地部署 DeepSeek-R1-7B 模型推荐使用 vLLM 启动 DeepSeek-R1-7B 模型服务:复制构建 Spring AI MCP 工具服务示例业务:产品信息查询复制注册 MCP 工具复制模型端配置(Ragflow 示例)在 ragflow.config.yaml 中配置模型地址及 MCP 工具启用:复制前端调用(可选)复制测试效果用户输入:复制输出结果:复制模型会自动触发 query-product 工具,无需用户指定,展示 Agent 工具能力。
4/21/2025 4:22:00 AM
编程疏影

Spring AI + MCP + DeepSeek-R1-7B + SSE 全流程实战指南

本教程将带你从 0 到 1 实现一个完整的 AI 流式问答应用,整合以下组件:Spring Boot Spring AI 构建服务框架MCP(Model Connector Plugin) 用于统一管理本地/云端大模型DeepSeek-R1-7B 国产高性能大模型(OpenAI API 兼容)SSE(Server-Sent Events) 实现前后端实时流式响应Ollama(可选) 更便捷地部署 DeepSeek-R1-7B 模型并提供 OpenAI 接口支持模型部署方式推荐:Ollama 运行 DeepSeek-R1-7B安装 Ollama访问:(以 DeepSeek 为例)复制也可以加载其它模型,如 llama3, qwen:chat, yi:34b, phi3, mistral 等。 启动 Ollama复制Ollama 会自动监听 OpenAI 风格接口(http://localhost:11434/v1/chat/completions),兼容 stream: true。 Spring Boot 接入 SSE 流式输出服务添加依赖(pom.xml)复制WebClient 配置类复制请求体结构封装复制DeepSeek-R1-7B 接口封装(支持 stream: true)复制控制器对外暴露 SSE 接口复制前端 JS 接入 SSE 实现流式展示复制总结通过以上步骤,我们成功实现了:Ollama 部署并运行 DeepSeek-R1-7B 本地大模型Spring Boot 封装 OpenAI 接口 stream: true实现后端 SSE 推流 前端实时 Token 渲染支持国产开源模型的类 ChatGPT 对话功能
5/16/2025 7:50:58 AM
编程疏影
  • 1