Skip to content

MCP:模型上下文协议

MCP (Model Context Protocol) 是 Anthropic 于 2024 年底推出的开放协议,目标是标准化 LLM 应用与外部数据源/工具之间的通信

打个比方:在 MCP 出现之前,每个 AI 应用想接入一个新工具(比如数据库、日历、文件系统),都要写一套自定义的集成代码。这就像每个电器都用不同的插头——MCP 就是那个「统一插座标准」。

Before MCP
App A ⟷ 自定义协议 ⟷ Tool 1
App B ⟷ 另一套协议 ⟷ Tool 2
N × M 种集成
After MCP
App A / B / C ⟷ MCP ⟷ Tool 1 / 2 / 3
N × 1 协议

MCP 解决的不只是技术问题,更是生态问题。在 MCP 出现之前,AI 工具集成是碎片化的:每个 AI 应用需要为每个工具写定制代码,工具开发者也需要为每个平台做适配。这造成了巨大的重复劳动和生态割裂。

MCP 的意义在于:就像 USB 统一了外设接口、HTTP 统一了 Web 通信,MCP 正在统一 AI 应用与工具之间的通信标准。一旦形成标准,网络效应就会发挥作用——越多客户端支持 MCP,就有越多开发者愿意写 MCP Server;反之亦然。

  1. 减少重复开发 —— 工具开发者写一次 MCP Server,所有支持 MCP 的客户端都能用
  2. 生态共享 —— 社区开发的 MCP Server 可以直接复用
  3. 关注点分离 —— AI 应用专注于用户体验,工具专注于能力实现

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预定义的提示模板代码审查模板、翻译模板

MCP 支持三种传输方式:

Transport通信方式说明
stdio本地进程通信,最简单Server 作为子进程运行,适合本地工具
SSEHTTP 长连接,单向流Server-Sent Events,已逐步被替代
Streamable HTTPHTTP 双向流,最灵活2025 新增,推荐用于远程 Server
  • stdio:最常用,Server 以子进程启动,通过 stdin/stdout 通信。适合本地工具
  • Streamable HTTP:2025 年新增,替代 SSE,支持远程部署的 MCP Server
  • 客户端支持:Claude Desktop、Claude Code、VS Code (Copilot)、Cursor、Windsurf 等主流 AI 编程工具
  • 官方 Server:Anthropic 提供了 filesystem、GitHub、Slack、Google Drive 等参考实现
  • 社区生态:数千个社区 MCP Server 覆盖数据库、云服务、开发工具等
  • 企业采用:越来越多企业将内部系统封装为 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()

安装与配置:

Terminal window
# 安装 MCP SDK
pip 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(预定义提示模板,如代码审查模板)。三者分别对应"做事"、"读数据"、"给建议"。