Spring AI 支持 Mcp协议了,通过Mcp集成本地文件管理

Spring AI 1.0.0-M5 版本框架支持 MCP 协议了,对于 MCP 相关的内容,请关注专栏# Claude MCP 模型上下文协议 进行学习,该专栏会不定期更新相关内容,本文主要介绍如何使用 Spring AI 实现 MCP Client 以及 MCP Server等内容。

什么是Mcp

Model Context Protocol 是Anthropic 于2024年11月重磅开源的「模型上下文协议」MCP。其是一种开放的通信协议,是人工智能领域的 “USB 接口”,在大模型和其他数据源(数据、工具、开发环境等)之间建立了双向、并且更加安全的连接。

Mcp 将LLM的数据孤岛被彻底打破,LLM应用和外部数据源、工具都将无缝集成。目标是实现LLM应用程序与外部数据源和工具之间的无缝集成。

官方文档:modelcontextprotocol.io/introductio…

Spring AI 如何集成 MCP 协议

Spring AI 提供 Mcp Client 、 Mcp Server 开箱即用 Starters 和 Mcp Utils 相关工具。

Mcp Client Boot Starters

对于 Mcp Client,Spring AI 提供了如下两个 Starter 集成 MCP Client;

  • spring-ai-mcp-client-spring-boot-starter: 实现基于 STDIO 和 HTTP 的 SSE 传输协议的 Mcp Client
  • spring-ai-mcp-client-webflux-spring-boot-starter: 实现基于 WebFlux 的 SSE 传输协议的 Mcp Client

Mcp Client Boot Starter 支持的能力如下;

  • 管理多个客户端实例
  • 自动初始化客户端,spring.ai.mcp.client.enabled 开关可以控制是否自动初始化
  • 支持多种传输方式,stdio、sse
  • 与 Spring AI 工具执行框架无缝结合,Spring AI 框架支持工具执行
  • Mcp Client 生命周期管理、在应用程序上下文关闭时自动清理资源。
  • 支持 Mcp Client 扩展,定制客户端, 比如;
    • 请求配置,如:超时时间等。
    • 文件系统权限访问控制。
    • 服务端资源、工具、提示变更通知、日志处理等

Mcp Server Boot Starters

对于 Mcp Server, Spring AI 提供了如下三个 Starter 集成 Mcp Server;

  • spring-ai-mcp-server-spring-boot-starter: 实现支持 STDIO 传输协议的 Mcp Server
  • spring-ai-mcp-server-webmvc-spring-boot-starter: 实现基于 webmvc 的 SSE 传输协议的 Mcp Server
  • spring-ai-mcp-server-webflux-spring-boot-starter: 实现基于 webflux 的 SSE 传输协议的 Mcp Server

根据业务场景,可以选择其中的 Mcp Server Starter 来实现一个 Mcp Server

Mcp Server Boot Starter 支持的能力如下;

  • 自动配置 MCP 服务端组件 (资源、工具、提示词)。
  • 支持同步和异步两种服务模式。
  • 灵活的工具、资源和提示注册和更改通知功能。

目前有很多现成的 Mcp Server:

在本文示例代码将选择 server-filesystem server 演示如何使用它。

Mcp Utilities

Mcp 实用程序为将模型上下文协议与 Spring AI 应用程序集成提供了基础支持。实现了 Spring AI 的工具系统和 Mcp 服务器之间的无缝通信,支持同步和异步作。

ToolCallback

使 MCP 工具适配 Spring AI 的工具接口,同时支持同步和异步执行。

ToolCallbackProvider

从 MCP 客户端发现并获取 MCP 工具。

Spring Mcp Client 实现示例

基于 ollama qwen2.5:latest + @modelcontextprotocol/server-filesystem 实现一个本地智能文件管理服务

maven 依赖

pom代码解读复制代码<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

<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>

配置文件

properties代码解读复制代码spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.model=qwen2.5:latest

# MCP Client Configuration
spring.ai.mcp.client.enabled=true
spring.ai.mcp.client.name=mcp-client
spring.ai.mcp.client.version=1.0.0
spring.ai.mcp.client.type=SYNC
spring.ai.mcp.client.request-timeout=30s
spring.ai.mcp.client.stdio.servers-configuration=classpath:/mcp-servers-config.json

mcp-servers-config.json

json代码解读复制代码{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "."
      ]
    }
  }
}

特别说明:对于 args 的第三个参数,可以指定你想要访问的文件路径,可以是多个,比如: “args”: [ “-y”, “@modelcontextprotocol/server-filesystem”, “.”, “/Users” ]

代码实现

java代码解读复制代码package com.ivy.mcp;

import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.mcp.SyncMcpToolCallbackProvider;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }


    @RestController
    public static class ChatController {
        @Resource
        private OllamaChatModel ollamaChatModel;

        @Resource
        private SyncMcpToolCallbackProvider toolCallbackProvider;

        @GetMapping("/chat")
        public String call(@RequestParam String input) {
            ChatClient chatClient = ChatClient.builder(ollamaChatModel)
                    .defaultTools(toolCallbackProvider.getToolCallbacks())
                    .build();
            return chatClient.prompt(input).call().content();
        }
    }
}

测试用例

特别说明:在启动时有些同学可能会报错,大部分原因是因为本地没有安装 npx,自行安装即可。

启动应用程序:localhost:8080/chat?input=

  • 有哪些工具可以使用在这里插入图片描述

  • 帮我创建一个文件夹 mcp

  • 帮我在文件夹mcp下创建一个 test.txt 文件,并写入 hello mcp!

  • 帮我将 mcp/test.txt 中 hello mcp 改为 Hello MCP!

通过运行如上测试用例观察运行效果是否符合要求。在测试过程中我使用的本地大模型,但是受限于电脑配置,运行速度比较慢,大家也可以换成别的大模型。

总结

本文主要对 Spring AI 框架集成 Mcp 的一些能力,并实现一个 Mcp Client 调用现成的 @modelcontextprotocol/server-filesystem 实现一个智能本地文件管理服务。

后续还要实现两种场景;

  • 集成多个 Mcp Server
  • 自己实现一个 Mcp Server [支持 stdio 和 sse ]

本文实例代码可以参考 github.com/Fj-ivy/clau…

如何零基础入门 / 学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

👉 福利来袭CSDN大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭CSDN大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

### Spring AI MCP Java SDK 概述 Spring AI MCP 是一种基于 Model Context Protocol (MCP) 的 Java 实现,旨在简化模型上下文协议应用开发过程。通过该 SDK,开发者可以轻松构建支持 MCP 协议的服务端和客户端应用程序[^1]。 #### 核心功能 - **多传输选项**:支持多种通信方式,便于灵活成到不同的技术栈中。 - **三层架构设计**: - **MCP 客户端**:负责向服务端发送请求并处理响应。 - **MCP 服务器**:提供 API 接口供客户端调用,并管理模型的上下文数据。 - **工具回调接口(ToolCallbackProvider)**:允许扩展自定义行为以适应特定需求[^2]。 --- ### 使用方法 以下是关于如何使用 Spring AI MCP Java SDK 构建服务端和客户端的具体指导: #### 1. 引入 Maven 依赖 在项目的 `pom.xml` 文件中添加以下依赖项来引入 Spring AI MCP SDK: ```xml <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-mcp</artifactId> <version>1.0.0-M6</version> </dependency> ``` #### 2. 配置 YML 文件 创建或修改项目中的 `application.yml` 或 `application.properties` 文件,设置必要的参数。例如: ```yaml spring: ai: mcp: server-url: http://localhost:8080/mcp-server client-id: my-client-id secret-key: my-secret-key ``` #### 3. 编写服务端代码 服务端需要实现 ToolCallbackProvider 并将其注册到容器中。示例代码如下: ```java import org.springframework.ai.mcp.ToolCallbackProvider; import org.springframework.stereotype.Component; @Component public class MyToolCallbackProvider implements ToolCallbackProvider { @Override public String handleRequest(String requestPayload) { // 自定义逻辑处理接收到的数据 return "Response from tool callback provider"; } } ``` 同时,在控制器类中暴露 RESTful API 来接收来自客户端的请求: ```java import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/mcp-server") public class McpServerController { private final ToolCallbackProvider toolCallbackProvider; public McpServerController(ToolCallbackProvider toolCallbackProvider) { this.toolCallbackProvider = toolCallbackProvider; } @PostMapping("/process") public String process(@RequestBody String payload) { return toolCallbackProvider.handleRequest(payload); } } ``` #### 4. 编写客户端代码 客户端可以通过简单的 HTTP 请求与服务端交互。下面展示了一个基本的 Controller 示例: ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; @RestController @RequestMapping("/mcp-client") public class McpClientController { private final RestTemplate restTemplate; @Value("${spring.ai.mcp.server-url}") private String serverUrl; public McpClientController(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @GetMapping("/send-request") public ResponseEntity<String> sendRequest() { String url = serverUrl + "/process"; String requestBody = "{\"key\":\"value\"}"; return restTemplate.postForEntity(url, requestBody, String.class); } } ``` --- ### 总结 Spring AI MCP 提供了一套完整的解决方案,帮助开发者快速搭建基于 MCP 协议应用程序。无论是作为服务提供商还是消费者角色,都可以借助其强大的功能模块完成复杂的业务场景需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值