Skip to content

Q5 · 什么是 MCP(Model Context Protocol)? ​

难度 P0 必背 · 岗位 算法 / 应用 · 预计阅读 8 min 关键词 mcp · protocol · tool-discovery · json-rpc · resources · prompts

假设一个聊天应用要读取本地文件、查数据库,还要调用日历。每接入一种能力都自行设计一套发现、传参和返回方式,维护成本会持续增加。MCP(Model Context Protocol)给应用与外部能力之间提供共同的连接约定。

先认清几个词 ​

词含义在这个例子里
Host面向用户并管理连接的 AI 应用聊天应用
ClientHost 内与一个 Server 通信的协议客户端日历连接实例
Server按 MCP 协议提供能力的进程或服务日历服务
Tools可被请求执行的操作创建日程
Resources可读取的资料日历中的日程内容
PromptsServer 提供的可复用提示模板整理会议安排的模板
Function Calling模型提出工具调用请求的机制模型请求“创建日程”

MCP 说明应用怎样发现并连接外部能力;模型是否提出一次工具调用,由应用和模型的调用流程决定。 接上 Server 仍需处理权限、参数校验和敏感操作确认。

一个协议怎样连接应用与能力 ​

统一接口减少应用与工具之间的重复适配

逐步拆开看 ​

MCP(Model Context Protocol,Anthropic 2024 年提出),我理解它是 AI 应用和外部能力之间的「USB-C 标准」 。

在没有 MCP 的时候,如果有 N 个 AI 应用和 M 个工具,需要 N × M 个适配集成,非常麻烦。MCP 定义了一套标准协议,工具提供方按这个标准暴露能力(MCP Server),AI 应用按这个标准接入(MCP Client),这样只需要 N + M 个接入就够了。

而且 MCP 不只是「调用工具」,它还让模型能动态发现可用资源、读取上下文信息,所以叫「Context Protocol 」。

N×M 问题:为什么需要 MCP ​

想象一下,你是 GitHub 的工程师,想让各种 AI 都能调用 GitHub API 查代码、提 PR。没有 MCP 的时候 ,你得为每个 AI 应用单独开发集成:

  • OpenAI GPT-5.x 等用 Function Calling / Responses API 格式,你得按它的 schema 写一套

  • Anthropic 的 Claude 用类似的但不一样的格式,你再写一套

  • 还有 Meta 的 LLaMA、Google 的 Gemini……每家格式都略有不同

反过来,如果你是开发 AI 应用的,想用各种工具(GitHub、Slack、数据库……),每个工具的接口格式都不一样,你得为每个工具写适配代码。

这就是 N×M 问题 :N 个 AI 应用 × M 个工具 = N × M 个集成 。

MCP 的解法很简单:定一个统一标准 。工具提供方按 MCP 标准暴露能力,AI 应用按 MCP 标准接入,从此不再需要两两适配。

类比 USB-C 之前的世界:手机有 micro-USB / Lightning / Type-C 各家不同,充电器也各家不同,你出门得带一堆线。USB-C 统一之后,一根线走天下。MCP 之于 AI 工具生态,扮演的就是 USB-C 的角色。

MCP 不只是「工具调用」 ​

很多人把 MCP 理解成「另一种 Function Calling」,这是片面的 。MCP 的全称是 Model Context Protocol,Context(上下文) 是它的关键词。

MCP 的 Tools、Resources 和 Prompts 三类能力

MCP 定义了三类能力:

1. Tools(工具) ​

会改变外部世界的操作,比如发邮件、写文件、调 API。这和 Function Calling 里的工具概念一样。

2. Resources(资源) ​

只读的数据源 ,比如文件内容、数据库记录、网页 HTML。Resources 是「给模型提供上下文」而不是「让模型执行操作」。

举个例子:你让 AI 帮你审查代码,AI 通过 Resources 读取你的源码文件(只读),然后用模型能力分析问题,最后通过 Tools 提交 PR(操作)。Resources 解决的是「模型怎么知道项目里有什么」,Tools 解决的是「模型怎么改东西」 。

3. Prompts(提示词模板) ​

预定义的 prompt 模板,比如代码审查模板、文档生成模板。这也是上下文的一部分。

举例:MCP Server 可以暴露一个 summarize_pr prompt 模板,宿主应用拉取下来填进 chat,比每个用户自己写 prompt 高效得多。

所以 MCP 解决的不只是「模型怎么调用工具」,而是「模型怎么获取和使用外部上下文」的完整问题。这就是为什么叫 Context Protocol 而不是 Tool Protocol ——能在面试时点出这一层,是 MCP 的高级理解信号。

MCP 架构详解:Host-Client-Server 三层 ​

Host、Client、Server 及三类能力的关系

MCP 的架构分三层,按用户请求传递的方向读:

  1. Host(宿主应用) 接住用户请求,管理生命周期和权限。
  2. Client(MCP 客户端) 由宿主使用,管理与 MCP Server 的连接及 JSON-RPC 通信。
  3. Server(MCP 服务端) 提供 Tools、Resources 和 Prompts,可以是本地进程或远程服务。

Host 是用户直接面对的 AI 应用,比如 Claude Desktop、Cursor IDE。Client 是 MCP 协议层面的客户端,负责和 Server 建立连接、管理会话。Server 是工具提供方,可以是本地程序(比如访问本地文件系统)也可以是远程服务(比如访问 SaaS API)。

通信协议用 JSON-RPC 2.0 ,这是一个成熟的标准,各种语言都有实现。Server 启动时会向 Client 通报「我有哪些 Tools / Resources / Prompts」,Client 收到列表后转给 Host,Host 把这些能力让模型知道。

Host、Client 与 Server 的通信关系

MCP vs Function Calling:互补不是替代 ​

它们不是替代关系,而是互补 。

维度Function CallingMCP
层级模型层面的机制应用层面的协议
管什么模型怎么输出调用请求工具怎么暴露 + 怎么被发现
覆盖只管 ToolsTools + Resources + Prompts
格式OpenAI/Anthropic 各家定义略不同JSON-RPC 2.0 统一
位置LLM 输出层AI 应用与工具之间
关系LLM 用 Function Calling 表达调用意图MCP Client 把意图转发给对应 Server 执行

一个使用 MCP 的 Agent 内部流程是这样:

  1. 发现 :Agent 通过 MCP 询问 Server,得到可用工具列表(schema + 描述)

  2. 注入 :把这些工具的 schema 发给 LLM(此时 LLM 不知道 MCP 存在,只看到一组 Function Calling 工具)

  3. 决策 :LLM 用 Function Calling 输出调用请求 {name, args}

  4. 执行 :Agent 通过 MCP tools/call 把请求转发给对应 Server

  5. 回填 :Server 返回结果,Agent 塞回 messages,LLM 综合给最终答复

MCP 管「工具怎么暴露」,Function Calling 管「模型怎么表达调用意图」 。两层各管各的,共同构成完整闭环。


MCP 接入时容易误解的地方 ​

踩坑 1:把 MCP 当成另一种 Function Calling ​

错误描述 :「MCP 就是 Anthropic 版的 Function Calling」。

正确做法 :MCP 是应用层协议 (工具如何暴露),Function Calling 是模型层机制 (模型如何输出调用请求)。两者层级不同,互补共存。MCP 还覆盖 Resources 和 Prompts 两类 Function Calling 不涉及的能力。

踩坑 2:忽略 Resources 和 Prompts,以为 MCP 只管 Tools ​

错误描述 :「MCP 不就是统一了工具调用吗?」

正确做法 :MCP 三类能力 — Tools(操作)、Resources(只读数据)、Prompts(模板)。「Context」是关键词 ,不只是「工具」。能在面试时点出这三类能力的区别,非常加分。

踩坑 3:以为 MCP Server 必须是远程服务 ​

错误描述 :「MCP Server 就是个 HTTP API」。

正确做法 :MCP Server 可以是本地进程 (stdio 通信,比如本地文件系统、Git 操作),也可以是远程服务(HTTP / SSE)。本地 MCP Server 是当前主流形态,因为很多场景需要访问本地资源(文件、IDE 状态等)。

踩坑 4:忽略安全与权限管理 ​

错误描述 :「MCP Server 暴露出来就直接用」。

正确做法 :MCP 协议本身只定义通信,权限和安全由 Host 控制 。Claude Desktop / Cursor 都有「连接前确认」「敏感操作二次确认」机制。生产部署时要考虑:① Server 鉴权(API Key / OAuth)② 操作白名单 ③ 审计日志 ④ 速率限制。

踩坑 5:把 MCP 和 A2A 混为一谈 ​

错误描述 :「MCP 也能让 Agent 之间互相通信吧?」

正确做法 :MCP 管的是 Agent 与工具的连接,A2A 管的是 Agent 与 Agent 的通信 。两者作用层不同。


再往下追问时怎么解释 ​

  • 追问 1:MCP 用什么传输协议? 答题要点:MCP 协议层是 JSON-RPC 2.0 ,传输层支持 ① stdio (标准输入输出,本地进程间通信,最常用)② HTTP + SSE (HTTP 请求 + Server-Sent Events 流式返回,远程 Server 用)③ WebSocket (双向流式,未来扩展)。本地工具用 stdio,远程服务用 HTTP+SSE 是当前主流。

  • 追问 2:MCP Server 能开发哪些场景? 答题要点:① 开发工具类(GitHub / GitLab / Jira / Linear)② 数据访问类(PostgreSQL / SQLite / S3 / Notion / Google Drive)③ 通信协作类(Slack / 飞书 / 钉钉)④ 浏览器自动化(Puppeteer / Playwright)⑤ 本地系统类(文件系统 / Shell / Git)。已有数千个公开 Server。

  • 追问 3:MCP 现在生态发展怎么样? 答题要点:① 2025 年 12 月 Anthropic 把 MCP 捐给 Linux 基金会旗下 Agentic AI Foundation(AAIF) ,由 Anthropic、Block、OpenAI 共同创立;② Google、Microsoft、AWS、Cloudflare、Bloomberg 都表示支持;③ Cursor、Claude Desktop、VS Code Copilot 已原生集成 MCP;④ 公开 Server 已数千个。

  • 追问 4:怎么自己写一个 MCP Server? 答题要点:用官方 SDK(Python / TypeScript / Java),按 MCP 规范实现 initialize、tools/list、tools/call、resources/list、resources/read 等方法,启动 stdio 监听即可。Anthropic 提供了 @modelcontextprotocol/sdk 等工具包,几十行代码就能跑通。

  • 追问 5:MCP 和 LangChain 的 Tool 是什么关系? 答题要点:LangChain Tool 是框架内部抽象 (一个 Python class),MCP 是跨框架协议 (语言无关的 JSON-RPC)。LangChain 已经支持把 MCP Server 转成 Tool(MCPToolkit),所以两者可以叠用:LangChain 框架 + MCP 工具生态 = 跨厂商兼容。


面试中如何回答 ​

面试回答 MCP 要抓住三个点:

  1. 解决的问题 :N×M 集成爆炸,通过标准化协议减少到 N+M

  2. 核心设计 :不只是工具调用,还包括 Resources(只读数据) 和 Prompts(模板) ,整体是「上下文协议」

  3. 架构层次 :Host-Client-Server 三层,Client 和 Server 通过 JSON-RPC 2.0 通信

能类比 USB-C 解释 MCP 的价值会很加分 :就像 USB-C 统一了各种设备的充电和数据接口,MCP 统一了 AI 应用和外部能力的连接方式。

最后再点一句「MCP 与 Function Calling 互补 — MCP 在应用层管工具暴露,Function Calling 在模型层管调用意图表达」,这道题就稳了。


章节首页 · ← Q4 · Q6 →

最后更新2026-09-29
难度P0
频率very-high
阅读8 min
主题mcp / protocol / tool-discovery
觉得有帮助?把这个链接转给正在求职的朋友 · 用 Ctrl + K 全站搜索其它题