1. 先聊聊这次“测试发布 MCP”到底在搞什么
最近一直在折腾 MCP(Model Context Protocol,模型上下文协议),前前后后试了好几个方案,这次要把一个项目里的 REST 接口发布成 MCP Server,专门做了一次完整的测试发布流程。标题里的“mcp5”其实就是我第五轮测试发布的记录——前四轮踩了不少坑,这一轮终于把流程跑顺了,所以想把整个经验和踩坑过程整理出来,给准备入坑 MCP 的朋友一个参考。
先给还不熟悉的朋友简单说下背景。MCP 是 Anthropic 在 2024 年底提出的一套开放协议,核心目的就一个:让 AI 模型能够标准化地调用外部工具和数据源。你不需要为每个 AI 应用写一套定制化的工具接入代码,只要把工具封装成 MCP Server,所有支持 MCP 的客户端(Claude Desktop、各种 IDE 插件、自研 Agent 等)就能直接调用。业内有个比喻特别形象——MCP 之于 AI 工具接入,就像 USB 接口之于外设。以前接一个设备要单独写驱动,现在统一接口,插上就能用。
这个内容适合谁看?三类人:
- 后端开发,手上有现成的接口服务,想让 AI Agent 能直接调用的;
- 正在选型,纠结 MCP Server、Tool、Agent Skill 到底用哪个的同学;
- 以及已经配过 MCP 但在发布、调试环节反复出问题的朋友。
这一轮我主要做了三件事:把已有的 Java REST 接口包装成 MCP Server,用官方测试方式验证服务连通性,再把服务接到客户端里做真实调用。整个流程跑下来,我对 MCP 的理解比之前只看文档要深得多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MCP 协议核心概念拆解——先搞清楚“发布的是什么”
2.1 MCP 的三大核心原语:Tools、Resources、Prompts
在动手发布之前,一定要把 MCP 协议的基本模型吃透。MCP 协议里定义了三种核心原语,分别是 Tools(工具)、Resources(资源)和 Prompts(提示词模板)。这三者对应的是不同的 AI 交互场景:
-
Tools:可执行的函数,模型根据用户需求决定是否调用。比如“查询订单状态”“创建工单”“发送消息”这类有副作用或需要实时计算的操作。Tool 是 MCP 里用法最广、也是大家最常接触的一类。
-
Resources:只读的数据,通常是文件内容、数据库查询结果、API 返回等。模型不会主动去“执行”资源,而是把它当作上下文的一部分来读取。比如把一个项目的文档目录暴露为 Resource,AI 回答问题时就能自动引用这些内容。
-
Prompts:预定义的提示词模板,用户可以手动触发,也可以由模型根据对话自动匹配。主要用于把重复性的任务流程标准化。
这一轮我发布的 REST 接口属于典型的 Tools 场景——接口本身有输入输出,调用后会产生结果返回。理解这一点很重要,因为不同原语的发布方式和客户端体验差异很大。
2.2 MCP 的传输方式:stdio 与 Streamable HTTP
发布 MCP Server 之前,还必须搞清楚传输方式的选择。MCP 协议目前主流的传输方式有两类:
stdio 模式:MCP Server 以子进程方式启动,客户端和 Server 之间通过标准输入输出通信。这种方式配置简单,基本不需要考虑网络和鉴权,适合本地开发工具调用。但缺点也明显——Server 的生命周期和客户端绑定,客户端退出,Server 也就没了。
Streamable HTTP 模式:Server 以 HTTP 服务方式独立部署,客户端通过 URL 访问。这种方式适合远程服务、多客户端共享、生产环境部署。我这次测试发布的目标就是这种模式。
这里有个很容易踩的认知误区:很多人以为 MCP 只能配本地 stdio,看到“远程 MCP”就懵了。实际上,只要服务端实现了 Streamable HTTP 传输,远程访问完全没问题。现在 Claude Desktop、IDE 插件等主流客户端都同时支持这两种模式。
2.3 MCP 与 Tool、Agent Skill 的区别
最近关于“MCP 和 Agent Skill 有什么区别”的讨论特别多,我自己的理解是这样的:
- Tool 是 AI 应用里最底层的“函数”概念,可以是普通的内部函数、HTTP API 封装,也可以是 MCP 暴露出来的工具;
- MCP 是工具的一种标准化封装和传输协议,解决的是“工具怎么被发现、怎么被调用、怎么传参返回”的统一问题;
- Agent Skill(如 Claude Skills、Codex 的技能包)更侧重在工具之上叠加“使用方法和上下文知识”,比如告诉你这个工具适合什么场景、参数怎么填、返回怎么解析,本质是 Prompt + Tools + 工作流 的组合。
我的观点是:如果只是单一内部工具,直接写 Tool 函数就行;如果工具要被多个 AI 应用复用,或者要对外开放给其他团队,那就上 MCP;如果还希望 AI 在调用工具时具备更丰富的领域知识和决策逻辑,可以考虑把 MCP Server 作为承载层,再在客户端侧配合 Skill 使用。这轮测试发布,本质上就是在做“标准化承载层”。
