从“能说”到“能做”,差了什么?

大模型很擅长理解和生成内容,但它的能力边界止步于训练数据。当你问它“帮我查一下上周的销售数据”或“把这段代码提交到 GitHub”时,它无法直接完成——因为模型本身没有连接数据库的能力,也没有操作外部系统的通道。

让模型调用外部工具,是 AI 从“聊天机器人”进化为“智能体”的关键一步。但在这条路上,一直横亘着一个工程难题:每个模型和每个工具之间的连接方式都不一样。为 Claude 写的插件没法在 GPT 上用,接入 PostgreSQL 的逻辑和调用 Slack API 的逻辑完全是两套东西。结果就是“N 个模型 × M 个工具 = N×M 个适配器”的集成困境。MCP 正是为了解决这个问题而诞生的。

MCP 是什么?

MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年 11 月推出的开放协议,目的是统一大语言模型与外部数据源、工具之间的通信方式。它的定位不是模型,也不是某个具体的工具,而是一套“让模型能理解并安全调用外部工具”的通信规范。

可以把它类比为 AI 世界的 USB-C 接口:过去每个设备有自己的一套充电接口,现在统一成一种标准,任何符合标准的设备都能即插即用。MCP 做的事情类似——让 AI 应用和外部工具之间不再需要为每一对组合单独开发适配层,而是通过一个标准协议互相“对话”。

核心架构:Host、Client、Server

MCP 采用客户端-服务器架构,但角色划分比普通的 C/S 模型更细致,涉及三个关键参与方:

Host(主机) 是用户直接使用的 AI 应用,比如 Claude Desktop、Cursor IDE 或自研的 Agent 应用。Host 负责管理对话生命周期、呈现界面,并决定什么时候需要调用外部能力。

Client(客户端) 由 Host 创建,每个 Client 负责与一个具体的 MCP Server 保持连接。如果 Host 同时接入了文件系统和 GitHub 两个 Server,它就会创建两个 Client 实例,各自维护独立的连接。

Server(服务器) 是能力的提供方,封装了外部工具或数据源的具体逻辑——可能是查询本地数据库、调用远程 API、读取文件系统,或者执行一段代码。Server 负责把外部能力“翻译”成 MCP 协议能理解的形式,暴露给 Client 调用。

这种三层设计的好处在于解耦:Host 不需要知道每个工具的内部实现,Server 也不需要关心是哪个 AI 应用在调用它。任何符合 MCP 规范的 Host 都能连接任何符合规范的 Server。

三种核心交互方式

MCP 将 AI 与外部世界的交互抽象为三种基本模式,称为“核心原语”:

Tools(工具) 是模型可以主动调用的可执行操作。比如“查询天气”“提交代码”“创建工单”,每个 Tool 包含名称、描述、参数定义和执行逻辑。模型根据用户的意图自行判断该调用哪个 Tool、传什么参数。

Resources(资源) 是模型可以读取的数据。与 Tools 的“执行”不同,Resources 提供的是“内容”——一篇文档、一条数据库记录、一份配置文件。模型可以把 Resource 的内容纳入推理上下文,用来回答问题或辅助决策。

Prompts(提示) 是预设的工作流模板,用于引导模型完成特定的任务模式。它把“什么场景下该怎么用这些工具”的知识固化下来,降低模型“用错工具”的概率。

这三者的关系可以这样理解:Resources 告诉模型“有什么信息可用”,Tools 告诉模型“能做什么操作”,Prompts 则指导模型“在什么情况下该怎么做”。

和传统 API 有什么不同

MCP 和传统 API 最容易混淆,但它们的服务对象截然不同。传统 API 是给人写的程序用的:调用方是代码,参数是强结构的,调用时机和顺序由开发者预先确定。API 不关心“语义”,只关心你传了什么参数、返回了什么结果。

MCP 是给模型用的。模型不知道某个 API 的端点是什么、参数怎么填,所以 MCP 要求 Server 提供自描述的元数据——用自然语言描述工具能做什么,用 JSON Schema 定义参数格式。模型通过读取这些描述来“理解”自己能调用什么能力,然后生成符合规范的调用请求。

在底层,MCP Server 最终仍然会调用传统 API 来完成实际工作。MCP 做的是在 API 之上加一层“模型可读”的发现层和调用层,让 API 从“需要人类写代码调用”变成“模型可以自主理解和调用”。

另一个关键区别是动态发现。传统 API 的集成是静态的——你在代码里写死了要调用哪些端点。MCP 允许模型在运行时发现可用的工具列表,并根据任务需要灵活选择。这意味着当你往 MCP 生态中添加一个新的 Server 时,不需要修改 AI 应用的任何代码,模型就能自动“看到”并调用它。