发布日期:北京时间2026年4月9日
开篇引入

模型上下文协议(Model Context Protocol,简称MCP)正迅速成为智能应用生态的核心通信标准。截至2026年3月,MCP的月均SDK下载量已突破9700万次,超过10000个活跃MCP服务器部署在全球的生产环境中-17。许多开发者仍停留在“会用”层面——只知道如何调用外部工具,却不理解MCP为何而生、底层如何运作,更难以在面试中系统作答。本文将从最基础的痛点出发,由浅入深地讲解MCP的完整知识链路,涵盖定义、架构、代码示例、底层原理和高频面试题,帮助你建立从“会用”到“懂原理”的能力跃迁。
一、痛点切入:为什么我们需要MCP

传统实现的困境
在没有MCP之前,让AI模型访问外部工具和数据源意味着处理N×M集成问题。假设你有3个AI模型和10个外部工具,就需要开发和维护多达30个定制化的连接器-6。每个模型都需要针对每个工具编写专门的适配代码,耦合度高,维护成本急剧上升。
以下是一个传统API调用方式的伪代码示例:
传统方式:为每个工具硬编码调用逻辑 def call_openai_api_weather(city): OpenAI专属的天气查询逻辑 response = openai.chat.completions.create( model="gpt-4", messages=[{"role": "user", "content": f"查询{city}天气"}] ) 还需要手动解析响应,提取天气数据 def call_anthropic_api_weather(city): Anthropic专属的天气查询逻辑,接口完全不同 response = anthropic.messages.create( model="claude-3", messages=[{"role": "user", "content": f"查询{city}天气"}] ) 解析逻辑又不一样
传统方案的四大缺陷
耦合度高:每个AI应用都需要为每个工具编写专用连接器,系统间强依赖-5。
扩展性差:新增一个模型或工具,就要重新开发和测试N套集成代码。
维护困难:API变更时需要同步更新所有相关连接器,极易出错。
缺乏标准化:各平台(OpenAI、Anthropic等)采用各自独特的函数调用方式,开发者陷入“平台锁定”困境-6。
MCP的设计初衷
正是在这样的背景下,Anthropic于2024年11月推出了模型上下文协议(Model Context Protocol),旨在建立AI模型与外部系统交互的标准化中间层-4。MCP的设计理念被形象地比作USB-C接口:一个统一的协议规范,让任何支持MCP的AI应用都能够无缝调用各类外部工具,而无需为每个组合编写定制代码-4。
二、核心概念讲解:什么是MCP
MCP(Model Context Protocol,模型上下文协议) 是一个开源的、厂商中立的标准化协议,定义了AI模型如何在运行时与外部工具、数据库和API建立安全、高效的连接-6。
通俗地说,MCP是“AI系统在运行时获取结构化外部数据和能力的一种标准化方式”-2。它充当AI应用(MCP客户端)与外部系统(MCP服务器)之间的桥梁,将工具调用从“硬编码”转变为“标准化发现与调用”-2。
核心价值:MCP不试图取代模型训练或微调,而是专注于解决一个战略性的关键问题——模型运行时如何交换上下文和调用工具-2。它实现了“一次开发,多模型运行”的愿景-4。
生活化类比
可以把MCP想象成一个万用插座转换器。当你出国旅行时,不同国家的插座标准各不相同,你需要为每个国家准备不同的转换头。MCP就是那个“万能转换器”——无论AI模型是什么“插头类型”,它都能通过MCP协议连接到任意“插座”(外部工具),而工具开发者只需提供一个MCP接口,即可被所有支持MCP的AI应用使用-17。
三、关联概念讲解:MCP的三大核心组件
MCP采用标准的客户端-服务端架构,包含三个关键角色-5:
1. MCP主机(Host)
AI应用运行环境,是能力承载实体。典型的主机包括Claude Desktop、ChatGPT、VS Code Copilot等。主机负责启动和管理MCP客户端,并处理用户的交互请求-1。
2. MCP客户端(Client)
负责与MCP服务器建立和维护一对一连接的协议层组件。客户端在初始化阶段发送initialize请求,协商支持的协议版本和能力;随后通过tools/list发现服务器提供的所有可用工具-5-。
3. MCP服务器(Server)
实现MCP协议的服务端程序,负责将特定的工具、资源和功能暴露给AI客户端。服务器可以提供文件系统访问、数据库查询、API调用等能力。任何服务器只需实现一次,即可被所有MCP兼容的客户端使用-。
通信机制
MCP的通信分为两个核心层次-5:
传输层:支持本地STDIO(低延迟、适合离线工作)和远程HTTP+SSE(支持流式传输和认证)两种方式。
数据层:使用JSON-RPC 2.0定义消息交换格式,确保语言无关性。
四、概念关系与区别总结
| 维度 | MCP主机 | MCP客户端 | MCP服务器 |
|---|---|---|---|
| 定位 | 用户界面层 | 通信协议层 | 能力提供层 |
| 职责 | 承载AI应用 | 发现和调用工具 | 暴露工具和能力 |
| 典型示例 | Claude Desktop | 协议连接器 | 天气API服务 |
| 与MCP的关系 | 消费者 | 通信中介 | 能力供给方 |
一句话记忆:主机是“使用方”,客户端是“连接器”,服务器是“能力提供方”——三者通过标准化协议协同,实现AI与外部世界的无缝对接。
五、代码示例:构建一个最小MCP服务器
以下是一个用Node.js/TypeScript实现的最简MCP服务器,让AI能够调用say_hello工具:
// 1. 导入依赖 import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; // 2. 创建服务器实例 export const server = new McpServer({ name: "my-mcp-server", // 服务器名称 version: "0.0.1" // 版本号 }); // 3. 定义一个工具(Tool) server.tool( "say_hello", // 工具名称 {}, // 输入参数(此处为空) async () => { return { content: [{ type: "text", text: "Hello, World! From my first MCP server!" }] }; } ); // 4. 启动服务器 async function main(): Promise<void> { const transport = new StdioServerTransport(); await server.connect(transport); // 建立连接 } // 5. 执行启动 main().catch((error: Error) => { console.error("Server startup failed:", error); process.exit(1); });
代码解读:
第1-2行:导入MCP SDK的核心模块。
第5-8行:创建MCP服务器实例,需要指定
name和version。第11-19行:定义工具,格式为
server.tool(名称, 参数模式, 处理函数)。这是MCP扩展AI能力的核心入口。第22-24行:使用STDIO传输方式启动服务器,建立与客户端的连接。
如何测试
编译TypeScript npx tsc index.ts --outDir build --target ES2020 启动服务器 node build/index.js 在另一个终端使用MCP Inspector调试 npx @modelcontextprotocol/inspector node build/index.js
通过Inspector工具,你可以直观地看到服务器暴露的工具列表,并直接调用测试-31。
与传统的对比:传统方式需要为每个AI平台编写适配代码,而MCP方式下,这个服务器一旦开发完成,任何MCP兼容的AI客户端(Claude Desktop、ChatGPT、Cursor等)都可以直接发现和调用say_hello工具,无需额外适配-31。
六、底层原理与技术支撑
MCP的高效运作依赖以下几个核心技术基础:
1. JSON-RPC 2.0通信协议
MCP的数据层采用JSON-RPC 2.0作为消息交换格式,这是一种轻量级的远程过程调用协议,语言无关、易于实现。所有MCP通信——从服务发现到工具调用——都通过标准化的JSON-RPC消息完成-5。
2. 能力协商机制
在初始化阶段,客户端发送initialize请求,包含自己支持的协议版本和能力(如支持的传输方式、工具调用限制等);服务器响应时声明自身的能力。这种双向协商确保了不同版本协议的兼容性-5。
3. 动态服务发现
客户端通过tools/list请求获取服务器暴露的所有工具及其Schema定义(包括参数类型、返回值格式等)。这使得AI模型可以在运行时动态了解可用的工具能力,无需预先硬编码-1。
4. 异步通知机制
MCP支持服务器主动向客户端发送通知(notifications),例如当工具列表发生变化时,服务器可以实时推送更新,无需客户端轮询-5。
5. 分层传输架构
MCP的传输层支持两种模式:
STDIO:通过标准输入输出进行本地进程间通信,延迟极低,适合本地开发环境。
HTTP+SSE:通过HTTP和Server-Sent Events实现远程通信,支持流式响应和身份认证-5。
核心设计思想:MCP的核心是“能力外置”——将工具能力与模型本身解耦,通过标准化协议实现连接,避免模型膨胀和能力固化-56。这本质上是对“关注点分离”设计原则在AI领域的具体实践。
七、高频面试题与参考答案
面试题1:MCP是什么?它解决了Agent开发中的什么核心痛点?
参考要点:
MCP(Model Context Protocol)是Anthropic推出的开放标准协议,定义了AI模型如何在运行时与外部工具、数据源和系统建立标准化的双向连接-45。
核心痛点:
解决了N×M集成问题——N个AI模型与M个外部工具之间需要N×M个定制化连接器,MCP将其简化为N+M的标准化连接-6。
解决了平台锁定问题——开发者只需实现一次MCP服务器,即可被所有MCP兼容的AI客户端使用-4。
解决了上下文碎片化问题——通过标准化协议实现结构化的上下文传递,避免手动拼接提示词-2。
面试题2:MCP与传统的Function Calling有什么区别?
参考要点:
| 维度 | Function Calling | MCP |
|---|---|---|
| 定位 | 模型平台内置的工具调用机制 | 跨平台的标准化通信协议 |
| 适用范围 | 特定模型平台内(如OpenAI) | 任意MCP兼容的AI应用和工具 |
| 耦合度 | 与特定平台的API强绑定 | 协议解耦,一次实现多平台复用 |
| 能力发现 | 预先定义,静态声明 | 动态协商,运行时发现 |
| 安全性 | 依赖各平台实现 | 内置权限管理、审计日志等机制 |
一句话概括:Function Calling是“怎么调用”,MCP是“如何标准化地让任何模型都能发现和调用任何工具”-60。
面试题3:MCP的三层架构是怎样的?各组件职责是什么?
参考要点:
MCP包含三个关键组件-1-5:
MCP主机:AI应用运行环境(如Claude Desktop、ChatGPT),负责承载AI模型和处理用户交互。
MCP客户端:协议层组件,负责与MCP服务器建立连接、发现工具、发起调用请求。
MCP服务器:能力提供方,负责将特定工具、资源和功能以标准化方式暴露。
通信流程:主机创建客户端 → 客户端发送initialize协商版本 → 客户端通过tools/list发现工具 → 客户端调用工具 → 服务器返回结果 → 结果注入模型引导响应。
面试题4:MCP支持的传输方式有哪些?各自适用什么场景?
参考要点:
MCP支持两种主要传输方式-5-50:
STDIO:通过标准输入输出进行本地进程间通信,延迟极低,适合本地开发环境和离线工作流。
HTTP+SSE:基于HTTP和Server-Sent Events的远程通信,支持流式响应、身份认证和跨网络部署,适合分布式系统。
面试题5:MCP服务器可以暴露哪些类型的能力?
参考要点-50:
工具(Tools) :AI模型可以执行的函数,如API调用、数据库查询、文件操作。
资源(Resources) :AI模型可以读取的上下文数据,如文档内容、Schema元数据。
提示词(Prompts) :可复用的交互模板,用于引导模型行为。
八、结尾总结
核心知识点回顾:
MCP的定义:一个开源的、厂商中立的标准化协议,解决AI模型与外部工具的集成碎片化问题-6。
核心价值:将N×M的定制化集成简化为标准化的“一次开发,多模型复用”-4。
三层架构:主机(Host)→ 客户端(Client)→ 服务器(Server),通过JSON-RPC 2.0进行通信-5。
底层原理:依赖能力协商、动态服务发现、异步通知和分层传输架构-5。
与传统方案的区别:MCP是跨平台的通信协议,而Function Calling是平台特定的调用机制。
易错点提醒:
MCP不是要取代API,而是在API之上提供标准化层-57。
MCP不自动保证安全或正确性,这些仍需在服务器端实现-2。
对于单服务集成场景,传统API可能比MCP更简单高效-5。
建议收藏本文作为面试备考资料,并结合MCP官方文档(modelcontextprotocol.io)和实践项目(如用Node.js搭建一个天气查询MCP服务器)加深理解-50。
扫一扫微信交流