MCP 协议入门与概述
MCP 协议入门与概述
什么是 MCP
基本定义
MCP(Model Context Protocol,模型上下文协议) 是一个开放标准协议,用于建立 LLM 应用与外部数据源、工具和服务之间的标准化双向连接。它由 Anthropic(Claude 的开发公司)于 2024 年 11 月 25 日 发布并开源。
如果打个比方:MCP 之于 AI 应用,就像 USB-C 之于电子设备。在 USB-C 出现之前,每个设备都有不同的接口;在 MCP 出现之前,每个 AI 应用都需要为每个数据源单独开发集成。
MCP 解决的核心问题
在没有 MCP 的世界里,AI 应用集成外部工具面临严重的规模化瓶颈:
| 问题 | 具体表现 |
|---|---|
| 集成爆炸 | M 个应用 × N 个工具 = M×N 个集成,开发成本指数级增长 |
| 重复开发 | 同一个数据库连接,Claude 写一遍、ChatGPT 写一遍、Cursor 再写一遍 |
| 无法复用 | 每个平台的工具定义格式不同,无法跨平台共享 |
| 维护困难 | 工具 API 变更时,所有集成都需要单独更新 |
| 安全风险 | 缺乏统一的权限管理和安全审计机制 |
MCP 将 M×N 问题降维为 M+N:每个 AI 应用实现一次 MCP 客户端,每个工具实现一次 MCP 服务端,即可互联互通。
关键时间线
[!tip] 为什么 MCP 如此重要?
OpenAI(Anthropic 的主要竞争对手)在 2025 年 3 月正式采纳了 MCP,这是该协议跨厂商影响力的里程碑事件。Google 随后也采纳 MCP 用于 Gemini 模型的外部数据连接。截至 2025 年底,MCP 已成为 AI 工具集成事实上的行业标准。
MCP 能做什么
典型应用场景
具体案例:
- Claude Desktop 通过 MCP 连接本地文件系统,直接读取和操作你的文件
- Cursor / VS Code 通过 MCP 接入数据库、Git、部署工具,让 AI 编程助手更强大
- ChatGPT 通过 MCP 调用外部 API、搜索引擎等工具获取实时信息
- 自定义 AI Agent 通过 MCP 连接企业内部系统,实现自动化工作流
已支持 MCP 的平台
| 平台 | 类型 | 说明 |
|---|---|---|
| Claude Desktop | AI 桌面应用 | Anthropic 官方,原生 MCP 支持 |
| ChatGPT | AI 对话平台 | OpenAI 于 2025.03 采纳 |
| Cursor | AI IDE | 深度集成 MCP 工具 |
| VS Code | 代码编辑器 | 通过扩展支持 MCP |
| JetBrains IDEs | 代码编辑器 | 全线产品支持 MCP |
| Google Gemini | AI 平台 | 用于外部数据连接 |
MCP vs 传统工具集成
与 Function Calling 的对比
Function Calling(函数调用)是目前大多数 LLM 提供商支持的机制,允许模型调用预定义的函数。MCP 和 Function Calling 并非替代关系,而是不同层级的解决方案:
| 维度 | Function Calling | MCP |
|---|---|---|
| 定义 | LLM 直接调用嵌入在提示词中的工具 | 标准化协议,运行时动态发现和使用工具 |
| 集成方式 | 每个应用针对每个提供商单独实现 | 写一次,所有平台通用 |
| 厂商绑定 | 绑定特定提供商 API(OpenAI / Anthropic / Google) | 客户端无关,跨所有 MCP 兼容宿主使用 |
| 工具发现 | 静态 — 工具必须硬编码 | 动态 — 服务端运行时列出可用工具 |
| 数据源 | 受限于应用内嵌的能力 | 任意 — 任何服务端可暴露任何数据 |
| 双向通信 | 否 — 模型到工具单向 | 是 — Sampling 允许服务端请求模型推理 |
| 生态复用 | 每个厂商独立生态 | 共享生态,可复用的服务端 |
[!warning] 常见误解
MCP 不是 Function Calling 的替代品。MCP 是在 Function Calling 之上提供了一层标准化的工具发现、管理和连接协议。实际上,MCP Client 通常会将 MCP Server 暴露的 Tools 转换为对应 LLM 提供商的 Function Calling 格式来执行。
直观理解
把 AI 应用比作一台电脑:
- Function Calling = 电脑上的 USB 接口(有了接口,但每个设备驱动还是要单独装)
- MCP = 统一的 USB 标准 + 即插即用(有了标准,任何设备插上就能用)
MCP 的技术定位
在 AI 技术栈中的位置
MCP 位于协议层,是 AI 应用框架与外部世界之间的桥梁。它不替代 LangChain 等应用框架,也不替代具体的模型 API,而是提供标准化的工具连接协议。
与 LangChain 的关系
如果你已经学过前面的 LangChain 系列,可以这样理解 MCP 在其中的定位:
| LangChain 概念 | MCP 对应 | 说明 |
|---|---|---|
| Tool(工具) | MCP Tool | MCP 提供标准化的工具定义和发现机制 |
| Retriever(检索器) | MCP Resource | MCP 可以暴露数据资源供检索 |
| Prompt Template | MCP Prompt | MCP 提供可复用的提示词模板 |
| Agent | MCP Host | Agent 通过 MCP Client 连接各种 MCP Server |
[!tip] LangChain + MCP
LangChain 已经开始集成 MCP 支持。你可以将 MCP Server 暴露的 Tools 转换为 LangChain 的 Tool 格式,让 LangChain Agent 直接使用 MCP 生态中的工具。
快速体验 MCP
安装与第一个 MCP Server
以 Python 为例,用最少的代码启动一个 MCP Server:
# 创建项目目录
mkdir my-first-mcp && cd my-first-mcp
# 初始化并安装 MCP SDK
uv init
uv add "mcp[cli]"
创建 server.py:
from mcp.server.fastmcp import FastMCP
# 创建 MCP Server 实例
mcp = FastMCP("my-first-server")
# 定义一个工具 —— LLM 可以调用它
@mcp.tool()
async def hello(name: str) -> str:
"""向指定用户打招呼"""
return f"你好,{name}!这是你的第一个 MCP 工具。"
# 定义一个资源 —— 客户端可以读取它
@mcp.resource("config://app-info")
def get_app_info() -> str:
"""获取应用信息"""
return "这是我的第一个 MCP Server,版本 0.1.0"
# 启动服务(使用 stdio 传输)
if __name__ == "__main__":
mcp.run(transport="stdio")
测试 MCP Server
MCP 官方提供了 MCP Inspector 调试工具,可以快速测试你的 Server:
# 使用 MCP Inspector 测试
mcp dev server.py
这会打开一个 Web 界面,你可以:
- 查看 Server 暴露的所有 Tools、Resources、Prompts
- 手动调用 Tools 查看返回结果
- 读取 Resources 查看数据
- 检查协议通信日志
[!tip] 推荐学习路径
建议按以下顺序学习 MCP 系列:
- 本文 — 了解 MCP 是什么、解决什么问题
- 核心架构与协议原理 — 理解 Host-Client-Server 模型和连接生命周期
- 传输机制详解 — 掌握 stdio 和 Streamable HTTP 两种传输方式
- 核心能力 — 深入学习 Tools、Resources、Prompts 三大原语
- 服务端开发实战 — 动手编写完整的 MCP Server
- 客户端开发与集成 — 学习如何消费 MCP 服务
- 安全与最佳实践 — 生产环境部署的安全指南
总结
| 要点 | 内容 |
|---|---|
| 是什么 | MCP 是一个开放标准协议,标准化 AI 应用与外部工具的连接 |
| 谁创建 | Anthropic 于 2024.11 发布并开源,2025.12 捐赠给 Linux 基金会 |
| 解决什么 | 将 M×N 集成问题降维为 M+N,一次开发全平台通用 |
| 核心价值 | 标准化、可复用、跨平台、动态发现、双向通信 |
| 谁在用 | Claude、ChatGPT、Cursor、VS Code、JetBrains、Gemini 等 |
| 怎么学 | 先理解架构 → 再学协议 → 然后动手开发 → 最后关注安全 |