MCP:模型上下文协议
MCP 是什么
Section titled “MCP 是什么”MCP (Model Context Protocol) 是 Anthropic 于 2024 年底推出的开放协议,目标是标准化 LLM 应用与外部数据源/工具之间的通信。
打个比方:在 MCP 出现之前,每个 AI 应用想接入一个新工具(比如数据库、日历、文件系统),都要写一套自定义的集成代码。这就像每个电器都用不同的插头——MCP 就是那个「统一插座标准」。
Before MCP
App A ⟷ 自定义协议 ⟷ Tool 1
App B ⟷ 另一套协议 ⟷ Tool 2
N × M 种集成
App B ⟷ 另一套协议 ⟷ Tool 2
N × M 种集成
After MCP
App A / B / C ⟷ MCP ⟷ Tool 1 / 2 / 3
N × 1 协议
N × 1 协议
为什么需要标准化协议
Section titled “为什么需要标准化协议”MCP 解决的不只是技术问题,更是生态问题。在 MCP 出现之前,AI 工具集成是碎片化的:每个 AI 应用需要为每个工具写定制代码,工具开发者也需要为每个平台做适配。这造成了巨大的重复劳动和生态割裂。
MCP 的意义在于:就像 USB 统一了外设接口、HTTP 统一了 Web 通信,MCP 正在统一 AI 应用与工具之间的通信标准。一旦形成标准,网络效应就会发挥作用——越多客户端支持 MCP,就有越多开发者愿意写 MCP Server;反之亦然。
- 减少重复开发 —— 工具开发者写一次 MCP Server,所有支持 MCP 的客户端都能用
- 生态共享 —— 社区开发的 MCP Server 可以直接复用
- 关注点分离 —— AI 应用专注于用户体验,工具专注于能力实现
MCP 架构
Section titled “MCP 架构”MCP 采用 Client-Server 架构,包含三个核心角色:
flowchart TD
subgraph Host["Host(Claude Desktop / VS Code / IDE)"]
subgraph Client["MCP Client"]
C1["Client 1"]
C2["Client 2"]
end
end
C1 --> S1["MCP Server\n(文件系统)"]
C2 --> S2["MCP Server\n(数据库)"]
- Host:终端用户使用的应用程序,负责管理 MCP Client 实例
- Client:在 Host 内部,与 MCP Server 建立一对一连接
- Server:暴露工具 (Tools)、资源 (Resources)、提示模板 (Prompts) 给 Client
MCP Server 可以提供三种能力:
| 能力 | 说明 | 示例 |
|---|---|---|
| Tools | 可执行的操作 | 查询数据库、发送邮件 |
| Resources | 可读取的数据 | 文件内容、API 响应 |
| Prompts | 预定义的提示模板 | 代码审查模板、翻译模板 |
Transport 层
Section titled “Transport 层”MCP 支持三种传输方式:
| Transport | 通信方式 | 说明 |
|---|---|---|
| stdio | 本地进程通信,最简单 | Server 作为子进程运行,适合本地工具 |
| SSE | HTTP 长连接,单向流 | Server-Sent Events,已逐步被替代 |
| Streamable HTTP | HTTP 双向流,最灵活 | 2025 新增,推荐用于远程 Server |
- stdio:最常用,Server 以子进程启动,通过 stdin/stdout 通信。适合本地工具
- Streamable HTTP:2025 年新增,替代 SSE,支持远程部署的 MCP Server
MCP 生态现状(2025-2026)
Section titled “MCP 生态现状(2025-2026)”- 客户端支持:Claude Desktop、Claude Code、VS Code (Copilot)、Cursor、Windsurf 等主流 AI 编程工具
- 官方 Server:Anthropic 提供了 filesystem、GitHub、Slack、Google Drive 等参考实现
- 社区生态:数千个社区 MCP Server 覆盖数据库、云服务、开发工具等
- 企业采用:越来越多企业将内部系统封装为 MCP Server
如何写一个 MCP Server
Section titled “如何写一个 MCP Server”以 Python 为例,使用官方 SDK 创建一个简单的计算器 MCP Server:
from mcp.server.fastmcp import FastMCP
# 创建 MCP Server 实例mcp = FastMCP("Calculator")
@mcp.tool()def add(a: float, b: float) -> float: """将两个数字相加。当用户需要做加法运算时使用此工具。""" return a + b
@mcp.tool()def multiply(a: float, b: float) -> float: """将两个数字相乘。当用户需要做乘法运算时使用此工具。""" return a * b
@mcp.resource("config://version")def get_version() -> str: """返回计算器版本号""" return "1.0.0"
# 启动 Server(默认使用 stdio transport)if __name__ == "__main__": mcp.run()安装与配置:
# 安装 MCP SDKpip install mcp
# 在 Claude Desktop 配置中添加(claude_desktop_config.json)# {# "mcpServers": {# "calculator": {# "command": "python",# "args": ["path/to/calculator_server.py"]# }# }# }自测题 1:MCP 中 Host、Client、Server 分别是什么角色?
Host 是用户使用的应用(如 Claude Desktop),Client 是 Host 内部管理与 Server 通信的组件(每个 Server 对应一个 Client 实例),Server 是提供工具/资源/提示的外部服务。类比:Host 是办公室,Client 是办公室里的电话机,Server 是电话另一端的服务商。
自测题 2:stdio 和 Streamable HTTP 两种 Transport 各适用什么场景?
stdio 适合本地工具(Server 作为子进程运行在同一台机器上,通过标准输入输出通信,零网络开销),Streamable HTTP 适合远程部署的 Server(需要跨网络通信,支持多客户端并发连接)。
自测题 3:MCP Server 的三种能力是什么?
Tools(可执行操作,如查询数据库)、Resources(可读取数据,如文件内容)、Prompts(预定义提示模板,如代码审查模板)。三者分别对应"做事"、"读数据"、"给建议"。