你抽屉里是不是堆满了各种充电线?手机、耳机、充电宝各用各的线,出门要带一大把,这就是“数据线丛林”。AI 世界也曾经如此:大模型想调用搜索、数据库、办公软件,每个工具都得单独做适配,换个模型又得重来。Anthropic 推出的 MCP 协议,就是 AI 世界的“USB 线”——它把模型和工具之间的连接方式统一起来,让两边“一插即用”。无论是模型厂商、工具开发者还是普通开发者,都可以像用 USB-C 一样轻松对接。这篇文章会用“USB 线”这个比喻,带你读懂 MCP 的设计理念、核心原语、通信流程,以及它为什么能迅速成为 Agent 时代的事实标准。

岗位关联

掌握 MCP,你就掌握了构建 Agent 的“标准插头”——能快速接入任何 AI 工具生态,成为 Agent 时代的关键开发者。

目录
  1. 可视化演示
  2. 设计理念:一根USB线打通千军万马
  3. 核心原语:三个万能插头
  4. 通信流程:点单、下单、上菜
  5. 协议架构:接线盒的里里外外
  6. 生态标准:从一家发声到众厂响应
  7. Agent 集成:让 Agent 学会用插头
  8. 实践入门:亲手做一根线
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示MCP基于JSON-RPC 2.0的Client-Server通信流程及Resources、Tools、Prompts三大核心原语的网络拓扑。

本节配有交互动效(进入视口后自动加载,约 3KB)。

JSON-RPC 2.0通信流程 Host发送request到MCP Server Server返回response含Resources/Tools msg = {jsonrpc:2.0, method, params, id} MCP解耦模型与工具的连接方式

设计理念:一根USB线打通千军万马

你抽屉里是不是堆满了各种充电线?手机、耳机、充电宝各用各的线,每次出门都要带一大把。这就是没有统一标准造成的混乱。AI 世界也曾经如此:模型想调用搜索、数据库、办公软件,每个工具都要单独做适配,换个模型又得重来一遍。MCP 要做的,就是给 AI 世界发明一根“USB 线”,让模型和工具都能统一插拔。

MCP 全称 Model Context Protocol,中文叫“模型上下文协议”,由 Anthropic 提出。它的核心使命,是把“模型”和“工具”从紧紧捆绑的状态中解放出来。过去模型调用工具是“点对点”的适配,而现在通过 MCP,工具方只需要实现一个服务器,模型方通过客户端按统一协议对接,两边都可以独立演进、互不牵连。

在 MCP 架构里,工具提供方实现一个“MCP 服务器”,把自己能提供的资源、动作和模板声明出来;模型应用方通过“MCP 客户端”连上去,按统一协议完成发现与调用。OpenAI、Google 等模型厂商也开始兼容 MCP,意味着同一套工具可以服务不同品牌的模型,真正实现“一次接入,处处运行”。

就像 USB-C 一统手机充电口,MCP 让 AI 开发者不必再为每个模型重写工具链接,真正实现“一线通吃”。

模型  →MCP 协议  工具\text{模型} \;\xrightarrow{\text{MCP 协议}}\; \text{工具}
这个公式表示:模型通过 MCP 协议这个“标准接口”,与外部工具完成连接。箭头代表标准化的请求-响应调用。
  1. 模型(Model)指大语言模型,它像是设备里的“大脑”,负责理解任务和生成结果。
    模型\text{模型}
  2. 协议(Protocol)MCP 定义的统一接口规范,相当于 USB 接口的物理标准,确保两边能互认。
    MCP 协议\text{MCP 协议}
  3. 映射箭头(\xrightarrow)表示一次标准化的请求-响应过程,模型通过协议向工具发起调用。
    →调用\xrightarrow{\text{调用}}
  4. 工具(Tool)外部能力提供方,例如搜索 API、数据库、计算器,它们是模型的“手和脚”。
    工具\text{工具}

核心原语:三个万能插头

USB 世界里,有数据线、充电线、视频线,各有各的接口形态。MCP 世界里也有三类标准化的“插头”,它们被称为核心原语:Resources、Tools、Prompts。三种原语各管一摊,组合起来才能让 Agent 既能“看”、又能“做”、还知道“怎么做”。

Resources 代表可被模型读取的外部数据,比如文件、数据库条目、网页内容。Tools 代表可执行的函数或动作,比如“查天气”“发邮件”“下单”。Prompts 则是可复用的提示模板,把常见任务的指令结构化封装,方便开发者快速拼装 Agent。三者共同组成 MCP 的能力面,并通过统一协议传输。

在实际使用中,Resources 为 Agent 提供“上下文”,Tools 让它有能力改变世界,Prompts 让它的行为模式可以沉淀复用。它们都有唯一的命名空间标识,客户端可以通过协议发现服务器上有哪些资源、工具和提示,无需预先写死。

三个“插头”各司其职:数据插头让 Agent 获得信息,执行插头让它采取行动,指令插头让它快速复用经验。只有三合一,Agent 才真正完整。

U={Resources,  Tools,  Prompts}\mathcal{U} = \{ \text{Resources}, \; \text{Tools}, \; \text{Prompts} \}
这个公式表示 MCP 原语的全集由三大类组成:资源、工具、提示。三者并立,相互补充。
  1. 集合(\mathcal{U})表示 MCP 原语的全集,是能力清单的数学表达。
    U\mathcal{U}
  2. Resources(资源)外部数据源,如文档、数据库记录,模型可以读取但不能直接修改。
    Resources\text{Resources}
  3. Tools(工具)可执行操作,模型发出调用参数,工具执行并返回结果。
    Tools\text{Tools}
  4. Prompts(提示)预定义的提示模板,将常见任务指令结构化。
    Prompts\text{Prompts}

通信流程:点单、下单、上菜

去餐厅吃饭,你告诉服务员想吃什么,服务员转达厨房,厨房做好后端上菜。MCP 的通信就是这种请求-响应模式,只不过服务员换成了 JSON-RPC 2.0 协议。每一次调用都是一条消息,带着明确的“单号”和“菜名”,保证双方不会搞混。

MCP 基于 JSON-RPC 2.0,这是一种轻量级的远程调用协议。所有消息都是键值对形式的 JSON 对象,包含协议版本、方法名、参数和消息 ID。客户端发送请求,服务器处理后返回结果。整个过程简洁、可调试。

典型流程包括:客户端先发送 initialize 消息握手,确认双方支持的协议版本;然后通过 tools/list 发现服务器上有哪些工具;最后用 tools/call 发起实际调用。每一步都有对应的响应,任何异常都有统一的错误码返回。

就像服务员接单、上菜都要看单号,MCP 的 id 保证了“谁点的菜归谁”,即使同时发起多个请求也不会乱。

请求={jsonrpc:2.0,  method:m,  params:p,  id:i}\text{请求} = \{ \text{jsonrpc}: 2.0, \; \text{method}: m, \; \text{params}: p, \; \text{id}: i \}
这个公式展示了一条 JSON-RPC 2.0 请求消息的结构:协议版本、方法名、参数和消息 ID,四者缺一不可。
  1. jsonrpc 字段固定为 2.0,声明消息遵循 JSON-RPC 2.0 规范。
    jsonrpc:2.0\text{jsonrpc}: 2.0
  2. method(方法)指明要调用哪个动作,例如 “tools/call”。
    method:m\text{method}: m
  3. params(参数)携带调用所需的具体内容,如工具名和参数表。
    params:p\text{params}: p
  4. id(标识)客户端生成的消息 ID,用于匹配响应到底对应哪个请求。
    id:i\text{id}: i

协议架构:接线盒的里里外外

一个接线盒里,进线和出线各走各的通道,盒子规范决定了两边怎么对接。MCP 的架构里也有两个固定角色:客户端和服务器。客户端是模型应用侧,负责发起会话、调用工具;服务器是工具侧,负责注册能力、响应请求。

客户端与服务器之间的连接,可以通过两种典型传输方式实现。本地场景用 stdio,也就是标准输入输出传输,两个进程直接对话;远程场景用 Streamable HTTP,让工具以服务形式暴露给网络上的客户端。无论哪种,接口层面保持一致。

MCP 会话有明确的生命周期。开始时,客户端发送 initialize 做握手,服务器回复协议版本和支持的能力;随后进入正常的工具发现、调用阶段;最后可以主动断开。这种设计让连接状态清晰可控,也方便做权限管理和审计。

有了这个“接线盒”,无论你把线插在本地电脑还是远程服务器,接口规格都一样。换环境不用换接线方式,这就是协议架构的价值。

生态标准:从一家发声到众厂响应

某家手机厂率先发布了一个开放接口标准,其他品牌纷纷跟进,最后整个行业都采用,用户买任何配件都能通用。MCP 就是 AI 界的这个“接口标准”。它由 Anthropic 在 2024 年开源并推广,随后迅速得到生态响应。

OpenAI、Google 等原本各有生态的厂商也宣布支持 MCP。之所以能形成事实标准,核心在于“解耦”的收益:模型厂商不需要再为每家工具做适配,工具厂商也不需要针对每个模型写 SDK。一次开发、全网通用,整个产业链都受益。

MCP 的设计是开放的,任何人都可以实现自己的 MCP 服务器或客户端。就像 USB 标准虽然由某公司发起,但最终成为行业公共品。开放治理、多方参与,让大家对它更有信心,生态飞轮一旦转起来就很难停下。

USB 成为通行标准后,配件厂和手机厂都获益。MCP 让 AI 产业链上下游都吃到“兼容”的红利,这就是标准的力量。

Agent 集成:让 Agent 学会用插头

Agent 就像拿着“万能插头”的外卖员,接单、取餐、送餐,每一步都要调用不同系统。MCP 给了它一套标准插脚,让它能随时接入新工具,而不必关心每个工具背后的实现细节。

在 Agent 工作流中,MCP 客户端负责与各个 MCP 服务器对话。Agent 决策层根据任务选择工具,通过 tools/list 发现可用能力,再通过 tools/call 调用具体动作。整个过程就像点单、取餐,分工明确、流程清晰。

MCP 还支持多工具编排。一个 Agent 可以同时连接多个服务器,把“查天气”“订机票”“查酒店”组合成一次完整规划。更棒的是,工具支持动态发现,Agent 在运行时就知道了什么可用,而不是把调用链写死在代码里。

标准插脚让 Agent 面对新任务时,只是多插一根线,而不是重写整个电路。这也是 MCP 在 Agent 架构中愈发核心的原因。

实践入门:亲手做一根线

自己动手做一根 USB 线并不难——买接头、焊接、测试。MCP 入门也类似,基于官方 SDK,几十行代码就能搭建一个实实在在的 MCP 服务器。理论上你只需要三步:定义服务名、注册工具、处理请求。

MCP 官方提供 Python、TypeScript 等 SDK。一个 MCP 服务器的核心逻辑很简单:初始化时声明自己的名字和协议版本;提供 tools/list 返回工具清单;收到 tools/call 后执行对应函数并返回结果。客户端则负责发送请求并展示返回内容。

入门建议先用本地 stdio 传输,在自己电脑的 Python 脚本里跑通;熟悉后再升级到 Streamable HTTP,部署成远程服务。任何时候都要考虑安全:只暴露必要工具、对输入做严格校验,避免恶意参数导致命令注入或数据泄露。

亲手做一根“线”,你才会真正理解插头标准的价值。等到 Agent 时代全面到来,你就是那个掌握“造线”手艺的人。

AI 应用场景

企业知识库统一接入

阶段:数据与工具接入层

解决的问题:企业内部有 CRM、文档库、指标平台等多个数据源,过去每个系统都需要定制连接器,改造量大且难以维护。MCP 将资源读取统一为 Resources 原语,Agent 可以像读文件夹一样访问多个数据源。

具体案例:某金融公司用 MCP 连接内部客户系统、产品文档和市场数据库,客服机器人实时查询客户资产、最近沟通记录,而不需要为每个系统写单独接口。

多工具 Agent 旅行规划

阶段:Agent 工具编排层

解决的问题:旅行规划需要天气、机票、酒店三类外部服务协作,传统方式要写多个 SDK 调用,逻辑耦合严重。MCP 的工具发现和统一调用让 Agent 动态组合服务。

具体案例:一个旅行 Agent 通过 MCP 服务器分别接入天气、机票、酒店接口。用户说“订下周三去杭州的机票和酒店”,Agent 自动查询天气、筛选航班、预订酒店,一气呵成。

跨模型工具复用

阶段:模型能力层

解决的问题:团队开发了一套内部工具,希望同时服务于 Claude、GPT 等多个模型。如果每个模型都单独适配,成本极高。MCP 的跨厂商特性让工具一次开发,多处复用。

具体案例:一家创业公司以 MCP 服务器提供了“代码仓库检索”功能,无论是接入 Claude 还是 GPT,客户端只需配置一个服务器地址即可使用,无需改动业务代码。

Python 演示

python47 行
# 一个极简 MCP 风格工具服务器class MCPServer:    def __init__(self, name):        self.name = name        self._tools = {}     def register_tool(self, name, fn):        self._tools[name] = fn     def handle(self, req):        method = req.get("method")        params = req.get("params", {})        msg_id = req.get("id")        if method == "initialize":            return {"jsonrpc": "2.0", "result": {"serverName": self.name,                    "protocolVersion": "1.0"}, "id": msg_id}        if method == "tools/list":            tools = [{"name": k} for k in self._tools]            return {"jsonrpc": "2.0", "result": {"tools": tools}, "id": msg_id}        if method == "tools/call":            tool_name = params.get("name")            args = params.get("arguments", {})            fn = self._tools.get(tool_name)            if fn is None:                return {"jsonrpc": "2.0",                        "error": {"code": -32601, "message": "tool not found"},                        "id": msg_id}            result = fn(**args)            return {"jsonrpc": "2.0", "result": result, "id": msg_id}        return {"jsonrpc": "2.0", "error": {"code": -32601}, "id": msg_id}  mcp = MCPServer("weather-mcp")  def get_weather(city: str) -> str:    return f"{city}: 晴转多云, 25C"  mcp.register_tool("get_weather", get_weather) req = {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {}}print(mcp.handle(req))req2 = {"jsonrpc": "2.0", "id": 2,        "method": "tools/call",        "params": {"name": "get_weather", "arguments": {"city": "北京"}}}print(mcp.handle(req2))
目的:用纯 Python 模拟一个支持初始化、工具发现和工具调用的极简 MCP 服务器,帮助理解协议核心流程。
  1. self._tools = {}工具注册表,保存工具名到处理函数的映射。
  2. def handle(self, req)统一入口,所有 JSON-RPC 请求都从这进入。
  3. if method == "initialize":处理握手消息,返回服务器名和协议版本。
  4. if method == "tools/call":取出工具名和参数,反射调用对应函数。
  5. result = fn(**args)实际执行工具函数,并拿到返回值。
  6. print(mcp.handle(req2))模拟客户端发送工具调用请求并打印结果。

常见误区

误区MCP 是 Anthropic 为了自己模型开发的闭源协议,其他厂商根本用不了。

正解MCP 是完全开放的协议,Anthropic 开源并鼓励所有厂商接入。OpenAI、Google 等都已支持。就像 USB 标准由某家公司推动,但最终属于整个行业。

为何常见:因为 MCP 由 Anthropic 提出,名字又带“Model Context”,容易被误解为私有方案。

误区MCP 不就是 Function Calling 换了个名字吗?有 Function Calling 就够了。

正解Function Calling 是单个模型厂商 API 里的专有能力,比如 OpenAI 的 function calling;MCP 是跨厂商的通用协议。MCP 的客户端可以对接任意支持 MCP 的模型和工具,而 Function Calling 往往被绑定在特定厂商的调用链路上。

为何常见:两者都让模型能调用工具,使用体验相似,所以容易混淆。

误区MCP 是个网络协议,必须部署在远程服务器上,工程量很大。

正解MCP 支持 stdio 本地进程传输,一个 Python 脚本就能跑起本地工具服务器。远程场景才用 Streamable HTTP,轻量得像函数调用。

为何常见:看到“协议”二字,人们会自然联想到复杂的网络架构。

误区MCP 的核心就是让模型调用工具,所以只要看懂 Tools 就够了。

正解MCP 包含 Resources、Tools、Prompts 三大原语。Resources 负责数据上下文,Tools 负责执行动作,Prompts 负责模板复用,三者缺一不可。

为何常见:日常讨论集中在工具调用场景,忽略了资源和提示这两大设计。

误区MCP 是标准协议,所以接入的工具天然安全,不用担心越权或注入。

正解MCP 只定义连接和通信方式,不负责授权和内容安全。开发者必须在服务器端做好工具权限校验、输入过滤和审计日志。

为何常见:标准化给人“官方兜底”的错觉,但安全责任始终在具体实现者身上。

面试题

Q1. MCP 的全称是什么?

单选题 · easy

  • A.Model Context Protocol← 正确答案
  • B.Model Connect Protocol
  • C.Multi Control Protocol
  • D.Main Context Platform

答案:A。MCP 全称是 Model Context Protocol,即“模型上下文协议”。其他选项均为干扰项。

Q2. MCP 最核心的设计理念是什么?

单选题 · easy

  • A.提升模型推理速度
  • B.解耦模型与外部工具← 正确答案
  • C.压缩模型参数量
  • D.统一人类语言翻译

答案:B。MCP 的核心是把模型和工具之间的连接标准化、解耦化,让任意模型都能插拔任意工具,而不是绑定某一家。

Q3. MCP 的三大核心原语是?

单选题 · mid

  • A.Resources Tools Prompts← 正确答案
  • B.Data Models Actions
  • C.Storage Functions Templates
  • D.Input Output Context

答案:A。MCP 定义的三原语是 Resources(资源)、Tools(工具)、Prompts(提示),覆盖上下文、执行和模板三大能力。

Q4. MCP 通信基于哪种消息协议?

单选题 · mid

  • A.JSON-RPC 2.0← 正确答案
  • B.RESTful API
  • C.GraphQL 查询
  • D.WebSocket 通道

答案:A。MCP 使用轻量级的 JSON-RPC 2.0 协议,以键值对消息完成请求-响应,保证跨语言、跨平台可互操作。

Q5. 下列哪些属于 MCP 通信流程中的典型阶段?

多选题 · mid

  • A.初始化握手← 正确答案
  • B.工具列表发现← 正确答案
  • C.工具调用请求← 正确答案
  • D.模型训练迭代

答案:ABC。MCP 流程包含 initialize 握手、tools/list 发现、tools/call 调用等阶段,模型训练不在协议范围内。

Q6. MCP 客户端与服务器之间属于哪种架构?

单选题 · easy

  • A.客户端-服务器← 正确答案
  • B.点对点去中心化
  • C.主从复制架构
  • D.发布订阅模式

答案:A。MCP 采用经典客户端-服务器架构,客户端发起请求,服务器提供能力。

Q7. 以下哪些属于 MCP 的生态参与者?

多选题 · mid

  • A.Anthropic 发起方← 正确答案
  • B.OpenAI 已支持← 正确答案
  • C.Google 也加入← 正确答案
  • D.第三方均可接入← 正确答案

答案:ABCD。MCP 是开放生态,发起方 Anthropic,后续 OpenAI、Google 等厂商以及第三方工具开发者都可以自由接入。

Q8. 关于 MCP 与 Function Calling 的区别,正确的是?

单选题 · hard

  • A.二者完全等同
  • B.MCP 跨厂商标准← 正确答案
  • C.功能完全一样
  • D.协议不可调用

答案:B。Function Calling 是厂商 API 的专有能力,而 MCP 是跨厂商的开放协议。MCP 不绑定单一模型或工具。

Q9. 在 MCP 中,Prompts 原语的主要用途是?

单选题 · hard

  • A.存储文件数据
  • B.提供提示模板← 正确答案
  • C.执行计算任务
  • D.加密通信通道

答案:B。Prompts 用于封装可复用的提示模板,让常见任务指令结构化管理,提升 Agent 的开发效率。

Q10. 以下哪些属于 MCP 的传输方式?

多选题 · extreme

  • A.标准输入输出← 正确答案
  • B.流式HTTP传输← 正确答案
  • C.直接内存访问
  • D.蓝牙设备连接

答案:AB。MCP 支持 stdio 本地传输和 Streamable HTTP 远程传输,分别覆盖本地进程和网络服务两种场景。