NEWS DETAIL

Spring AI 接入 MCP:DeepSeek 连接 Filesystem Server 读取本地文件

发布时间:2026/10/8 13:42:12 · 栏目:资讯中心

尧图网络原创建站知识分享正文
Spring AI 接入 MCPDeepSeek 连接 Filesystem Server 读取本地文件做 Tool Calling Demo 时我们通常会把工具直接写在 Java 应用里Tool(description查询订单)publicStringqueryOrder(StringorderId){returnorderService.query(orderId);}这种写法很适合接入自己项目里的业务方法。但如果工具来自外部系统比如文件系统、GitHub、数据库、浏览器、运维平台每个 AI 应用都重复写一套适配代码就会很累。MCP 要解决的就是这个问题外部工具怎么用统一协议接进 AI 应用。它不是替代 Tool Calling而是和 Tool Calling 配合Tool Calling模型怎么请求调用工具 MCP外部工具怎么标准化接进来这次只跑一条最小链路Spring AI 作为 MCP Client连接本地 Filesystem MCP Server让模型读取一个测试文件。先把这条链路跑通再去接 GitHub、数据库、浏览器这些 MCP Server就不会乱。注意这篇只演示本地测试目录。生产环境不要随便把真实目录暴露给模型。一、先把范围缩小Spring AI 里和 MCP 相关的写法不止一种Spring AI 做 MCP Client Spring AI 做 MCP Server stdio 连接本地 MCP Server SSE / Streamable HTTP 连接远程 MCP Server入门时不要全塞在一起。我们先选最容易跑通的一条Spring AI 做 MCP Client通过 stdio 连接本地 Filesystem MCP Server。整体关系是这样Spring AI 应用 → 启动并连接 Filesystem MCP Server → 获取 Server 暴露的文件工具 → 把工具交给模型 → 模型通过 Tool Calling 请求调用 → MCP Server 真正读取文件简单说MCP Client你的 Spring AI 应用 MCP Server外部工具服务这篇用现成的 Filesystem Server不从零写 Server。先把接入跑通。二、准备一个测试目录先准备几个前提你已经有一个能正常调用ChatClient的 Spring Boot 项目项目使用 Spring AI 1.1.7本机已经安装 Node.js 和npx当前模型支持 Tool Calling。这篇示例使用 DeepSeek模型用deepseek-v4-flash。如果你走的是第三方兼容网关要确认网关会不会完整透传tools参数和 tool call 响应。先建一个测试目录mkdir-p/tmp/spring-ai-mcp-demoechoHello from Spring AI MCP Demo/tmp/spring-ai-mcp-demo/test.txt先手动验证 Filesystem MCP Server 能不能启动npx-ymodelcontextprotocol/server-filesystem /tmp/spring-ai-mcp-demo如果看到类似输出说明本地 Server 能跑Secure MCP Filesystem Server running on stdio验证完可以停掉。真正接入 Spring AI 时Spring AI 会根据配置自动启动它。三、添加依赖pom.xml至少需要这几个依赖propertiesjava.version17/java.versionspring-ai.version1.1.7/spring-ai.version/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion${spring-ai.version}/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-model-deepseek/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-mcp-client/artifactId/dependency/dependenciesspring-ai-starter-mcp-client负责把 Spring AI 应用变成 MCP Client。这篇连接的是本地 stdio Server。如果以后要接远程 MCP Server再考虑spring-ai-starter-mcp-client-webflux。四、配置 DeepSeek 和 MCPapplication.yaml这样写spring:application:name:spring-ai-mcp-demoai:model:chat:deepseekdeepseek:api-key:${DEEPSEEK_API_KEY}chat:options:model:deepseek-v4-flashtemperature:0.2mcp:client:type:SYNCstdio:connections:filesystem:command:npxargs:--y-modelcontextprotocol/server-filesystem-/tmp/spring-ai-mcp-demo启动前设置环境变量exportDEEPSEEK_API_KEY你的 API Key这段配置的关键点有三个使用 DeepSeek 作为聊天模型通过npx启动 Filesystem MCP Server只暴露/tmp/spring-ai-mcp-demo测试目录。如果用 IDEA 运行在 Run/Debug Configurations 里给启动配置加环境变量DEEPSEEK_API_KEY你的 API KeyWindows 上通常要用cmd.exe /c包一层command:cmd.exeargs:-/c-npx--y-modelcontextprotocol/server-filesystem-C:\tmp\spring-ai-mcp-demomacOS / Linux 按前面的写法即可。五、写一个测试接口新建McpControllerpackagecom.example.springaideepseekdemo.controller;importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.tool.ToolCallbackProvider;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;RestControllerpublicclassMcpController{privatefinalChatClientchatClient;privatefinalToolCallbackProvidermcpTools;publicMcpController(ChatClient.Builderbuilder,ToolCallbackProvidermcpTools){this.chatClientbuilder.defaultSystem( 你是一个文件读取助手。 只能通过工具访问 /tmp/spring-ai-mcp-demo 目录。 当用户说 test.txt 或测试目录时都指 /tmp/spring-ai-mcp-demo。 不要请求访问 /、用户主目录、项目源码目录或其他目录。 ).build();this.mcpToolsmcpTools;}GetMapping(/ask)publicStringask(RequestParamStringquestion){returnchatClient.prompt().user(question).toolCallbacks(mcpTools).call().content();}}这里有个容易写错的点不要想当然写成McpClient.getTools(filesystem)。在 Spring AI 1.1.7 里MCP Client Starter 会把 MCP Server 暴露的工具转换成ToolCallbackProvider。ChatClient可以直接这样接.toolCallbacks(mcpTools)如果项目里还有其他ToolCallbackProviderBean构造方法注入时可能需要用Qualifier指定。这个最小 Demo 只有一个 MCP Provider可以直接注入。六、启动测试启动应用./mvnw spring-boot:run读取test.txtcurl--gethttp://localhost:8080/ask\--data-urlencodequestion帮我读取 /tmp/spring-ai-mcp-demo/test.txt 的内容如果模型选择了文件读取工具最终会返回类似test.txt 的内容是Hello from Spring AI MCP Demo也可以测试列目录curl--gethttp://localhost:8080/ask\--data-urlencodequestion列出 /tmp/spring-ai-mcp-demo 目录下有哪些文件如果日志里出现Access denied - path outside allowed directories不用慌。这说明模型请求了白名单之外的路径比如/。Filesystem MCP Server 拒绝了这次访问这是安全拦截不是 MCP 没接上。如果模型一直普通回答没有请求工具优先检查模型是否支持 Tool Calling DEEPSEEK_API_KEY 是否正确 中间网关是否透传 tools 参数先跑编译./mvnw clean compile-DskipTests然后启动应用请求/ask能读到Hello from Spring AI MCP Demo七、背后发生了什么业务代码看起来只有这一段chatClient.prompt().user(question).toolCallbacks(mcpTools).call().content();背后其实分成两条链路。应用启动时Spring AI 读取 application.yaml → 启动 Filesystem MCP Server → 建立 stdio 连接 → 获取 Server 的工具列表 → 转成 Spring AI 的 ToolCallback用户提问时用户提问 → 模型看到可用工具 → 模型判断要调用文件工具 → Spring AI 执行 ToolCallback → ToolCallback 通过 MCP 调用 Filesystem Server → Server 读取文件并返回结果 → 模型基于工具结果组织回答所以 MCP 和 Tool Calling 不是两套互斥方案MCP 负责把外部工具接进来 Tool Calling 负责让模型请求调用这些工具八、什么时候用 MCP如果只是当前项目里的几个业务方法直接写Tool更轻查订单 查物流 查库存这些能力本来就在当前应用里没必要为了 MCP 多绕一层。MCP 更适合工具要被多个 AI 应用复用 工具需要独立部署和维护 要接入现成的外部 MCP Server 工具很多不想每个应用都重复适配可以这样记Tool把当前应用里的方法暴露给模型 MCP把外部工具服务标准化接入应用Spring AI 不需要知道 Filesystem Server 内部怎么读文件只要按 MCP 协议连接它、拿到工具、执行工具调用就行。九、别忽略安全边界MCP 接入不难但安全边界一定要提前想清楚。Filesystem Server 会真正读写文件。入门 Demo 只暴露/tmp/spring-ai-mcp-demo不要暴露/ /Users/你的用户名 项目源码目录 .ssh 配置和密钥目录工具描述不是权限控制。真正的目录边界、权限校验、危险操作拦截都要在应用侧或 MCP Server 侧做。入门阶段建议只读文件、列目录。如果要开放写入、创建目录、移动文件至少要加用户权限校验 目录白名单 操作日志 二次确认 限流和超时还有一个常见误区MCP Server 能连上不代表模型一定会调用工具。模型会不会调用还取决于模型能力、工具描述、用户问题以及模型服务是否支持 Tool Calling。排查时分两步看先确认 MCP Server 能启动 再确认模型真的返回 tool call这两个问题不要混在一起。写在最后这篇文章跑通的是一条最小链路Filesystem MCP Server 暴露工具 → Spring AI MCP Client 连接 Server → MCP 工具转成 ToolCallbackProvider → ChatClient 把工具交给模型 → 模型通过 Tool Calling 请求调用 → Spring AI 通过 MCP 执行工具如果说Tool是把工具写在应用里那 MCP 就是把工具从应用里拆出去再用协议接回来。它的价值不在于“更高级”而在于工具可以独立维护多个 AI 应用可以复用外部工具生态可以标准化接入。但 MCP 只负责连接不负责替你做权限、业务规则和风险兜底。先用本地 Filesystem Server 跑通再考虑 GitHub、数据库、浏览器或公司内部系统。Agent 能力越多安全边界越要清楚。后续会继续更新 Spring AI、RAG、Memory、Tool Calling、MCP 等实战内容。
✦

本文为尧图网络原创建站知识分享。想针对自身行业获取定制化建站方案?欢迎咨询,资深顾问免费为你出思路。

RELATED

相关 资讯推荐

MORE

更多 新鲜资讯

JMeter入门实战:从零构建HTTP接口性能测试脚本与结果分析
2026/10/6 5:59:12

JMeter入门实战:从零构建HTTP接口性能测试脚本与结果分析

1. 项目概述:从零开始,用JMeter搞定HTTP性能测试 刚接触性能测试的新手,或者是从功能测试转过来的朋友,一听到“压测”两个字,心里可能就有点发怵。工具那么多,概念那么杂,从哪儿下手呢&#xf…

Earendel: 一个纯TS写的POSIX兼容的微内核Web操作系统
2026/10/6 5:40:23

Earendel: 一个纯TS写的POSIX兼容的微内核Web操作系统

最近我用TypeScript写了一个运行在浏览器里的Web操作系统 Earendel(目前已知的距离地球最遥远的恒星)。开发它的初衷主要是为了Linux和操作系统课程的教学。市面上绝大多数Web OS项目,要么只是做了一个长得像Windows/macOS的网页UI拼盘&#…

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形[特殊字符]
2026/10/6 6:17:24

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形[特殊字符]

5分钟掌握Windows防撤回神器:让微信QQ撤回消息无处遁形🚀 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: http…

从零制作同人动画:技术路线、流程与实战避坑指南
2026/10/7 8:09:46

从零制作同人动画:技术路线、流程与实战避坑指南

1. 先搞清楚这个“粉丝动画”到底是什么,以及它能解决什么问题看到“五条悟VS宿傩/咒术回战粉丝动画”这个标题,很多人的第一反应可能是去找一个现成的视频。但如果你是一个想自己动手创作、或者想了解这类作品背后技术流程的创作者,这个标题…

闭源降价80%,开源却在涨价:AI定价的交叉路口
2026/10/7 13:14:15

闭源降价80%,开源却在涨价:AI定价的交叉路口

8月6日,两条价格曲线悄然交汇。 一条向下:OpenAI把GPT-5.6 Luna的输出价格从6美元砍到1.2美元/百万Token,降幅80%。另一条向上:同一天,DeepSeek公告全线涨价,措辞是"涨幅较大",非试探…

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买
2026/10/6 6:28:36

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买

产线三防平板选哪个牌子?5个品牌实测告诉你别瞎买经常有工厂朋友拿着网上的"三防平板十大品牌排行榜"来问我:到底选哪个?说实话排行榜看看就行,真正选型得看你产线什么场景。今天挑五个在产线数字化里用得比较多的品牌—…

看完这篇,还想了解更多?

预约尧图网络顾问一对一沟通,针对你的行业与现状给出建站建议,全程免费。

免费咨询