1. 为什么大家都在聊MCP:从一次测试发布说起
前两天我往内网环境推了一个mcp服务,顺手在版本号上写了个"mcp5"——其实就是我这边第5个迭代版本,不是什么官方命名。发布完在群里随口提了一句,结果好几个朋友都来问:MCP到底是啥?你的服务是干嘛的?怎么接?问的人里既有搞AI应用开发的,也有平时写Java后端的老同事,甚至还有做UI设计和工业软件集成的。这倒是让我有点意外,但也说明一个问题:MCP这波热度已经不是纯AI圈的事了,而是实实在在地渗透到了各种工具链里。
先给还不太熟的朋友一句话说明:MCP,全称Model Context Protocol,模型上下文协议,是Anthropic在2024年底开源的一套标准化协议,目标很直接——让AI模型和大模型应用能以统一的方式去调用外部工具、读取外部数据。你可以把它理解成AI世界的"USB-C接口":以前每个AI应用要接一个工具,都得单独写一套适配逻辑;现在只要工具端实现了MCP协议,任何支持MCP的AI客户端都能直接识别、调用,不用再为每一对组合重复造轮子。
这篇文章我会从一个实际发布过MCP服务、也在多个客户端里接入过MCP工具的人的视角,把MCP从概念到落地拆开讲清楚:它解决什么问题、和API/插件/Agent Skill有什么区别、怎么从零写一个MCP Server、怎么把现有REST接口发布成MCP、还有发布和接入过程中我踩过的一堆坑。适合谁看?想在企业内部把AI Agent落到实际业务里的后端开发者,正在研究MCP协议但被各种概念绕晕的同学,以及那些看到自己常用的设计、办公、三维软件突然出了"某某MCP插件"但不知道干嘛用的人。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. MCP协议到底解决什么问题:从点餐逻辑说起
2.1 没有MCP的时候,AI接工具有多痛苦
在MCP出现之前,让AI应用调用一个第三方工具,常规路径是这样的:先看对方有没有开放API,有的话拿API文档,按对方的鉴权方式(Token?OAuth?)写调用代码,再把返回的数据结构硬编码进自己的逻辑里。看似不复杂,但一旦要接十几个工具,问题就来了——每个工具一套协议、一套鉴权、一套数据格式,你的代码里全是if-else分支和各自独立的适配器。我见过一个团队做一个稍微像样的AI助手,光工具适配层就维护了三千多行代码,新增一个工具要排期两天,因为要联调、要改错误处理、要看对方文档里有没有坑。
这就是典型的N对M问题:N个AI客户端去对接M个工具,两两组合要写N乘M份集成代码。MCP的思路就是把中间层抽出来——工具方只要实现一次MCP协议,任何支持MCP的客户端都能直接调用,复杂度从N乘M降到N加M。
怎么理解这件事?你可以把MCP协议看作一份"外卖点餐标准":每家餐厅(工具)只要按照统一格式把菜单(tool列表)、菜品说明(tool参数描述)、出餐方式(调用返回)给定好,不管你是用美团、饿了么还是店家自己的小程序(各种AI客户端)来点,都能顺畅完成整个流程。客人不用为每家餐厅单独学一套点餐App,餐厅也不用为每个平台单独做一套系统。
2.2 MCP的三个核心角色:Host、Client、Server
MCP体系里主要有三个角色:
- MCP Host:运行AI模型和业务逻辑的应用程序,也就是你平时用的AI客户端,比如Claude Desktop、编辑器里的AI插件、你们公司自研的Agent平台。Host负责理解模型意图,决定什么时候需要调用工具。
- MCP Client:Host内部负责与远端MCP Server建立连接、发送请求、接收响应的组件。一个Host里可以同时配多个Client,分别对接不同的Server。
- MCP Server:暴露工具、数据资源、提示词给AI用的服务端程序。它不关心对面是谁,只要是个合法的MCP Client就行。
打个比方:Host是顾客,MCP Client是服务员,MCP Server是后厨。顾客(模型)说"我想吃鱼香肉丝",服务员(Client)把需求翻译成后厨能懂的工单(JSON-RPC请求),后厨(Server)按标准流程出菜(返回结构化结果),再经服务员端回桌上。
实际消息交互用的是JSON-RPC 2.0格式,核心动作就几个:
initialize:客户端一上来先发个初始化请求,带上协议版本和客户端能力说明,双方确认版本,比如2024-11-05或2025-03-26。tools/list:客户端问服务端"你有哪些工具可用",服务端返回工具名、描述、参数schema。tools/call:客户端告诉服务端"帮我调用某个工具,参数是这些",服务端执行后返回结果。resources/list、resources/read:查询和读取服务端暴露的数据资源,通常用于给大模型投喂上下文。prompts/list、prompts/get:查询服务端预设的提示词模板,一般用来做固定任务的编排。
2.3 Tool、MCP、Agent Skill三者到底有什么关系
热词里好几个人都在问"agent skill和mcp有什么区别",这确实是新手最纠结的问题。我直接说我的理解:
- Tool(工具)是最底层概念。它就是"一个能被程序或AI调用的函数",比如"查询天气""发邮件""读数据库"。工具是MCP传输的载体,一个MCP Server可以注册N个Tool。
- MCP是工具与AI应用之间的"传输协议+交互标准"。它管的是工具怎么被描述、被发现、被调用、被传参、被返回结果。
- Agent Skill是更高层的封装,它不只是工具,还包括使用工具的"策略知识"。比如一个"竞品分析Skill",可能内部包含:先调用搜索工具、再调用网页解析工具、然后用一套提示词把结果整理成报告。Skill更接近"一个完整的做事方法",MCP更接近"一个接口规范"。
一个更直白的比喻:T
