MCP(Model Context Protocol) 是 Anthropic 开发的开放标准协议,用于连接 AI 模型与外部世界。本文用大白话讲解 MCP 的核心原理、三大能力、实战应用,以及为什么它被称为"AI 的 USB 接口"。

1. MCP 是什么:用"快充协议"理解 AI 连接器

1.1 AI 遇到的三大尴尬

想象一下,你的手机再强大,没有充电器也是块砖。AI 模型也一样:

AI 的尴尬 大白话举例 技术术语
知识过时 训练完就"定格"了,不知道今天天气 Training Data Cut-off
无法读数据 看不到你的数据库、文件、API No External Data Access
不能动手 只能"说"不能"做"(发邮件、改文件) Read-only, No Tool Invocation

1.2 传统方案:每个品牌都要专用充电器

大白话:以前每个手机品牌都有自己的充电器,华为的充不了苹果,小米的充不了三星。

技术问题

  • 每个 AI 应用都要单独集成工具
  • 重复造轮子,维护成本高
  • 工具无法跨应用复用

1.3 MCP 方案:统一的"快充协议"

大白话:就像现在的 USB-C/PD 快充,一个充电器充所有设备。

技术优势

  • 一次开发,到处使用:开发一个 MCP 工具,所有 AI 应用都能用
  • 标准化接口:基于 JSON-RPC 2.0,像 USB 规范一样
  • 安全可控:用户审批机制,不会乱操作
核心价值

MCP 就是 AI 的 USB 标准:一端连接 AI 模型(手机),一端连接外部工具(充电器/U盘/耳机),中间是标准化的"插口"(协议)。

2. MCP 的核心架构:三个角色的分工协作

MCP 采用 Client-Server 架构,就像你用手机(客户端)访问网站(服务器)。

graph TB subgraph Host["宿主应用(Host)
如 Claude Desktop、VS Code"] Client1["MCP 客户端 1"] Client2["MCP 客户端 2"] end subgraph Server1["MCP 服务器 1
(如天气服务)"] S1["提供工具和数据"] end subgraph Server2["MCP 服务器 2
(如数据库服务)"] S2["提供工具和数据"] end Client1 <-->|"JSON-RPC 2.0
Stdio / HTTP+SSE"| S1 Client2 <-->|"JSON-RPC 2.0
Stdio / HTTP+SSE"| S2 style Host fill:#fecaca,stroke:#ef4444,stroke-width:3px style Server1 fill:#fee2e2,stroke:#f87171,stroke-width:2px style Server2 fill:#fee2e2,stroke:#f87171,stroke-width:2px style Client1 fill:#fef2f2,stroke:#dc2626 style Client2 fill:#fef2f2,stroke:#dc2626
角色 大白话类比 技术说明 示例
Host(宿主) 你的手机 运行 AI 模型的应用,负责发起连接 Claude Desktop、Cursor、VS Code
Client(客户端) 手机里的快充芯片 宿主内部的 MCP 客户端,维持 1:1 连接 内置在宿主应用中
Server(服务器) 充电器/U盘 提供工具、数据、提示的独立进程 天气服务、数据库服务、文件系统

通信机制:两种传输方式

MCP 基于 JSON-RPC 2.0 协议(就像 HTTP 是网页的通信协议):

  • Stdio(标准输入输出):本地进程通信,像 USB 有线连接,速度快
  • HTTP + SSE(Server-Sent Events):远程通信,像无线充电,可以跨网络

3. MCP 的三大核心能力:数据、工具、模板

MCP 服务器就像一个"百宝箱",可以提供三种东西:

3.1 Resources(资源)—— AI 的"外置硬盘"

大白话:Resources 是 AI 可以读取的数据,就像给手机插个 U 盘。

技术特性

  • 使用 URI 标识:file:///home/user/report.pdfpostgres://db/customers
  • 支持文本(UTF-8)和二进制(base64)数据
  • 支持实时更新:通过订阅机制监听资源变化
应用控制型 vs 模型控制型

Resources 是"应用控制型":就像手机相册,你主动选照片给 AI 看,AI 不能自己翻。Claude Desktop 会要求用户显式选择资源后才能使用,确保用户完全掌控数据访问。

实际用途

数据类型 大白话举例 技术应用
文件内容 让 AI 读你的代码文件 源代码分析、日志诊断
数据库记录 让 AI 查你的用户表 数据分析、报表生成
API 响应 让 AI 看天气 API 返回 实时数据处理
系统状态 让 AI 读 CPU 使用率 性能监控、故障诊断

3.2 Tools(工具)—— AI 的"机械臂"

大白话:Tools 是 AI 可以执行的操作,就像给机器人装上机械臂,能干活了。

技术特性

  • 模型控制型:AI 可以自己决定调用(但需要用户审批)
  • 参数化:工具定义包含输入参数的 JSON Schema
  • 返回结果:执行后返回文本或二进制数据

工具定义示例(天气查询工具):

{
  "name": "get_forecast",
  "description": "获取指定位置的天气预报",
  "inputSchema": {
    "type": "object",
    "properties": {
      "latitude": {
        "type": "number",
        "description": "纬度"
      },
      "longitude": {
        "type": "number",
        "description": "经度"
      }
    },
    "required": ["latitude", "longitude"]
  }
}

工作流程:AI 如何使用工具

sequenceDiagram participant 用户 participant AI模型 participant MCP客户端 participant MCP服务器 用户->>AI模型: "北京今天天气怎么样?" AI模型->>AI模型: 分析需求 Note over AI模型: 需要调用
get_forecast工具 AI模型->>MCP客户端: 请求工具列表 MCP客户端->>MCP服务器: tools/list MCP服务器->>MCP客户端: 返回可用工具 MCP客户端->>AI模型: 工具列表 AI模型->>用户: "需要调用天气工具,是否允许?" 用户->>AI模型: "允许" AI模型->>MCP客户端: 调用 get_forecast MCP客户端->>MCP服务器: tools/call(latitude=39.9, longitude=116.4) MCP服务器->>MCP服务器: 查询天气API MCP服务器->>MCP客户端: 返回天气数据 MCP客户端->>AI模型: 天气结果 AI模型->>用户: "北京今天晴,20°C"
安全机制

用户审批是关键:虽然 AI 可以"决定"调用工具,但大多数客户端实现都会要求用户确认。就像手机应用要访问相机,系统会弹窗让你同意。

实际用途

  • 系统操作:执行 shell 命令、创建文件、修改配置
  • API 调用:发送邮件、查询天气、搜索数据
  • 数据处理:计算统计、格式转换、生成图表
  • 外部集成:调用第三方服务(GitHub、Jira、Slack)

3.3 Prompts(提示模板)—— AI 的"快捷指令"

大白话:Prompts 是预写好的任务模板,就像 Siri 的快捷指令,一键触发复杂任务。

技术特性

  • 预定义模板:包含任务描述和参数占位符
  • 参数化:可以接受动态输入
  • 快速启动:帮助用户快速完成常见任务

提示模板示例

{
  "name": "code_review",
  "description": "代码审查助手",
  "arguments": [
    {
      "name": "file_path",
      "description": "要审查的文件路径",
      "required": true
    }
  ]
}

典型用途

场景 模板示例 效果
代码审查 "审查 {file_path} 的代码质量" 快速触发代码审查流程
文档生成 "为 {module_name} 生成 API 文档" 一键生成标准文档
数据分析 "分析 {dataset} 的用户行为" 自动化分析流程
Bug 诊断 "诊断 {log_file} 中的错误" 快速定位问题

4. MCP 的连接生命周期:从握手到挂断

MCP 的连接分为三个阶段,就像打电话:拨号(初始化)→ 通话(消息交换)→ 挂断(终止)。

sequenceDiagram participant C as 客户端(Client) participant S as 服务器(Server) Note over C,S: 阶段 1:初始化(握手) C->>S: initialize 请求
(协议版本 + 客户端能力) S->>C: initialize 响应
(服务器版本 + 服务器能力) C->>S: initialized 通知
(确认完成) Note over C,S: 阶段 2:正常通信 C->>S: tools/list 请求 S->>C: 返回工具列表 C->>S: tools/call 请求 S->>C: 返回执行结果 S->>C: resources/updated 通知 Note over C,S: 阶段 3:终止(挂断) C->>S: close() 关闭连接

消息类型:4 种通信方式

消息类型 大白话类比 是否需要响应 示例
Requests(请求) 打电话问问题 tools/list、tools/call
Results(结果) 对方的回答 工具执行结果
Errors(错误) 对方说"我不知道" 工具调用失败
Notifications(通知) 发短信(不等回复) 资源更新通知

5. 快速上手:开发第一个 MCP 服务器

让我们用 Python 开发一个天气查询服务器,实战演练 MCP 开发。

5.1 Python 实现(基于 FastMCP)

from typing import Any
import httpx
from mcp.server.fastmcp import FastMCP

# 初始化 MCP 服务器
mcp = FastMCP("weather")

# 定义工具:获取天气预报
@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
    """获取指定位置的天气预报

    Args:
        latitude: 纬度
        longitude: 经度
    """
    url = f"https://api.weather.gov/points/{latitude},{longitude}"

    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(url, timeout=30.0)
            response.raise_for_status()
            data = response.json()

            forecast_url = data["properties"]["forecast"]
            forecast_response = await client.get(forecast_url, timeout=30.0)
            forecast_data = forecast_response.json()

            periods = forecast_data["properties"]["periods"]
            forecast_text = "\n".join([
                f"{p['name']}: {p['temperature']}°{p['temperatureUnit']} - {p['shortForecast']}"
                for p in periods[:5]
            ])

            return forecast_text
        except Exception as e:
            return f"无法获取天气预报: {str(e)}"

# 定义工具:获取天气警报
@mcp.tool()
async def get_alerts(state: str) -> str:
    """获取美国各州的天气警报

    Args:
        state: 美国州代码(如 CA, NY)
    """
    url = f"https://api.weather.gov/alerts/active/area/{state}"

    async with httpx.AsyncClient() as client:
        try:
            response = await client.get(url, timeout=30.0)
            data = response.json()

            if not data.get("features"):
                return f"{state} 州当前无天气警报"

            alerts = []
            for feature in data["features"]:
                props = feature["properties"]
                alerts.append(
                    f"事件: {props.get('event', '未知')}\n"
                    f"严重程度: {props.get('severity', '未知')}\n"
                    f"描述: {props.get('description', '无')}"
                )

            return "\n---\n".join(alerts)
        except Exception as e:
            return f"无法获取警报信息: {str(e)}"

5.2 连接到 Claude Desktop

在 Claude Desktop 的配置文件中添加(MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "weather": {
      "command": "python",
      "args": ["/path/to/weather.py"]
    }
  }
}

重启 Claude Desktop,AI 就能调用天气查询工具了!

代码解读
  • @mcp.tool() 装饰器:自动将函数注册为 MCP 工具
  • docstring:自动生成工具描述和参数说明
  • type hints:自动生成 JSON Schema
  • FastMCP 框架自动处理 JSON-RPC 2.0 通信

6. 实战应用场景:MCP 能干什么

应用场景 MCP 能力 大白话举例 价值
数据库查询 Resources + Tools AI 帮你写 SQL、查用户数据、生成报表 显著提升数据分析效率
代码审查 Resources + Tools AI 读你的代码,找 Bug、提优化建议 帮助发现潜在问题
自动化运维 Tools AI 帮你重启服务、查日志、监控告警 加快故障响应速度
API 集成 Tools AI 帮你发邮件、查天气、调用第三方服务 自动化流程,解放双手
企业知识库 Resources + Prompts AI 检索内部文档、回答业务问题 降低知识检索成本

7. 安全机制:MCP 如何确保安全

MCP 提供了多层安全保障,就像银行的多重防护:

  • 用户审批:工具调用需要用户确认(像手机应用权限)
  • 能力声明:服务器明确声明提供的能力,客户端可选择性启用
  • 进程隔离:每个 MCP 服务器是独立进程,互不影响
  • 协议标准化:基于 JSON-RPC 2.0,易于审计和监控
开发 MCP 服务器的安全最佳实践
  • 严格验证输入:防止 SQL 注入、命令注入
  • 限制权限范围:如文件系统访问路径白名单
  • 记录操作日志:所有工具调用都应记录
  • 敏感操作确认:删除文件、发送邮件等必须二次确认

8. MCP 的未来展望:开放生态的想象力

作为 开放标准,MCP 的未来充满可能性:

8.1 生态扩展

  • MCP 工具市场:像 VSCode 插件市场,开发者发布工具,用户一键安装
  • 跨 AI 应用:Claude、GPT、Gemini 都支持 MCP,工具通用
  • 行业标准:成为 AI 工具集成的事实标准

8.2 技术演进

  • 云端 MCP 服务:HTTP + SSE 传输支持托管服务
  • 实时协作:多个 AI 模型共享同一个 MCP 服务器
  • 联邦学习:MCP 作为联邦学习的数据访问层

8.3 企业应用

  • 企业内部系统:通过 MCP 安全暴露给 AI(ERP、CRM、OA)
  • 智能代理:AI Agent 通过 MCP 编排多个工具完成复杂任务
  • 业务自动化:RPA + AI + MCP 实现端到端业务流程自动化

9. 总结:MCP 是 AI 时代的基础设施

MCP(Model Context Protocol) 不仅是一个协议,更是 AI 时代的基础设施

核心特性 技术价值 商业价值
统一标准 一次开发,到处使用 降低集成成本 80%
三大能力 Resources + Tools + Prompts 覆盖所有 AI 应用场景
安全可控 用户审批 + 权限隔离 满足企业安全合规
简单易用 基于 JSON-RPC 2.0 开发门槛低,上手快
未来已来

随着 MCP 生态的不断发展,AI 模型将能够更安全、更高效地与现实世界交互。MCP 就像 AI 的 USB 标准,让 AI 从"智能对话"进化为"智能行动",真正成为人类的超级助手。

10. 延伸阅读与资源