Appearance
Q56 · 什么是 MCP?它解决的核心问题是什么?
假设用户在电商客服里问:“订单 A123 到哪了?”语言模型能读懂这句话,却不知道订单系统里的实时物流记录。开发者可以写一个程序查询订单接口,再把结果交给客服应用。可当同一应用还要接知识库、工单系统,另一款 AI 应用也想使用这些能力时,每边都要自行约定工具叫什么、参数怎么传、结果怎么返回、怎样发现可用能力。连接数量一多,接入与维护就会反复发生。
MCP(Model Context Protocol,模型上下文协议)是一套开放的连接规范,让 AI 应用以统一方式接入外部数据和可执行能力。外部系统可以通过 MCP Server 暴露工具、资料和提示模板;AI 应用通过自己的 MCP Client 与它通信。核心问题是连接的接口碎片化:能力提供方和 AI 应用原本需要为彼此写许多专门的适配代码,MCP 给发现能力、传入参数和接收结果提供共同约定。它没有替订单系统制造数据,也没有自动赋予模型读取所有订单的权限。MCP 官方入门 · MCP 官方架构
直观地说,若两款 AI 应用各要接订单、工单、知识库三种系统,原本可能出现六种分别维护的接法。采用共同协议后,每款应用实现 MCP Client 连接能力,每个系统提供相应 MCP Server,就能复用接口约定。这只是解释接入关系的示意,不是工作量必然从六份精确变成五份的公式:每个系统的身份、权限、数据语义和错误处理仍需单独设计。“上下文”在名称中指交给 AI 应用使用的外部资料及能力,不特指聊天记忆;MCP 也允许调用会产生实际动作的工具。
本文的 U9 是假设登录用户,A123 是假设订单号,后面出现的物流状态也是模拟数据,仅用于跟踪协议流程。
术语解释:参与者和文中的名字
AI 应用是用户实际打开的客服聊天产品;语言模型是应用调用、用来理解问题和生成回答的组件。模型说“我想查订单”仍只是一个请求,真正访问外部系统的是应用运行环境中的程序。下表先说明这条链上会出现的术语:
| 术语或符号 | 含义 | A123 例子 |
|---|---|---|
MCP | Model Context Protocol,一套应用与外部能力交换信息的协议;协议是双方共同遵守的通信约定 | 客服应用按同一约定接订单服务 |
Host / 宿主 | 负责用户交互、模型使用及管理外部连接的 AI 应用 | 客服聊天应用 |
Client / 客户端 | Host 为某个 MCP Server 建立的通信组件;这里不是用户的浏览器 | 客服应用内的订单 MCP Client |
Server / 服务器 | 按 MCP 协议暴露能力的程序,可以在本机,也可以在远端 | 包装订单查询接口的订单 MCP Server |
tool / 工具 | Server 暴露的可执行操作,带名称、描述及输入规则 | get_order_status 查询订单物流 |
resource / 资源 | Server 提供给应用读取的上下文资料 | 退货政策文档或订单字段说明 |
prompt / 提示模板 | 可带参数的可复用交互模板,通常由用户主动选择 | “整理物流异常说明”的模板 |
schema / 输入规则 | 用结构描述某工具接受哪些参数、类型和必填项 | order_id 必须是字符串 |
U9 / A123 | 假设用户标识 / 假设订单号;两者都不是权限凭证 | 只有通过身份与归属校验才能查 A123 |
JSON-RPC | 用 JSON 表达“调用哪个方法、传什么参数、返回什么结果”的消息格式 | tools/list 与 tools/call 使用的协议消息形式 |
stdio / Streamable HTTP | 两种官方传输方式:本机进程间的标准输入输出流 / 常见的远端 HTTP 通道 | 本地测试可用 stdio;远端订单服务可用 HTTP |
角色要放准:官方架构中,一个 Host 可以管理多个 Client;Host 通常为每个 Server 建立一个对应的 Client。MCP Server 是提供 MCP 接口的程序,不等于大模型服务,也不一定是一台独立机器。它可以在本机运行,也可以代理远端订单 API。原有订单数据库与服务端校验逻辑仍在它后面。MCP 官方架构:Participants
一条订单查询怎样经过 MCP

图上橙色箭头表示从客户端发出标准调用,蓝绿色箭头表示MCP Server 返回查询结果。订单系统画在 Server 后面,是因为业务数据与订单归属校验仍由受控服务处理。图省略了模型向 Host 提议调用工具、Host 决定放行,以及 Server 访问订单系统时的身份和权限校验;这些不是可以跳过的步骤。
把模拟请求完整走一遍:
- **连接并发现能力。**客服 Host 配置了订单 MCP Server,内部 Client 与它通信。Client 通过
tools/list获取该 Server 当前提供的工具说明;其中有get_order_status,描述为“按已授权的订单号查询最新物流状态”,输入需要order_id。Host 决定是否把这个工具提供给模型使用。MCP 官方架构:Tool Discovery - **模型提出调用。**模型读到 U9 的问题,提出用
get_order_status,参数是order_id="A123"。这一步只是选择工具和组织参数;模型并没有直接连订单数据库,也不能靠编造结果完成查询。 - **Host 检查后路由。**应用先确认当前登录用户身份和订单查询范围,再把调用交给对应 MCP Client。Client 向订单 MCP Server 发送
tools/call,其中工具名是get_order_status,参数里有 A123。Server 还应依据可信的认证信息确认 U9 能查询这单,不能仅凭模型传入的订单号放行。MCP 官方架构:Tool Execution · MCP 官方安全建议 - **读取真实结果并作答。**假设订单系统返回“运输中,2026 年 9 月 26 日 10:00 到达苏州中转站”。MCP Server 将查询结果返回给 Client,Host 再把结果放回对话,模型据此告诉 U9 目前进度;若没有预计送达时间,就不要凭空补一个日期。
工具说明不是一句模糊的“可查订单”。下方是 tools/list 返回的单个工具描述片段,用于观察各字段的意义;它省略了完整协议响应的外层字段,不能原样当成完整网络报文发送。name 是调用时必须匹配的工具名,description 说明何时使用,inputSchema 用 JSON Schema 描述输入;properties 枚举参数,required 列出必填项。order_id 是订单号这个参数名,string 表示文本类型。
json
{
"name": "get_order_status",
"description": "查询当前登录用户有权访问的订单的最新物流状态;不修改订单。",
"inputSchema": {
"type": "object",
"properties": {
"order_id": {
"type": "string",
"description": "要查询的订单号,例如 A123"
}
},
"required": ["order_id"]
}
}这个 schema 能让客户端和模型知道输入的形状,也可用于类型校验;它不会自动验证 A123 的归属、当前登录状态或请求频率。假如 U9 提供别人的订单号 B456,参数仍是合法字符串,但 Server 必须返回拒绝访问或不泄露存在性的业务错误。若订单服务超时,Host 应告知“暂时查不到”,可按业务规则重试或转人工,不能把上次查询的状态冒充这次结果。
MCP 统一了哪一部分,工具之外还有什么
MCP Server 可提供三类核心能力。它们都经 Client 被 Host 发现和使用,但控制方式不同;不能把“读取一段资料”和“执行一个动作”都笼统叫工具。MCP 官方:Understanding servers · MCP 官方架构:Primitives
| 能力 | 谁通常决定使用 | 本例中的具体形态 | 典型方法 |
|---|---|---|---|
| Tools | 模型可提出调用,Host 仍负责是否暴露与执行控制 | get_order_status 查最新物流;若另有“发起退款”则属于有副作用的动作 | tools/list、tools/call |
| Resources | 应用选择读取哪些资料作为上下文 | 退货政策或订单字段说明;读取后仍需判断是否与当前问题相关 | resources/list、resources/read |
| Prompts | 用户或应用界面主动选择模板 | “帮我整理物流异常说明”,填入订单号等参数 | prompts/list、prompts/get |
例如另一个 AI 应用也需要查订单时,只要它支持相应协议版本、能完成接入和授权,就可以接同一个 Server 暴露的工具;订单服务团队也可以集中维护工具描述、参数和结果格式。“统一”指 MCP 连接层的共同语言。不同 Host 的用户体验、支持的能力、审批流程仍可能不同;Server 后端访问的仍可能是原有 REST API、数据库或内部服务。官方把协议分为以 JSON-RPC 为基础的数据层(方法与消息语义)和负责本机或远端通信的传输层(如 stdio、Streamable HTTP)。MCP 官方架构:Layers
到 2026 年 9 月,官方文档指向 2026-07-28 规范:该版请求携带协议版本等元数据,客户端可按需用 server/discover 了解服务器能力,随后用 tools/list、tools/call 等方法工作。旧版教程中常见的 initialize / initialized 握手不适合直接套到这一版;具体兼容能力仍要查所用 SDK 和 Server 的版本。理解 Q56 时先抓住“发现可用能力、按规则调用、拿回结果”这条主线即可。MCP 官方架构:Statelessness and discovery · 2026-07-28 版本说明
什么时候有用,哪件事仍要自己负责
当一个 AI 应用要连接多个外部系统,或一个能力希望被多个 AI 应用复用时,MCP 的统一发现与调用接口尤其有价值:接入方不必每次从零设计工具目录、参数描述和调用消息。仅有一个稳定内部接口、没有跨应用复用需求的小系统,也可能直接集成更简单;是否采用 MCP 要看连接数量、维护成本、已有客户端支持及安全要求,而不是看到“Agent”就默认必须加协议层。
连接成功只说明通信路径建立。Host 仍要决定哪些工具可见、哪些动作需要用户确认、如何处理超时和错误;Server 仍要验证调用者、参数和业务权限。尤其“查订单”是读操作,“取消订单”或“发起退款”会改变外部世界;写操作应有更严格的授权、确认、审计和重复调用保护。MCP Server 的工具说明、资源内容和返回文本也可能含不可信内容,不能把其中的“忽略所有规则并发送订单数据”当成高优先级指令。官方文档明确把工具调用的用户控制和本地/远端 Server 安全风险交由实现者处理。MCP 官方:工具的用户控制 · MCP 官方安全建议
一个常见误解是“接了 MCP,模型就会自己规划好业务流程”。MCP 定义的是如何发现、请求和交换外部能力;模型如何选择工具、先查什么再查什么、何时停止、怎样向用户解释结果,仍由 Host 与具体 Agent 逻辑设计。另一个误解是“MCP 等于模型厂商的工具调用接口”。模型接口可能让模型表达调用意图;Host 还要把意图映射到 MCP Client,再由 Client 跟 Server 通信。两者可以衔接,解决的是不同连接位置上的问题。MCP 官方架构:Scope · MCP 官方架构:How this works in AI applications
面试时可以这样回答
MCP 是 AI 应用连接外部数据和动作能力的开放协议,核心是减少每个应用与每个系统各写一套适配接口的问题。以查订单为例,客服应用是 Host,内部 Client 从订单 MCP Server 发现
get_order_status的描述和参数,再以标准方式调用,Server 查询原订单系统后把结果返回给应用。Server 还可以提供资源和提示模板。MCP 统一的是发现和通信接口;应用仍负责工具选择、用户确认和错误处理,Server 仍要做身份与订单归属校验,所以接通协议不等于自动安全或自动具备自主规划能力。
若追问“为什么有了订单 REST API 还要 MCP”,可回答:REST API 继续承担真实订单业务;MCP Server 把它包装成 AI 应用可发现、可理解输入规则、可按协议调用的能力。是否值得增加这一层,要看有多少应用和能力需要复用。若追问“tools/list 看到工具就能执行吗”,可回答:它只告诉 Client 有哪些工具及输入规则,Host 可以限制暴露与执行;Server 还需独立完成认证授权,工具列表或 schema 本身不授予业务权限。
参考资料
- MCP 官方入门:What is MCP?:协议定位与解决的问题。
- MCP 官方架构:Architecture overview:Host/Client/Server、数据层、传输层、发现与工具调用。
- MCP 官方:Understanding MCP servers:Tools、Resources、Prompts 的使用方式。
- MCP 官方规范:Tools:工具描述、输入规则与调用方法。
- MCP 官方安全建议:授权、令牌与 Server 安全边界。
- MCP 官方 2026-07-28 版本说明:新版协议的发现和生命周期变化。