Skip to content

MCP 协议

1. 大白话:这是什么?解决什么痛点?

MCP,英文全称是 Model Context Protocol,你可以把它理解成大模型连接外部工具和数据源的一套统一插口标准。它本身不负责“让模型更聪明”,而是负责“让模型能稳定接上外部世界”。

它解决的核心痛点是工具接入碎片化。以前你做了一个查数据库、读文件、调工单系统的工具,如果想接到不同的 AI 宿主里,比如 Claude Desktop、Cursor 或自研 Agent,往往都要各写一套适配代码。工具一多、宿主一多,维护成本就会指数级上涨。MCP 的价值就是把这层接线规范统一掉,让工具方按协议暴露能力,宿主方按协议发现和调用能力,做到“一次封装,多处复用”。

所以面试里一句话总结就是:MCP 不是模型推理能力,而是 AI 应用和外部工具之间的标准通信协议,用来解决工具重复适配和接入边界混乱的问题。

2. 底层机制与高频考点

底层机制

  1. 三层角色分工
    • Host:真正面向用户的 AI 应用,比如桌面客户端、IDE 插件或自研 Agent 平台。
    • Client:Host 内部负责和 MCP Server 通信的客户端层。
    • Server:真正把文件系统、数据库、HTTP API、内部平台这些能力暴露出来的服务端。
  2. 三类标准能力
    • Resources:只读上下文,适合给模型“看”,比如文件内容、数据库 Schema、配置片段。
    • Tools:可执行动作,适合让模型“调”,比如查订单、发消息、创建工单。
    • Prompts:可复用提示模板,适合沉淀固定任务 SOP。
  3. 通信方式:底层通常基于 JSON-RPC 2.0。它更偏“方法调用”而不是 REST 那种“资源访问”,和工具调用这种场景天然更贴合。
  4. 初始化握手:Client 和 Server 在正式调用前要先执行 initialize 握手,确认协议版本、能力列表和兼容边界。很多“Server 起了但工具没显示”的问题,本质就是初始化阶段失败。

高频面试对比考点

1. MCP vs Function Calling

  • Function Calling 解决的是:模型怎么表达自己想调哪个工具、参数是什么
  • MCP 解决的是:这个工具从哪里来、宿主怎么发现它、怎么和真实后端通信
  • 两者不是替代关系,而是上下游关系。前者偏“意图表达”,后者偏“能力接入”。

2. MCP vs Agent Skills

  • MCP 是能力接口规范,重点是“我有哪些外部能力可以接”。
  • Skills 是任务执行 SOP,重点是“拿到这些能力后,我该按什么步骤做事”。
  • 一个偏协议层,一个偏任务编排层,边界不能混。

3. stdio vs Streamable HTTP

  • stdio:适合本地工具、本地文件、个人开发。优点是部署简单,缺点是权限边界和日志污染要特别小心。
  • Streamable HTTP:适合远程服务、团队共享、多租户场景,更方便接鉴权、网关、负载均衡。
  • 高频坑点:stdio 模式下 不能往 stdout 打普通日志,因为 stdout 本身就是 JSON-RPC 消息通道,日志一混进去,协议流就会被污染。

4. 为什么 MCP 选 JSON-RPC 而不是 REST

  • REST 更像“访问资源”,JSON-RPC 更像“调用方法”。
  • 工具调用本质上是“执行动作”,所以 RPC 语义更贴切。
  • 但 JSON-RPC 不等于可以放松校验,生产里仍然要做参数校验、权限控制、审计、限流和超时兜底。

3. 🎯 实战口径

TIP

面试官提问口径:“你怎么理解 MCP 协议?它和 Function Calling、Agent 是什么关系?项目里为什么需要它?”

我的高分回答口径: “我理解 MCP 本质上不是大模型能力,而是 AI 应用接入外部工具的一层标准协议。它主要解决的是工具接入碎片化的问题。以前如果我要把订单查询、FAQ 检索、内部 API 调用这些能力接给不同宿主,通常都要分别做适配;用了 MCP 之后,工具侧只要实现统一 Server,宿主侧按标准协议发现和调用就行,工程解耦会明显更好。

在我的【苍穹外卖AI客服】项目里,虽然核心调度是基于 Spring AI Advisor 链做的,但我会把整体边界讲清楚:Function Calling 负责让模型产出结构化调用意图,MCP 负责把这些工具能力标准化接入宿主,Agent 则负责多轮规划、上下文管理和结果整合。

如果后面系统要扩展更多工具,比如订单、地址、优惠券、FAQ、知识库检索,甚至接内部运营平台,MCP 这类协议层抽象的价值就会越来越大。因为它把‘模型怎么想’和‘工具怎么接’拆开了,前者留给 Agent 和 Prompt/Context Engineering,后者交给协议和工具网关。这样系统扩展性、复用性和团队协作边界都会更清晰。”


相关链接:[[苍穹外卖AI客服]] | [[黑马点评]]