| MCP协议:AI世界的USB接口)
Spring AI 学习篇十二| MCP协议AI世界的USB接口一、本章核心学习目标二、前置知识准备三、为什么我们需要MCP协议1. 紧耦合无法复用2. 没有标准化3. 生态碎片化4. 安全与权限问题MCP的本质AI世界的USB接口四、MCP协议核心架构与原理1. MCP核心架构2. MCP的三大核心能力3. MCP与传统工具调用的对比五、Spring AI 1.0原生MCP支持1. 添加Maven依赖2. 配置MCP服务器(1) 配置文件方式推荐(2) 代码方式3. 注册MCP工具到ChatClient4. 测试MCP工具调用六、常用官方MCP服务器详解1. 文件系统MCP服务器2. 命令执行MCP服务器3. SQLite数据库MCP服务器4. 浏览器MCP服务器七、开发自定义MCP服务器1. 使用Java开发MCP服务器(1) 添加依赖(2) 开发MCP服务器(3) 启动MCP服务器2. 集成自定义MCP服务器到Spring AI应用八、企业级最佳实践1. MCP服务器部署最佳实践2. 安全与权限控制3. 性能优化4. 工具生态建设九、常见坑与解决方案1. ❌ MCP服务器启动失败2. ❌ 大模型不调用MCP工具3. ❌ 工具调用权限不足4. ❌ 工具返回结果过长5. ❌ MCP工具名称冲突十、本章总结与下章预告本章总结下章预告十一、课后练习一、本章核心学习目标学完本章你将能够深刻理解MCP协议的本质与解决的核心痛点掌握MCP协议的核心架构与通信原理熟练使用Spring AI 1.0原生MCP支持快速集成常用官方MCP服务器文件系统、命令执行、数据库独立开发自定义MCP服务器理解MCP与传统工具调用的区别与优势基于MCP构建标准化、可复用的AI工具生态二、前置知识准备已经完成第11篇的学习熟练掌握Spring AITool工具调用了解传统工具调用的局限性熟悉Spring Boot配置与依赖注入了解HTTP与JSON-RPC通信基础三、为什么我们需要MCP协议上一章我们学习了Spring AITool注解它让我们可以很方便地开发自定义工具。但这种方式存在4个致命的缺陷严重限制了AI工具生态的发展1. 紧耦合无法复用工具与应用代码紧耦合你在A应用中开发的工具无法直接在B应用中使用更无法被Python、Go等其他语言开发的应用使用。2. 没有标准化每个框架都有自己的工具调用格式OpenAI是一种格式Anthropic是另一种格式Spring AI又是一种格式。同一个工具需要为不同的框架编写不同的适配代码。3. 生态碎片化由于没有标准AI工具生态极度碎片化没有一个统一的工具市场。你需要自己开发几乎所有需要的工具重复造轮子。4. 安全与权限问题传统工具调用没有统一的安全模型和权限控制机制容易出现安全漏洞。MCP协议就是为了解决这些问题而生的。它由Anthropic在2026年1月正式发布现在已经成为AI工具调用的事实标准得到了OpenAI、Google、Spring AI、Ollama等主流厂商的支持。MCP的本质AI世界的USB接口通俗地说MCPModel Context Protocol就是AI世界的USB接口。以前每个工具都有自己的接口你需要为每个工具编写专门的驱动现在所有工具都遵循MCP标准就像所有USB设备都遵循USB标准一样任何支持MCP的大模型都可以直接使用任何支持MCP的工具不需要任何适配代码预告式提及MCP是AI Agent的基础设施下一章我们将学习如何基于MCP构建功能强大的AI Agent它可以调用任何MCP工具来完成复杂任务。四、MCP协议核心架构与原理1. MCP核心架构MCP采用经典的客户端-服务器架构┌─────────────────┐ ┌─────────────────┐ │ MCP客户端 │◄────────►│ MCP服务器 │ │ (大模型/应用) │ │ (提供工具) │ └─────────────────┘ └─────────────────┘MCP客户端大模型或AI应用负责调用工具MCP服务器提供具体的工具实现负责执行工具并返回结果通信协议基于JSON-RPC 2.0支持stdio和HTTP两种传输方式2. MCP的三大核心能力MCP协议定义了三大核心能力所有MCP服务器都必须实现能力说明工具调用服务器提供一组工具客户端可以调用这些工具资源访问服务器提供一组资源客户端可以读取这些资源如文件、数据库表提示词模板服务器提供一组提示词模板客户端可以使用这些模板3. MCP与传统工具调用的对比对比维度传统Tool工具调用MCP协议耦合度与应用代码紧耦合完全解耦独立部署跨语言只能在同一语言中使用跨语言服务器可以用任何语言开发跨模型只能在特定框架中使用跨模型支持所有主流大模型复用性无法复用一次开发到处使用生态碎片化统一生态大量现成工具可用安全没有统一安全模型内置统一的安全与权限控制五、Spring AI 1.0原生MCP支持Spring AI 通过ToolCallbackProvider集成 MCP 工具以下示例展示核心概念具体 API 以实际版本和官方文档为准1. 添加Maven依赖dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-mcp-spring-boot-starter/artifactId/dependency2. 配置MCP服务器Spring AI支持两种方式配置MCP服务器配置文件方式和代码方式。(1) 配置文件方式推荐在application.yml中添加MCP服务器配置spring:ai:mcp:client:type:SYNCstdio:connections:# 文件系统MCP服务器file-system:command:npxargs:[-y,modelcontextprotocol/server-filesystem,/data/documents]# 命令执行MCP服务器command-exec:command:npxargs:[-y,modelcontextprotocol/server-command-execution]# 数据库MCP服务器database:command:npxargs:[-y,modelcontextprotocol/server-sqlite,/data/db.sqlite]说明官方MCP服务器都是用Node.js开发的所以需要先安装Node.js和npm。(2) 代码方式importorg.springframework.ai.mcp.client.McpClient;importorg.springframework.ai.mcp.client.StdioMcpClient;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;ConfigurationpublicclassMcpConfig{BeanpublicMcpClientfileSystemMcpClient(){returnStdioMcpClient.builder().command(npx).args(modelcontextprotocol/server-filesystem,/data/documents).build();}}3. 注册MCP工具到ChatClient配置好MCP客户端后只需要将它们注册到ChatClient大模型就可以自动调用所有MCP工具了importorg.springframework.ai.chat.client.ChatClient;importorg.springframework.ai.mcp.client.McpClient;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importjava.util.List;ConfigurationpublicclassChatClientConfig{BeanpublicChatClientchatClient(ChatClient.Builderbuilder,ListMcpClientmcpClients){returnbuilder// 注册所有MCP客户端.tools(mcpClients).build();}}关键观察不需要修改任何业务代码不需要添加任何Tool注解只需要配置MCP服务器大模型就可以自动调用所有工具。这就是MCP的强大之处。4. 测试MCP工具调用启动项目访问以下地址测试文件系统MCP工具http://localhost:8080/agent/chat?message列出/data/documents目录下的所有文件大模型会自动调用文件系统MCP服务器的list_files工具列出指定目录下的所有文件。六、常用官方MCP服务器详解MCP官方提供了多个常用的MCP服务器可以直接使用不需要自己开发。1. 文件系统MCP服务器允许大模型访问和操作本地文件系统。spring:ai:mcp:client:type:SYNCstdio:connections:file-system:command:npxargs:[-y,modelcontextprotocol/server-filesystem,/data/documents]支持的工具list_files列出目录下的文件read_file读取文件内容write_file写入文件内容delete_file删除文件create_directory创建目录2. 命令执行MCP服务器允许大模型执行系统命令。spring:ai:mcp:client:type:SYNCstdio:connections:command-exec:command:npxargs:[-y,modelcontextprotocol/server-command-execution]支持的工具run_command执行系统命令安全警告命令执行MCP服务器非常强大也非常危险。只在开发环境中使用永远不要在生产环境中使用除非你有非常严格的安全控制。3. SQLite数据库MCP服务器允许大模型查询SQLite数据库。spring:ai:mcp:client:type:SYNCstdio:connections:sqlite:command:npxargs:[-y,modelcontextprotocol/server-sqlite,/data/mydb.sqlite]支持的工具query执行SQL查询list_tables列出所有表describe_table查看表结构4. 浏览器MCP服务器允许大模型控制浏览器访问网页和搜索信息。spring:ai:mcp:client:type:SYNCstdio:connections:browser:command:npxargs:[-y,modelcontextprotocol/server-browser]支持的工具navigate导航到指定URLclick点击页面元素type在输入框中输入文本screenshot截取页面截图search使用Google搜索信息七、开发自定义MCP服务器除了使用官方提供的MCP服务器你还可以很方便地开发自己的自定义MCP服务器。1. 使用Java开发MCP服务器Spring AI提供了McpServer注解让你可以用Java快速开发MCP服务器。(1) 添加依赖dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-mcp-server-spring-boot-starter/artifactId/dependency(2) 开发MCP服务器importorg.springframework.ai.mcp.server.annotation.McpServer;importorg.springframework.ai.mcp.server.annotation.McpTool;importorg.springframework.ai.tool.annotation.ToolParam;importorg.springframework.stereotype.Component;ComponentMcpServer(nameweather-mcp-server,description提供天气查询服务的MCP服务器)publicclassWeatherMcpServer{privatefinalWeatherServiceweatherService;publicWeatherMcpServer(WeatherServiceweatherService){this.weatherServiceweatherService;}McpTool(description获取指定城市的实时天气)publicStringgetCurrentWeather(ToolParam(城市名称例如北京、上海)Stringcity){returnweatherService.getCurrentWeather(city);}McpTool(description获取指定城市未来7天的天气预报)publicStringgetWeatherForecast(ToolParam(城市名称例如北京、上海)Stringcity){returnweatherService.getWeatherForecast(city);}}(3) 启动MCP服务器Spring Boot会自动启动MCP服务器并在标准输入输出上监听请求。2. 集成自定义MCP服务器到Spring AI应用开发好自定义MCP服务器后你可以在其他Spring AI应用中集成它spring:ai:mcp:client:type:SYNCstdio:connections:weather:command:javaargs:[-jar,weather-mcp-server.jar]现在任何支持MCP的大模型都可以调用你的天气查询工具了。八、企业级最佳实践1. MCP服务器部署最佳实践独立部署每个MCP服务器独立部署互不干扰容器化使用Docker容器化部署MCP服务器方便管理和扩展负载均衡对于高并发的MCP服务器使用负载均衡器服务发现使用服务注册中心管理MCP服务器实现动态发现2. 安全与权限控制最小权限原则MCP服务器只拥有完成任务所需的最小权限网络隔离将MCP服务器部署在独立的网络区域限制网络访问身份认证为MCP服务器添加身份认证只允许授权的客户端访问审计日志记录所有MCP工具调用的详细日志用于审计和安全分析沙箱环境在沙箱环境中执行危险操作如命令执行和文件操作3. 性能优化缓存缓存工具调用的结果避免重复执行相同的操作异步执行对于耗时较长的工具使用异步执行批量处理支持批量操作减少网络往返超时控制为每个工具调用设置超时时间防止长时间阻塞4. 工具生态建设标准化所有工具都遵循MCP标准确保兼容性文档化为每个工具编写详细的文档说明使用方法和注意事项版本控制对MCP服务器进行版本控制避免破坏性变更测试为每个工具编写单元测试和集成测试确保质量九、常见坑与解决方案1. ❌ MCP服务器启动失败问题MCP服务器无法启动提示command not found解决方案确保已经安装了Node.js和npm确保MCP服务器包已经全局安装npm install -g modelcontextprotocol/server-filesystem检查命令路径是否正确2. ❌ 大模型不调用MCP工具问题大模型不知道有MCP工具或者不知道什么时候调用解决方案检查MCP服务器是否正确配置和启动在系统提示词中明确告诉大模型可以使用哪些工具给大模型提供几个使用工具的示例3. ❌ 工具调用权限不足问题工具执行失败提示权限不足解决方案确保运行MCP服务器的用户拥有足够的权限调整文件和目录的权限使用sudo运行需要更高权限的命令谨慎使用4. ❌ 工具返回结果过长问题工具返回的结果太长超过了大模型的上下文窗口限制解决方案对工具返回的结果进行压缩和摘要分页返回结果使用上下文压缩技术只保留相关信息5. ❌ MCP工具名称冲突问题多个MCP服务器提供了同名的工具导致调用混乱解决方案为工具添加命名空间前缀在配置文件中指定工具的优先级明确告诉大模型应该使用哪个工具十、本章总结与下章预告本章总结MCP协议解决了传统工具调用紧耦合、无法复用、生态碎片化的问题MCP是AI世界的USB接口一次开发到处使用Spring AI 1.0提供了原生的MCP支持配置简单使用方便官方提供了文件系统、命令执行、数据库、浏览器等常用MCP服务器使用Spring AI可以很方便地开发自定义MCP服务器企业级MCP应用必须做好安全控制、性能优化和可观测性预告式提及我们现在已经掌握了工具调用和MCP协议这两个AI Agent的核心基础。下一章我们将学习AI Agent的核心原理与实现看看如何将这些技术整合起来构建一个能够自主思考、规划和执行复杂任务的智能Agent。下章预告下一章我们将学习AI Agent的核心原理与实现。你将学会什么是AI AgentAgent的核心组成部分ReAct框架思考-行动-观察循环Spring AI Agent工作流详解记忆系统短期记忆与长期记忆的实现规划能力让Agent自己分解复杂任务十一、课后练习安装Node.js和npm配置文件系统MCP服务器测试文件读写功能配置浏览器MCP服务器实现让大模型搜索最新新闻的功能开发一个自定义的邮件发送MCP服务器支持发送邮件将你之前开发的所有工具都改造成MCP服务器实现工具的标准化和复用为你的MCP服务器添加安全控制和审计日志功能