什么是 MCP(Model Context Protocol)
MCP,全称 Model Context Protocol(模型上下文协议),是 Anthropic 于 2024 年 11 月正式开源的一个通信标准协议。它定义了 AI 大语言模型(LLM)与外部工具、数据源之间进行交互的规范化方式。
简单来说,MCP 就像是 AI 世界的 USB 接口——在 USB 标准出现之前,每种外设都需要专属的连接方式;USB 统一了接口规范后,任何设备只要遵循 USB 标准就能互相连接。MCP 在 AI 领域扮演的正是这个角色。
┌─────────────────────────────────────────────────────────────────┐ │ MCP Host │ │ (Claude Desktop / Cursor / VSCode / 自定义 AI 应用) │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ MCP Client 1│ │ MCP Client 2│ │ MCP Client 3│ │ │ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │ └──────────┼────────────────┼────────────────┼──────────────────┘ │ stdio │ HTTP+SSE │ stdio ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ MCP Server │ │ MCP Server │ │ MCP Server │ │ 文件系统 │ │ GitHub API │ │ 数据库查询 │ └──────────────┘ └──────────────┘ └──────────────┘
Anthropic 为何创建 MCP
在 MCP 出现之前,AI 应用开发面临严重的集成碎片化问题。每当开发者想让 AI 访问一种新工具或数据源时,都需要为那个特定的 LLM、那个特定的应用单独编写集成代码。
MCP 之前的困境
- N 个 AI 应用 × M 种工具 = N×M 种集成
- 每种集成都有独特的 API 格式
- 换一个 LLM,所有集成要重写
- 工具开发者需要为每个平台单独适配
- 安全审计困难,行为不可预测
MCP 带来的改变
- N 个 AI 应用 + M 种工具,只需 N+M 种实现
- 统一的 JSON-RPC 2.0 消息格式
- MCP Server 与具体 LLM 无关
- 工具开发者一次实现,处处可用
- 标准化安全模型,行为可审计
解决 AI 工具碎片化问题
碎片化问题在实践中具体表现为以下几种形式:
上下文窗口的局限
LLM 本身是无状态的,它只能处理当前对话窗口内的信息。要让 AI 访问外部文件、实时数据或执行操作,必须通过某种机制将这些能力注入给它。MCP 提供了一个标准化的"能力注入"框架。
Function Calling 的不足
OpenAI 早期提出的 Function Calling 虽然解决了让 LLM 调用函数的问题,但它是模型绑定的——函数的定义格式与调用方式都依赖于具体的 LLM API。如果换用不同的模型,就需要修改函数定义格式。MCP 则是完全模型无关的标准协议。
工具发现与动态能力
Function Calling 中,所有可用函数必须在调用时一次性传入 LLM。而 MCP 支持动态的能力发现:Host 可以在运行时查询 Server 提供了哪些 Tools、Resources 和 Prompts,并根据情况动态决定使用哪些能力。
MCP 生态现状(2025 年)
MCP 自 2024 年 11 月开源后,在 2025 年经历了爆发式增长。以下是当前主要集成情况:
已集成 MCP 的主流工具
Claude Desktop
官方参考实现,支持 stdio 传输,配置 JSON 文件注册 Server
Cursor IDE
AI 代码编辑器,深度集成 MCP,支持代码库级别的工具调用
VSCode Copilot
GitHub Copilot 集成 MCP,通过 Agent 模式调用外部工具
Windsurf
Codeium 开发的 AI IDE,支持 MCP Server 扩展
Zed Editor
高性能代码编辑器,原生支持 MCP 协议集成
Continue.dev
开源 AI 代码助手,支持自定义 MCP Server 接入
官方 MCP Server 库
Anthropic 在 GitHub 上维护了一个官方 MCP Server 集合(modelcontextprotocol/servers),包含以下常用服务:
与 Function Calling 的本质区别
这是 MCP 初学者最常见的困惑,需要仔细辨析:
| 维度 | Function Calling | MCP |
|---|---|---|
| 层次 | LLM API 层的功能 | 应用层的通信协议 |
| 耦合性 | 与特定 LLM API 绑定 | 完全与 LLM 无关 |
| 工具发现 | 静态,调用时一次性传入 | 动态,运行时查询 |
| 传输方式 | HTTP API 调用的一部分 | 独立的 stdio/HTTP/SSE 连接 |
| 状态管理 | 无状态 | 有状态(持久连接) |
| 能力类型 | 仅工具调用 | Tools + Resources + Prompts + Sampling |
| 安全模型 | 由调用方自行实现 | 协议层标准化安全机制 |
MCP 的核心能力三角
MCP 协议定义了三种核心能力类型,每种都有明确的适用场景: