十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【MCP协议】Model Context Protocol深度解析——从原理到Spring AI实战

【MCP协议】Model Context Protocol深度解析——从原理到Spring AI实战 【MCP协议】Model Context Protocol深度解析——从原理到Spring AI实战作者Tom·Ge |专栏大模型工程师修炼手记关键词MCP协议、Model Context Protocol、Spring AI、Function Calling、Agent工具调用、大模型工程化难度中级 |阅读时间15分钟前言如果你关注过大模型Agent生态一定听过一个比喻——MCP是AI领域的USB-C接口。2024年11月Anthropic开源了Model Context ProtocolMCP一个旨在标准化LLM与外部工具、数据源通信的开放协议。彼时这个协议并没有立刻引爆社区。然而随着2025年Agent应用的全面爆发MCP迅速从一个好主意变成了事实标准。为什么因为在此之前每一个LLM应用都面临同一个困境当你想调用一个数据库查询、一个文件搜索、一个API接口时你必须为每一个LLM供应商、每一个工具供应商编写专门的集成代码。OpenAI有自己的Function Calling格式Claude有自己的Tool Use格式国产大模型也各有各的schema定义。这种碎片化让Agent开发变成了无尽的适配工作。MCP的出现就像USB-C统一了充电接口一样试图统一Agent与工具之间的通信标准。截至目前MCP生态已经获得了Anthropic Claude、OpenAI GPT、Meta Llama、DeepSeek、阿里通义等主流大模型产品的支持官方规范站点为modelcontextprotocol.io。本文将从MCP协议的设计原理出发深入解析其架构细节并通过Spring AI框架实现完整的MCP Client与Server集成最后给出企业级部署的选型建议与避坑指南。一、MCP是什么——从Function Calling到标准化协议1.1 MCP的定义与设计灵感MCPModel Context Protocol模型上下文协议是由Anthropic于2024年11月开源的标准化协议旨在为大语言模型LLM与外部数据源、工具及服务提供统一的交互接口规范。其当前最新版本为mcp-2025-11-25底层基于JSON-RPC 2.0消息格式。MCP的设计灵感来源于软件开发领域的另一个成功标准——LSPLanguage Server Protocol语言服务器协议。对比维度LSPMCP诞生背景不同IDE对同一语言的代码补全、诊断支持各不相同不同LLM对同一工具的调用方式各不相同核心思路将语言能力从编辑器中解耦由独立的Language Server提供将工具能力从AI应用中解耦由独立的MCP Server提供解决的问题一个语言服务器可对接VS Code、Vim、Emacs等所有编辑器一个工具服务器可对接Claude、GPT、DeepSeek等所有LLM协议价值统一了语言工具生态统一了AI Agent工具生态这个类比的精髓在于LSP让语言工具开发者和IDE开发者解耦MCP让工具开发者和AI应用开发者解耦。一旦工具实现了MCP协议任何兼容MCP的AI应用都能直接调用它无需额外适配。1.2 MCP与Function Calling的核心区别很多同学会将MCP与各大模型厂商提供的Function Calling混淆。虽然它们的目标相似——都是让LLM调用外部工具——但它们的设计哲学和技术层次完全不同。对比维度Function CallingMCPModel Context Protocol协议层级LLM API层厂商私有协议独立通信协议层开放标准通信范围LLM ↔ 应用代码单次请求-响应Host ↔ Client ↔ Server持续会话工具定义各厂商JSON Schema格式不同统一的JSON Schema规范工具发现硬编码在Prompt或API参数中动态发现tools/list能力协商上下文管理由应用层自行管理协议层内置Resources能力多LLM支持每个LLM需单独适配一次实现所有LLM通用传输方式HTTPS API调用STDIO本地进程/ HTTP SSE远程服务状态管理无状态每次调用独立有状态可持续会话扩展能力仅支持工具调用Tool Resource Prompt三大能力一句话总结Function Calling是LLM层面的调用接口MCP是基础设施层面的通信标准。MCP甚至可以在底层使用Function Calling作为调用机制但向上提供了更丰富的能力。1.3 MCP解决的三大痛点痛点一跨平台工具集成在MCP出现之前开发一个Agent应用想要调用天气查询API、文件系统操作、数据库查询等工具你需要 1. 为每个工具编写OpenAI格式的Function定义 2. 再为Claude编写Tool Use定义 3. 再为DeepSeek编写对应的schema 4. 每次有新的LLM供应商加入都要重复以上工作MCP解决这个问题的方式是工具开发者只需实现一次MCP Server所有兼容MCP的LLM应用都能直接使用。痛点二动态上下文管理LLM的上下文窗口是有限的如何在有限的上下文中提供最相关的信息MCP的Resources能力让工具可以动态暴露数据资源应用按需加载而不是将所有数据一次性塞入Prompt。痛点三多LLM供应商切换企业往往不希望绑定单一LLM供应商。MCP让工具层的实现与LLM层完全解耦你可以今天用GPT-4o、明天切换到Claude、后天试用DeepSeek而工具代码无需任何修改。1.4 MCP 2025-11-25版本核心特性当前MCP的最新协议版本为mcp-2025-11-25该版本带来了多项重要增强Elicitation启发式交互新增原语允许Server在工具执行过程中向用户请求额外信息实现更智能的人机协作完善的Progress Notification机制长时间运行的工具操作可以上报进度提升用户体验增强的Resource订阅能力支持Resource变更通知resources/subscribe客户端可实时感知资源变化Tool/Resource/Prompt列表变更通知当Server端的工具、资源或提示词模板发生变更时自动通知客户端Sampling原语增强Server可以请求Client代为调用LLM进行推理实现双向推理协作元数据Meta支持为工具、提示和资源声明附加元数据信息支持更精细的控制完善的OAuth 2.0安全授权机制为企业级部署提供标准化的安全框架二、MCP架构深度解析2.1 Host-Client-Server三方架构MCP采用经典的三方架构设计其核心思想是将关注点清晰地分离到三个独立角色中┌─────────────────────────────────────────────────────────────────┐ │ MCP 三方架构 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Host │◄────►│ Client │◄────►│ Server │ │ │ │ (宿主应用) │ │ (协议客户端)│ │ (工具服务) │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │ │ │ 典型示例: 典型示例: 典型示例: │ │ - Claude Desktop - Spring AI - Weather Server │ │ - VS Code Copilot - MCP Java SDK - Database Server │ │ - IDE插件 - MCP Python SDK - File System MCP │ │ - 自定义AI应用 - MCP TypeScript SDK - GitHub MCP │ │ │ └─────────────────────────────────────────────────────────────────┘各角色的职责如下角色职责类比Host宿主承载LLM的用户应用如Claude Desktop、IDE插件、自定义AI应用。Host负责协调LLM与外部工具的交互是用户直接交互的入口。浏览器Client客户端MCP协议的通信端由Host管理。Client与Server建立1:1连接维护会话状态负责发送请求和接收响应。一个Host可以管理多个Client。浏览器中的TabServer服务器提供具体工具能力的服务端如天气服务、数据库查询、文件系统操作等。Server通过MCP协议暴露其能力。一个Server可被多个Client连接。Web服务器关键设计原则 - Host与Server之间不直接通信所有通信通过Client中转 - 一个Host可以管理多个Client连接到不同的MCP Server - 一个Server可以接受多个Client的连接 - Client与Server之间通过JSON-RPC 2.0进行消息交换2.2 三大核心能力MCP协议定义了三种核心能力原语Primitives每一种都服务于不同的使用场景(1) Tools工具工具是MCP最核心的能力对应LLM的Function Calling场景。Tool是可调用的函数或方法由Server端定义Client端发现并调用。Server端定义: ┌────────────────────────────────────────┐ │ McpTool(namegetWeather) │ │ public String getWeather(String city) │ │ → 晴天, 25°C │ └────────────────────────────────────────┘ │ ▼ MCP协议 Client端调用: ┌────────────────────────────────────────┐ │ client.callTool(getWeather, │ │ {city: 上海}) │ │ → 返回: 晴天, 25°C │ └────────────────────────────────────────┘典型场景天气查询、数据库CRUD、API调用、计算操作、文件操作等。(2) Resources资源Resource是MCP中经常被忽视但极其重要的能力。Resource是Server管理的、可通过URI寻址的数据资源。与Tool不同Resource主要用于数据读取而非操作执行。Server端定义: ┌────────────────────────────────────────┐ │ McpResource(uriconfig://{key}) │ │ public String getConfig(String key) │ └────────────────────────────────────────┘ │ ▼ MCP协议 Client端读取: ┌────────────────────────────────────────┐ │ client.readResource(config://apiKey)│ │ → 返回: sk-xxx... │ └────────────────────────────────────────┘典型场景配置管理、知识库文档、系统状态数据、业务规则等。(3) Prompts提示词模板Prompt能力是MCP的独特创新。它允许Server端维护一套可参数化的提示词模板Client端按需获取和使用。Server端定义: ┌────────────────────────────────────────┐ │ McpPrompt(namecodeReview, │ │ description代码审查提示词) │ │ public GetPromptResult review( │ │ McpArg(language) String lang) │ └────────────────────────────────────────┘ │ ▼ MCP协议 Client端获取: ┌────────────────────────────────────────┐ │ client.getPrompt(codeReview, │ │ {language: Java}) │ │ → 返回完整提示词文本 │ └────────────────────────────────────────┘典型场景角色系统提示词库、工作流模板、多语言Prompt管理。2.3 传输协议STDIO vs HTTP SSEMCP定义了两种传输机制各有适用场景对比维度STDIO标准输入输出HTTP SSEServer-Sent Events通信方式进程间通信stdin/stdoutHTTP长连接SSE推送部署模式本地进程启动子进程远程服务部署适用场景本地开发、桌面应用、IDE插件分布式部署、微服务架构、云端连接特性进程级生命周期绑定网络级生命周期支持重连扩展性受限于单机可水平扩展、负载均衡安全性依赖操作系统进程隔离需要网络层安全TLS/OAuth2性能低延迟无网络开销网络延迟但支持远程典型使用Claude Desktop连接本地MCP ServerSpring AI微服务连接远程MCP Server选型建议 -本地开发/调试STDIO简单直接零网络配置 -生产环境/分布式部署HTTP SSE支持网络传输和远程部署 -IDE插件通常用STDIO因为IDE本身就在本地运行2.4 工作流程详解一次完整的MCP工具调用流程包含以下8个步骤步骤1: 初始化 Host启动 → Host创建Client实例 → Client向Server发送initialize请求 步骤2: 能力协商 Server返回自身支持的协议版本、能力tools/list、resources/read等 Client与Server协商确定最终使用的协议版本和功能集 步骤3: 会话建立 Client发送initialized通知正式建立会话 步骤4: 能力发现 Client发送tools/list请求 → Server返回可用工具列表名称、描述、参数Schema Client发送resources/list请求 → Server返回可用资源列表URI模板、名称、MIME类型 步骤5: 用户请求 用户在Host中发起自然语言请求如帮我查一下上海今天的天气 步骤6: LLM推理 Host将用户请求 已发现的工具列表发送给LLM LLM根据工具描述和参数Schema决定调用哪个工具、传入什么参数 步骤7: 工具调用 Host通过Client发送tools/call请求到Server Server执行对应的工具方法返回结果 Host将工具结果反馈给LLM 步骤8: 响应生成 LLM基于工具返回结果生成最终的自然语言响应 Host将响应展示给用户这个流程的关键价值在于步骤4的能力发现工具列表和Schema是动态获取的而不是硬编码的。这意味着Server端的变更新增工具、修改参数可以自动反映到Client端无需重新部署。三、Spring AI MCP集成实战Spring AI从1.0.0 GA版本开始正式支持MCP当前稳定版为1.0.3。而1.1.0-M3版本引入了MCP Annotations模块的重大更新彻底改变了MCP Server的开发体验。3.1 Spring Boot Starter清单和选型Spring AI为MCP提供了多个Starter选型取决于你的应用场景Starter传输方式类型适用场景spring-ai-starter-mcp-clientSTDIO/SSE同步Client同步调用的MCP客户端应用spring-ai-starter-mcp-client-webfluxSSE响应式ClientWebFlux响应式架构的客户端spring-ai-starter-mcp-serverSTDIOServer本地部署的同步MCP服务器spring-ai-starter-mcp-server-webfluxSSEServerWebFlux响应式架构的MCP服务器spring-ai-starter-mcp-server-webmvcSSEServerWebMVC Servlet架构的MCP服务器版本管理使用Spring AI BOM统一管理版本dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version1.0.3/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement3.2 MCP Client端配置示例以下是一个完整的Spring AI MCP Client配置连接到远程MCP ServerHTTP SSE方式Maven依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-client/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependencyapplication.yml配置spring: ai: mcp: client: # HTTP SSE方式连接远程MCP Server sse: connections: weather-server: url: http://localhost:8081/mcp db-server: url: http://localhost:8082/mcp # 也可同时使用STDIO方式连接本地MCP Server stdio: connections: local-tools: command: java args: - -jar - local-mcp-server.jarChatClient集成示例RestController public class McpClientController { private final ChatClient chatClient; private final ToolCallbackProvider toolCallbackProvider; public McpClientController(ChatClient.Builder chatClientBuilder, ToolCallbackProvider toolCallbackProvider) { this.chatClient chatClientBuilder.build(); this.toolCallbackProvider toolCallbackProvider; } GetMapping(/chat) public String chat(RequestParam String message) { return chatClient .prompt() .user(message) .toolCallbacks(toolCallbackProvider.getToolCallbacks()) .call() .content(); } }手动调用MCP Server的Resource和Prompt能力RestController public class McpCapabilityController { Autowired private ListMcpSyncClient mcpSyncClients; // 手动读取Resource GetMapping(/mcpResource) public String readResource(RequestParam String uri) { McpSyncClient client mcpSyncClients.get(0); McpSchema.ReadResourceRequest request new McpSchema.ReadResourceRequest(uri); McpSchema.ReadResourceResult result client.readResource(request); return ((McpSchema.TextResourceContents) result.contents().get(0)).text(); } // 手动获取Prompt GetMapping(/mcpPrompt) public String getPrompt(RequestParam String name, RequestParam(required false) String arg) { McpSyncClient client mcpSyncClients.get(0); MapString, String args arg ! null ? Map.of(name, arg) : Map.of(); McpSchema.GetPromptRequest request new McpSchema.GetPromptRequest(name, args, null); McpSchema.GetPromptResult result client.getPrompt(request); return ((McpSchema.TextContent) result.messages().get(0).content()).text(); } }3.3 MCP Server端实现MCP Annotations声明式注解方式Spring AI 1.1.0-M3引入的MCP Annotations模块是本次最大的更新。它提供了一套声明式注解编程模型开发者无需手动处理JSON-RPC消息解析只需在Java方法上标注注解即可暴露MCP能力。Maven依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server-webmvc/artifactId /dependencyapplication.yml配置server: port: 8081 spring: ai: mcp: server: name: weather-mcp-server version: 1.0.0 # 启用注解扫描默认开启 annotation-scanner: enabled: true完整的MCP Server实现Service public class WeatherMcpServer { // McpTool暴露可调用的工具 McpTool(name getWeather, description 获取指定城市的实时天气信息) public String getWeather( McpToolParam(description 城市名称, required true) String cityName) { // 模拟天气查询逻辑 MapString, String weatherData Map.of( 上海, 晴天, 气温25°C, 湿度65%, 北京, 多云, 气温22°C, 湿度40%, 深圳, 阵雨, 气温28°C, 湿度85% ); return weatherData.getOrDefault(cityName, 暂无该城市天气数据); } McpTool(name getWeatherForecast, description 获取指定城市未来3天的天气预报) public String getWeatherForecast( McpToolParam(description 城市名称, required true) String cityName, McpToolParam(description 预报天数(1-7), required false) Integer days) { int forecastDays days ! null ? days : 3; return String.format(%s未来%d天天气预报: 晴转多云, 气温20-28°C, cityName, forecastDays); } // McpResource暴露可读取的资源 McpResource(uri weather://config/{key}, name weather-configuration, description 天气服务配置资源) public String getWeatherConfig(String key) { MapString, String configs Map.of( defaultCity, 上海, updateInterval, 30min, dataSource, ChinaMeteorologicalAPI ); return configs.getOrDefault(key, 配置项不存在: key); } // McpPrompt暴露可参数化的提示词模板 McpPrompt(name weather-analysis, description 天气数据分析提示词模板用于引导LLM分析天气数据) public McpSchema.GetPromptResult weatherAnalysisPrompt( McpArg(name city, description 要分析的城市) String city) { String systemPrompt String.format( 你是一位专业的气象分析师。请根据%s的天气数据 提供以下分析\n 1. 当前天气状况描述\n 2. 未来3天趋势分析\n 3. 出行建议\n 4. 注意事项如极端天气预警, city ); return new McpSchema.GetPromptResult( WeatherAnalysis, List.of(new McpSchema.PromptMessage( McpSchema.Role.ASSISTANT, new McpSchema.TextContent(systemPrompt) )) ); } McpPrompt(name weather-report, description 生成天气报告的提示词模板) public McpSchema.GetPromptResult weatherReportPrompt( McpArg(name format, description 报告格式: brief/detail) String format, McpArg(name language, description 语言: zh/en) String language) { String detailLevel detail.equals(format) ? 详细 : 简要; String lang en.equals(language) ? English : 中文; String prompt String.format( 请用%s生成一份%s的天气报告。包括温度、湿度、 风力、能见度等关键指标。, lang, detailLevel ); return new McpSchema.GetPromptResult( WeatherReport, List.of(new McpSchema.PromptMessage( McpSchema.Role.USER, new McpSchema.TextContent(prompt) )) ); } }3.4 1.1.0-M3的重大更新详解Spring AI 1.1.0-M3版本的MCP Annotations更新是一个分水岭式的进步主要体现在以下几个方面服务端注解体系注解功能说明McpTool定义MCP工具支持自动JSON Schema生成、进度追踪、请求上下文访问McpToolParam定义工具参数声明参数描述、是否必填、默认值McpResource定义MCP资源通过URI模板暴露资源支持MIME类型配置McpPrompt定义MCP提示词模板支持参数化模板生成McpArg定义Prompt参数声明提示词模板的输入参数McpComplete自动补全功能为提示参数或资源URI提供自动补全客户端注解体系注解功能McpLogging处理Server端的日志消息通知McpSampling处理Server端的LLM采样请求McpElicitation处理Server端的启发式信息收集请求McpProgress处理长时间运行操作的进度通知McpToolListChanged处理工具列表变更通知McpResourceListChanged处理资源列表变更通知McpPromptListChanged处理提示词列表变更通知特殊参数类型参数类型说明McpSyncRequestContext同步请求上下文提供对日志、进度、采样等能力的统一访问McpAsyncRequestContext异步响应式请求上下文返回Mono类型McpTransportContext无状态操作时的轻量级传输上下文McpProgressToken标记参数以接收请求中的进度令牌McpMeta访问MCP请求、通知和结果中的元数据这些注解的核心价值在于将底层JSON-RPC消息的解析、路由、序列化完全封装在框架内部开发者只需要关注业务逻辑本身。一个完整的MCP Server本质上就是一组标注了特定注解的Spring Bean。四、MCP vs Function Calling选型指南在实际项目中是使用传统的Function Calling还是采用MCP这个选择取决于你的具体场景。下面提供一个实用的决策框架。4.1 选型决策树你的AI应用是否需要连接多个外部工具/数据源? ├── 否 → 只需单次调用简单API │ └── 使用 Function Calling足够简单无需额外复杂度 │ └── 是 → 需要集成多个工具 │ ├── 工具是否需要被多个不同的LLM应用复用? │ ├── 否 → 仅单一LLM、单一应用使用 │ │ └── 是否需要动态发现工具能力? │ │ ├── 否 → 工具列表固定 │ │ │ └── 使用 Function Calling │ │ └── 是 → 工具可能动态增减 │ │ └── 使用 MCP优势动态能力发现 │ │ │ └── 是 → 需要跨应用、跨LLM复用 │ └── 使用 MCP核心优势一次实现到处使用 │ ├── 是否需要向LLM提供动态上下文数据而不仅是函数调用? │ ├── 是 → 使用 MCP Resources │ └── 否 → 两者均可 │ └── 是否需要集中管理提示词模板? ├── 是 → 使用 MCP Prompts └── 否 → 两者均可4.2 六种典型场景的推荐方案场景推荐方案理由场景1个人项目/快速原型Function Calling开发速度快无需引入额外架构复杂度。单个函数定义即可完成工具集成场景2企业内部Agent平台MCPSTDIO工具可被多部门、多应用复用。STDIO部署简单适合内网环境场景3多租户SaaS平台MCPHTTP SSE需要远程部署、水平扩展。SSE传输支持网络隔离和负载均衡场景4IDE/编辑器AI助手MCPSTDIOIDE插件通常在本地运行STDIO的进程间通信延迟最低场景5微服务架构的AI中台MCPHTTP SSE Gateway微服务间通过SSE通信MCP Gateway提供统一入口和治理能力场景6跨团队工具共享平台MCP 统一工具注册中心各团队独立开发MCP Server通过注册中心统一管理和发现核心决策原则只服务于单一LLM、工具数量少且固定→ Function Calling需要工具复用、动态发现、多LLM支持→ MCP本地部署优先STDIO远程部署优先HTTP SSE五、企业级部署避坑指南将MCP从Demo推向生产环境有几个关键问题需要提前规划。5.1 安全边界与OAuth2授权MCP协议本身不处理安全问题协议层只负责通信但mcp-2025-11-25版本已经引入了基于OAuth 2.0的安全授权框架。企业级部署时需要关注身份认证# MCP Client端OAuth2配置示例 spring: ai: mcp: client: sse: connections: secure-server: url: https://mcp-server.internal:8443/mcp oauth: client-id: my-app client-secret: ${OAUTH_SECRET} token-uri: https://auth.internal/oauth/token scopes: - mcp:tools:read - mcp:resources:read安全实践清单安全维度建议传输安全生产环境必须使用HTTPS TLS 1.2禁用HTTP明文传输身份认证基于OAuth2.0的Client Credentials或Authorization Code流程权限控制按Tool/Resource粒度进行权限隔离不同角色可调用不同工具输入验证Server端对所有入参进行严格校验防止Prompt注入审计日志记录所有工具调用请求调用者、参数、时间、结果网络隔离MCP Server部署在内网通过API Gateway暴露给外部5.2 生产环境需补充的协议原语MCP协议当前版本在设计上侧重于能力声明与调用但在企业级生产环境中开发者通常需要自行补充以下能力(1) 幂等性保障MCP的tools/call请求天然不保证幂等性重复调用可能产生副作用。对于涉及写操作的工具建议McpTool(name createOrder, description 创建订单) public String createOrder( McpToolParam(description 订单ID客户端生成用于幂等) String idempotencyKey, McpToolParam(description 商品ID) String productId, McpToolParam(description 数量) int quantity) { // 基于幂等键检查是否已处理过该请求 if (orderRepository.existsByIdempotencyKey(idempotencyKey)) { return 订单已存在返回已有结果: idempotencyKey; } // 执行业务逻辑... return 订单创建成功: orderId; }(2) 事务一致性涉及多步操作的工具需要考虑事务问题。建议在MCP Server内部使用Spring的Transactional管理事务边界而不是将事务暴露到协议层。(3) 流量控制生产环境必须对MCP Server实施流量保护// 使用Resilience4j进行限流保护 McpTool(name queryDatabase, description 数据库查询) RateLimiter(name dbQueryLimiter, fallbackMethod queryFallback) public String queryDatabase(McpToolParam(description SQL查询) String sql) { // 数据库查询逻辑... return results; } public String queryFallback(String sql, Exception e) { return 当前查询繁忙请稍后重试; }# Resilience4j限流配置 resilience4j: ratelimiter: instances: dbQueryLimiter: limitForPeriod: 10 limitRefreshPeriod: 1s timeoutDuration: 0s5.3 MCP Gateway统一网关模式在企业级部署中当存在大量MCP Server时一个统一的MCP Gateway模式可以显著简化管理和安全治理┌─────────────────────────────────────────────────────────────────┐ │ 企业级MCP Gateway架构 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────┐ ┌──────────────────────────┐ │ │ │ Host App │────►│ MCP Gateway │ │ │ │ (LLM) │ │ - 统一认证/授权 │ │ │ └──────────┘ │ - 流量控制/限流 │ │ │ ▲ │ - 审计日志 │ │ │ ┌──────────┐ │ - 协议转换(REST→MCP) │ │ │ │ IDE插件 │────►│ - 路由分发 │ │ │ └──────────┘ │ - 灰度发布 │ │ │ ▲ └──────────┬───────────────┘ │ │ ┌──────────┐ │ │ │ │ 移动端 │────────────────┤ │ │ └──────────┘ ▼ │ │ ┌──────────────────┐ │ │ │ Tool Registry │ │ │ │ (工具注册中心) │ │ │ └────────┬─────────┘ │ │ │ │ │ ┌──────────────┼──────────────┐ │ │ ▼ ▼ ▼ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │Weather │ │ Database │ │ File │ │ │ │Server │ │ Server │ │ System │ │ │ └──────────┘ └──────────┘ │ Server │ │ │ └──────────┘ │ └─────────────────────────────────────────────────────────────────┘Gateway的核心职责职责说明统一入口所有Host应用通过Gateway连接MCP Server无需知道Server的具体地址安全代理Gateway集中处理OAuth2认证、权限校验Server端无需重复实现流量治理限流、熔断、降级、超时控制保护后端MCP Server不被打垮协议转换将企业已有的REST/HTTP服务无缝转换为MCP协议无需改造工具注册中心动态管理所有可用工具的注册、发现、版本管理可观测性统一的指标监控、调用链追踪、审计日志总结MCP协议正在快速演进为AI Agent工具调用的基础设施标准。从2024年11月Anthropic开源至今短短时间内就已经获得了几乎所有主流大模型厂商的采纳这在AI协议生态中是极其罕见的。MCP的未来趋势协议层的持续增强从当前的工具调用向更复杂的Agent协作、多Agent编排、工作流标准化方向演进生态工具爆发类似npm生态MCP Server的注册中心和工具市场将快速涌现框架层全面集成除了Spring AILangChain、Semantic Kernel等主流AI框架都已或即将提供MCP支持企业级治理成熟MCP Gateway、安全授权、流量治理等企业级需求将有标准化解决方案对于Java开发者而言Spring AI 1.0.0已经提供了完善的MCP支持1.1.0-M3的Annotations模块更是将MCP Server的开发体验提升到了Spring Boot级别的简洁度。现在是学习MCP、构建MCP工具生态的最佳时机。关于作者Tom·GeCSDN技术博主专注大模型工程化落地。更多深度内容欢迎订阅我的付费专栏大模型工程师修炼手记—— 从Prompt Engineering到Agent编排从RAG架构到模型微调系统构建大模型工程师的核心能力体系。专栏持续更新中已发布XX篇深度文章涵盖Spring AI实战、Agent架构设计、大模型选型指南等热门主题。下期预告《Spring AI 1.1.0新特性解读MCP Annotations带来的声明式Agent开发革命》
返回列表