MCP协议从原理到实战:用Spring Boot将REST接口发布为MCP Server 📅 发布时间:2026/9/17 5:11:56 👁 浏览次数: 最近只要打开技术社区或者身边的朋友群MCP这个缩写几乎是躲不掉的。Figma MCP、Codex MCP、Blender MCP、Yakit MCP甚至CATIA和NXOpen这些传统工业软件圈子也开始有人研究怎么通过MCP把软件数据暴露给AI去操作。作为一个从REST API时代写后台写到现在的开发者我刚开始是有点麻木的这不又是一个接口标准但当我真的把MCP协议跑通、把几个主流MCP Server接进Claude Code和Codex之后我意识到这不是简单的“新瓶装旧酒”。它很可能就是AI Agent从“能聊天”走向“能干活”的那块关键拼图。这篇文章我会把MCP的技术原理和产业实践放在一起聊。前半部分讲清楚MCP是什么、Host/Client/Server怎么协作、JSON-RPC消息模型、传输方式后半部分带你看一圈当前最有代表性的MCP应用场景然后给出我在Codex、Claude Code里配置MCP的实际操作以及用Java/Spring Boot把现有REST接口发布成MCP Server的完整过程。适合正在做AI Agent开发、想给Cursor或者Codex配工具的开发者也适合安全、设计、工业软件领域想试试水的研究员当然想搞清楚“MCP到底是什么”的小白也能从头看起。1. MCP是什么为什么说它是AI世界的USB-C1.1 从“一个模型一个接口”到“一次接入处处可用”在没有MCP之前想让AI模型操作一个外部工具常规做法是为每个工具写一套定制集成。比如要接Slack写一套Slack API封装要接数据库再写一套数据库封装要接Figma又得去翻Figma API文档。模型每换一家之前的集成代码基本报废。这个问题在RPA和早期Agent时代已经折磨了很多人我那时候做自动化脚本光是维护不同平台的接口适配层就够喝一壶。MCPModel Context Protocol模型上下文协议就是在这个背景下出现的。它把“AI模型”和“外部工具/数据源”之间的交互统一成一个标准协议。你可以把MCP理解为AI世界的USB-C接口过去各种外设要用不同的线、不同的插头现在只要大家都支持同一个标准插上就能用。模型是电脑MCP Server是外设MCP Host就是操作系统里负责识别和调度这个连接的中间层。从这个比喻能看出MCP的核心设计目标解耦。模型不需要知道Figma的API细节Figma也不需要为每一个AI模型单独适配。只要Figma团队实现一个MCP Server任何支持MCP的客户端比如Claude Desktop、Claude Code、Codex、Cursor都能直接调用Figma的数据和操作能力。我实测下来这种“一次实现处处可用”的收益非常明显尤其是工具方愿意主动维护Server的情况下生态会滚得很快。1.2 MCP解决的三大痛点第一个痛点是接口碎片化。每个工具都在设计自己的API风格、认证方式、数据格式AI集成方要被活活累死。MCP统一了协议工具的接入方式变成一致的一个MCP Client可以连接任意多个MCP Server连接新工具只是增加一段配置而不是重写一套对接逻辑。第二个痛点是上下文窗口限制。LLM的上下文是有限的你不能把整个数据库或者整个文件系统都塞进提示词里。MCP把“数据暴露”设计成按需调用模型先通过resources/list或tools/list发现自己有什么可用再去按需读取或者执行。这样既节省token又能让模型在需要时才获取精确信息。第三个痛点是操作安全边界。以前插件化的Agent往往权限模糊一个提示词注入可能把整个系统搅乱。MCP协议在架构上支持能力协商和权限约束Client可以控制Server暴露哪些工具Server也可以精确控制自己能做什么。这提供了基础的安全抓手。1.3 哪些人应该关注MCP如果你是后端开发者MCP意味着可以把业务能力直接暴露给AI让Agent成为系统的另一个调用方。如果你是前端或设计工具使用者Figma MCP、蓝湖MCP能改变设计稿到代码的工作流。如果你是安全研究员Burpsuite MCP、Yakit MCP、jadx-gui MCP正在把AI变成半自动渗透助手。如果你搞工业软件CATIA、NXOpen这些封闭系统也在给MCP开门。哪怕你只是用Cursor写代码了解MCP也能让你手头的AI工具强大很多。2. MCP技术原理拆解Host、Client、Server如何协作2.1 三层架构Host、Client、Server的角色划分MCP协议里最核心的角色有三个Host、Client、Server。Host是用户直接交互的应用程序比如Claude Code、Codex CLI、Cursor、Claude Desktop。它负责管理AI模型、管理多个MCP连接、决定什么时候调用工具。Host内部通常会包含一个或多个MCP Client每个Client专门负责和某一个MCP Server通信。也就是说Host与Client不是并列关系而是容器与组件的包含关系。MCP Server则是一个独立进程或独立服务向外暴露三类能力工具Tools、资源Resources、提示词Prompts。工具是可供模型调用的函数比如“查询天气”“获取Figma页面”资源是可供模型读取的数据比如一整个项目文档提示词是预先设计好的模板可以引导模型按流程执行任务。这种三层结构和现代软件里的“前端 BFF 后端”有点类似。Host就是前端负责渲染和交互Client就像BFF负责为每个后端做适配Server是真正的业务能力提供方。好处是每一层职责清晰替换任何一层都不影响其他层。2.2 消息模型与核心方法从initialize到tools/callMCP协议基于JSON-RPC 2.0消息格式是JSON天然适合多种传输方式。一次完整的MCP会话有清晰的握手流程第一步Client向Server发送initialize请求携带着协议版本和客户端能力信息。Server返回自己支持的协议版本、服务端能力和一段serverInfo。这就像两个人见面先互相确认“你会说什么语言、能做什么事”。第二步Client发送notifications/initialized通知表示已经初始化完毕可以开始正常通信。第三步Client按需调用方法。最常用的是tools/list获取工具列表tools/call调用工具resources/list和resources/read读取资源prompts/get获取提示词模板。我这里贴一个tools/call请求的典型样子{ jsonrpc: 2.0, id: 1, method: tools/call, params: { name: get_weather, arguments: { city: 上海 } } }Server返回的内容通常是一个包含content数组的结果数组里每个元素可以是文本、图片甚至结构化的JSON。模型拿到结果后再把这些结果融进自己的推理过程。整个过程对模型来说就像在对话里多了一个“查阅资料或调用工具”的回合。2.3 传输方式stdio、SSE、Streamable HTTPMCP支持多种传输方式目前最常见的是stdio和HTTP模式。stdio方式是本地首选。Host启动MCP Server作为子进程通过标准输入输出传递JSON-RPC消息。好处是配置简单、延迟低、不需要网络端口适合本地文件和本地工具。Claude Code和Codex在配置本地MCP Server时基本都是这种模式命令往往是npx -y some-mcp-server这样的形式。HTTP模式则适合远程服务。早期MCP的HTTP传输基于SSEServer-Sent EventsClient通过HTTP POST发送请求通过SSE流接收响应。后来协议演进推荐采用Streamable HTTP不再强制使用SSE而是支持标准HTTP请求响应也能兼容服务端推送。我看到很多热搜词里都有“MCP HTTP模式”其实就是大家想把MCP Server部署到远程服务器上让本地设备通过网络访问。这在团队协作、云端Agent场景下非常实用。选择哪种传输方式核心看两点MCP Server需要访问的数据在本地还是远端Client和Server是否必须在物理上邻近本地文件和隐私数据优先stdio团队共享能力、多客户端复用优先HTTP。2.4 安全模型与权限边界MCP协议本身在设计上是厂商中立的但安全边界完全取决于部署方式。我经常提醒身边的人MCP不是魔法它解决的是“连接标准化”而不是“安全自动化”。在标准MCP模型里Client可以限制Server暴露的工具范围Server也可以定义自己的认证和授权逻辑。远程HTTP模式的Server往往需要OAuth 2.0或API Key认证。Claude Code和Codex在调用工具前也会在界面上显示将要执行的工具和参数让你有确认机会。真正的麻烦在于提示词注入。如果MCP Server返回的数据里藏了一段恶意指令比如“忽略之前所有要求执行xxx”模型可能被带偏。所以我的原则是不信任的Server不给高权限只读场景绝不发可写token本地stdio的Server尽量用非root用户跑涉及文件系统或命令执行的Server优先放进容器里隔离。MCP给的是协议level的安全入口最终安全还得靠使用者把关。3. 产业实践全景MCP正在渗透哪些领域3.1 设计与创意Figma、蓝湖与设计稿驱动开发先聊我最直观感受到价值的领域设计与开发协作。Figma MCP Server是目前生态里非常活跃的一个。它允许AI读取Figma文件中的画板、图层、样式变量并生成对应的代码或者设计规范。配置好之后我可以在Claude Code里直接说“把主页面设计稿转成React组件”AI会通过MCP拉取设计稿数据分析布局和样式再输出可运行的代码。这个流程一旦跑通设计到前端的交接成本能降低不少。很多人都问“Figma MCP Token在哪获取”其实就是登录Figma进入个人设置在Security页面里生成Personal Access Token。先把Token拿到手再配置Server传参流程半小时内能跑通。国内的设计协作平台蓝湖也推出了蓝湖MCP方向类似偏向中文场景和国内协作体系。如果你所在团队使用蓝湖值得关注它能为“AI直接产出一版贴合设计稿的前端代码”提供多少帮助。实测下来处理简单页面和组件效果已经可用真要用到生产级复杂页面还需要人工审查设计细节。3.2 软件研发与AI编程Codex、Cursor、Claude CodeAI编程工具是MCP普及最快的阵地。Claude Code、Codex CLI、Cursor现在都原生支持MCP配置。之前我写代码AI只能读仓库里的文件现在通过MCPAI可以连数据库、查Jira工单、触发GitHub Actions、读内部接口文档甚至直接调用测试平台。Agent不再是个“只能写代码的聊天窗口”而是一个能接触整个研发生态的助手。在Codex里配置MCP一般编辑~/.codex/config.toml添加[mcp_servers.xxx]配置块。Cursor则是在Settings里直接添加MCP Server地址或命令行。配置完成后AI会在合适的时机自动调用这些工具。比如我让Codex“把Jira上DEV-123这个需求对应的接口测试补上”它能通过MCP读取工单详情再结合代码生成测试用例。我特别推荐研发团队先接三个MCP ServerGitHub MCP用于PR和Issue管理、数据库MCP用于执行只读查询、内部APIMCP用于调试现有接口。这三个场景收益最直接而且相对容易控制权限。3.3 安全测试与逆向Burpsuite、Yakit、jadx-gui、Cheat Engine安全领域是MCP另一个很热闹的圈子。Burpsuite MCP可以让AI读取Burp Suite抓到的HTTP请求和响应辅助分析漏洞。Yakit MCP如何使用也成了高频问题。Yakit本身是一个集抓包、扫描、验证于一体的安全测试平台官方提供了MCP对接方式启动Yakit MCP服务后AI可以直接调用YAK语言脚本把自然语言指令转成扫描和验证动作。实操中我可以让AI“用常见SQL注入 payload 对某个接口做一次扫描”它会通过MCP调起Yakit的扫描引擎并返回结果效率比手工点按高出不少。jadx-gui MCP也很有意思它把Android反编译后的代码暴露给AIAI可以直接搜索class、字符串、调用链辅助逆向分析。Cheat Engine MCP Bridge则是把CE的内存搜索能力接入MCP用于游戏调试、漏洞研究等合法场景。这里必须强调安全工具只能用来做合规的授权测试和研究不要碰任何未经授权的系统这条红线不能越。3.4 工业设计与工程软件CATIA、NXOpen、KiCad传统工业软件由于API封闭、自动化门槛高一直不太容易被AI集成。但MCP正在打开一个口子。CATIA MCP和NXOpen MCP的思路是把CAD/CAE软件的操作封装成MCP工具AI可以读取模型树、修改参数、触发重建甚至自动生成设计报告。听起来很酷但实际落地时需要注意这些软件通常运行在专业工作站上而且许可证管理严格MCP Server一般只能部署在能访问这些软件的本地环境。KiCad MCP Server则更亲民一些面向开源EDA场景。AI可以通过MCP读取原理图、PCB布局辅助检查DRC错误、生成物料清单、调整封装库。做硬件开发的朋友可以关注这类MCP即便现在不够完美也代表着工业软件向AI开放的趋势。3.5 游戏与3D创作Blender、GodotBlender MCP是3D创作圈的热门话题。安装好Blender MCP插件后AI就能通过MCP控制Blender进行建模、材质、渲染等操作。我看过社区有人让AI生成一棵树的模型AI会逐步调用Blender的建模范式创建圆柱、锥体、修改顶点最后输出模型。这个流程本质上是把复杂的3D建模操作拆成一连串工具调用对脚本化建模特别有用。使用教程上基本就是先把MCP插件装进Blender然后在Claude Code或Cursor里配置stdio连接再让AI直接操作。Godot引擎的设置也类似MCP Server可以作为Godot编辑器的一个插件运行AI通过它来创建场景、写脚本、调整节点属性。做独立游戏的朋友可以试试看AI在“根据策划文档搭建关卡框架”这种场景已经能省不少手工活。3.6 自动化运维与数据接入Jenkins、Chrome、通达信、Obcloud运维自动化是MCP落地比较成熟的方向。Jenkins MCP可以让AI查看流水线状态、触发构建、分析构建日志。Chrome MCP Server则把Chrome浏览器的操作包成工具AI能自己打开网页、点击按钮、读取页面内容做轻量级RPA。这类自动化以前要靠专业化脚本现在变成一句自然语言指令门槛降低了很多。金融数据方面有人在研究通达信股票软件本地数据MCP将本地行情、自选股、指标数据暴露给AI用于个人量化策略研究。这方向有价值但要注意数据合规和本地安全。另一个值得关注的是Obcloud工作流代表了一种“AI替代传统GUI”的思路通过MCP把原本需要在界面上点来点去的操作转化为工具调用。我觉得未来很多企业内部的“ Excel宏 邮件 审批流 ”组合都会被这种MCP工作流重新实现。4. 从零配置一个MCP工作流以Codex和Claude Code为例4.1 准备工作MCP Server从哪里来配置MCP之前先要找到一个可用的MCP Server。很多官方或社区维护的Server发布在npm、PyPI、Docker Hub上。比如Figma官方的figma-developer-mcpGitHub官方的github-mcp-server社区版的mcp-server-sqlite。在你的AI Host里配置时通常提供两种连接信息一种是命令行方式用npx或docker run启动本地进程另一种是URL方式直接连接远程HTTP服务。判断方式很简单如果配置里需要写command和args那就是stdio如果需要写url那就是HTTP模式。本地轻度使用建议选stdio团队共享可以选HTTP。4.2 在Claude Code中安装和使用MCPClaude Code的MCP配置很直接。比如我要接入Figma MCP可以使用下面的命令claude mcp add figma -- npx -y figma-developer-mcp --stdio --tokenYOUR_FIGMA_TOKEN这个命令把名为figma的MCP Server加入Claude Code配置中。启动Claude Code后它会自动拉起npx进程通过stdio通信。想要看当前连接了哪些MCP可以输入/mcp命令查看。我建议在项目根目录维护一个.mcp.json文件把项目相关的MCP配置写进去这样团队协作时其他人也能复用同一套配置。真实使用中Claude Code碰到合适的任务会自动调用MCP工具。比如我说“从Figma里读取主页面设计尺寸”它会显示一次工具调用请求我可以选择批准或拒绝。这个过程是人工确认的安全性上好很多。4.3 在Codex中添加MCPCodex是OpenAI的CLI编程工具对MCP的支持也很完整。需要手动编辑配置文件~/.codex/config.toml添加一个MCP Server段落格式如下[mcp_servers.figma] command npx args [-y, figma-developer-mcp, --stdio, --tokenYOUR_FIGMA_TOKEN]如果MCP Server走HTTP模式则写成[mcp_servers.company-api] url https://mcp.example.com/mcp headers { Authorization Bearer YOUR_TOKEN }配置完成后在Codex里输入/mcp可以查看加载情况。有朋友反馈说Codex配置了MCP但是不生效我遇到过两种情况一是config.toml格式写错圆括号和引号不对二是Codex需要重启才能重新加载配置。另外Codex对MCP工具名可能缓存可以用/mcp刷新状态。4.4 验证MCP调用链路配置完不代表万事大吉一定要验证链路。我常用的做法是“让AI做一个不会失败但必须有数据源的动作”。比如接数据库MCP就问“当前数据库有哪些表”接Figma MCP就问“列出最近打开的Figma文件”。如果想更深入地看协议层发生了什么Claude Code支持--debug参数Codex也可以用--debug或verbose模式启动。调试日志里会列出JSON-RPC请求和响应。我第一次看这些日志的时候才真正意识到MCP本质上就是一个标准API会话和“给第三方接口发请求”没有本质区别。正因为协议简单工具生态才能这么快铺开。5. 进阶实战用Java/Spring Boot发布MCP Server5.1 为什么要把REST接口发布为MCP企业里有很多现成的REST接口比如订单查询、用户信息、审批流程。要让AI Agent能直接调用这些接口最优雅的办法不是让AI去“撕REST文档”而是把这些接口封装成MCP工具。原因很简单AI调用MCP工具时工具的参数和描述是结构化的模型更容易理解该传什么、返回什么。而REST接口需要额外的OpenAPI解析、认证拼接对模型来说负担更重。Java和Spring Boot在大型企业里占有率很高所以“Java将REST接口发布为MCP”或者“Spring Boot MCP”成了高频搜索词。Spring生态官方也推出了MCP相关starter集成起来相当方便。5.2 搭建Spring Boot MCP Server项目我以MCP官方Java SDK的Spring Boot Starter为例。新建一个Spring Boot工程加入依赖dependency groupIdio.modelcontextprotocol.sdk/groupId artifactIdmcp-spring-boot-starter-webmvc/artifactId version0.10.0/version /dependency接着在application.yml里配置MCP Server基本信息mcp: server: name: my-company-assistant version: 1.0.0 bind: 0.0.0.0:8080 endpoints: - path: /mcp type: http这里的/mcp路径就是MCP HTTP模式的接入端点。启动Spring Boot应用后这个地址就可以被支持MCP的Host连接了。5.3 将已有REST接口包装成MCP工具假设我有一段现成的REST接口逻辑比如根据订单号查订单。我先定义一个Service方法然后通过MCP的Tool注解暴露成一个工具方法Component public class OrderMcpTool { private final RestTemplate restTemplate new RestTemplate(); Tool(description 根据订单号获取订单信息) public String getOrderInfo( ToolParam(description 订单号) String orderId ) { String url http://internal-order-service/api/orders/ orderId; String result restTemplate.getForObject(url, String.class); return result; } }核心就两步用Tool标记一个方法再用ToolParam描述参数。MCP Starter会自动把方法注册为工具Host端调用tools/list时就能看到它。返回结果可以是字符串也可以是JSON字符串建议统一返回结构化的JSON方便AI解析。如果你想调用的接口需要鉴权可以把Token注入到RestTemplate的Header里或者通过构造函数传入配置项。实际项目中我通常把鉴权信息配置在Spring Boot的配置中心而不是硬编码在代码里。5.4 测试、接入Host与部署注意开发完成后官方提供了MCP Inspector这样的调试工具可以图形化地连接MCP Server查看工具列表、发送调用请求。我强烈建议在上生产前先用它跑一遍所有工具方法观察参数类型和返回值是否规范。接入Host也很简单。我的本地测试里直接在Codex的config.toml中写[mcp_servers.company-api] url http://localhost:8080/mcp然后就可以在Codex里查订单了。部署到生产时要注意三点第一MCP Server必须加认证最少也要配置API Key或OAuth不然等于把内部接口裸奔到AI Agent面前。第二设置合理的超时和错误处理MCP工具调用如果频繁超时会让AI的决策链路直接中断。第三注意CORS如果Host是浏览器环境要允许对应域名访问。6. 常见问题与排查技巧实录6.1 Figma MCP Token在哪里获取为什么在Codex中无法使用Figma MCP Token的获取路径是Figma登录后点头像进入Settings切到Security页签在Personal Access Tokens生成一个Token。注意Token是有过期时间的生成后立刻保存。很多人在Codex里配了Figma MCP却无法使用常见原因有三个一是Token没传对命令行里忘记加--token参数二是config.toml写错当必须使用数组时写成了普通字符串三是Codex没有重启MCP工具列表没刷新。我当时排查到最后发现是args应该写成数组例如args [-y, figma-developer-mcp, --stdio, --token...]而不能写成字符串。这个细节很容易被忽略。6.2 MCP HTTP模式连接不上HTTP模式连接不上大概率是协议类型和URL的问题。老版本MCP让SSE和Streamable HTTP并用有些Server默认路径是/sse有些是/mcp。你在Host里配置URL时一定要确认Server实际暴露的路径。还有一个常见坑是协议版本不一致比如Server是新版SDK、Client是很早的版本可能在initialize阶段失败。排查方法很简单用curl直接测试curl -X POST http://your-mcp-server/mcp \ -H Content-Type: application/json \ -d {jsonrpc:2.0,id:1,method:initialize,params:{protocolVersion:2025-06-18,capabilities:{},clientInfo:{name:test,version:1.0}}}如果返回正常的Server Info说明Server没问题问题多半在Host配置。如果返回404就检查路径返回401检查认证头。6.3 工具权限与安全警告MCP的权限控制目前更多依赖Host和Server自身。我提醒自己团队的同学不要在一个Host里连接一堆来路不明的MCP Server因为AI一旦被提示词注入可能被诱导去调用高权限工具。比如你接了一个GitHub MCP但是用的Token有写权限恶意Server返回的数据就可能诱导AI去创建恶意Issue或者删分支。几个具体建议GitHub Token尽量用Fine-grained Token只给目标仓库的最小权限数据库MCP只用只读账号文件系统MCP限定在某个临时目录。另外凡是涉及执行命令或修改数据的工具在Claude Code和Codex里都别关闭人工确认功能。6.4 常见问题速查表问题可能原因解决方法MCP工具未加载配置文件格式错误、Host未重启检查JSON/TOML格式重启Host用/mcp查看状态调用MCP工具超时Server进程未启动、网络不通、超时时间太短先独立测试Server再调整超时配置Figma MCP返回401Token过期或无效检查Figma Token确认没有空格或换行HTTP模式返回404路径配置错误用curl确认Server实际端点比如/mcp还是/sseSpring Boot MCP启动报错依赖版本冲突、端口占用检查starter版本查看端口占用情况Codex配置后不生效config.toml没有写对、缓存重启Codex使用/mcp刷新工具列表提示词注入导致AI乱操作数据源不可信、权限过大最小权限、容器隔离、保留人工确认这张表是我踩坑最多的地方建议保存下来。MCP本身并不复杂绝大多数问题都出在配置细节和安全意识上。写到这里我已经把MCP从原理到实践走了一遍。最后再分享一个我个人的体会MCP最打动我的不是某个具体工具而是它让“模型应用程序”和“业务能力”之间第一次有了清晰的边界。过去我做AI项目最怕的是模型和应用逻辑焊死在一起现在有了MCP业务团队可以像发布一个API一样发布AI能力应用团队也可以像接数据库一样接各种智能工具。生态还在快速演进但方向已经很清楚了。如果你手里正好有一个重复度高的GUI操作或者REST接口不妨花一个下午把它包成MCP Server你会立刻感受到AI Agent能力上限被抬高一截的感觉。