MCP 与 Agent 生态 / MCP 协议详解(Model Context Protocol)
CHAPTER 06 · TOPIC 01

MCP 协议详解(Model Context Protocol)

MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年底推出的开放标准协议,旨在为大语言模型(LLM)与外部数据源、工具之间建立统一的通信接口。MCP 被比喻为"AI 世界的 USB-C 接口"——一个协议连接所有工具和数据源。本章深入讲解 …

一句话理解

MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年底推出的开放标准协议,旨在为大语言模型(LLM)与外部数据源、工具之间建立统一的通信接口。MCP 被比喻为"AI 世界的 USB-C 接口"——一个协议连接所有工具和数据源。本章深入讲解 …

阅读前置

建议先完成第 05 章

本文关注

MCP 诞生的背景、MCP 架构、协议规范

所在知识层

连接协议 · MCP 与 Agent 生态

文章导航
主教学视觉MCP 协议详解(Model Context Protocol) · 知识结构

点击图中节点可定位到对应正文。

核心主题关系与流向

引言

MCP(Model Context Protocol,模型上下文协议)是 Anthropic 于 2024 年底推出的开放标准协议,旨在为大语言模型(LLM)与外部数据源、工具之间建立统一的通信接口。MCP 被比喻为"AI 世界的 USB-C 接口"——一个协议连接所有工具和数据源。本章深入讲解 MCP 的架构、协议规范和工作原理。


1. MCP 诞生的背景

1.1 MCP 之前的痛点

语义 SVG 重绘MCP 协议详解(Model Context Protocol) · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文传统方式(M×N 问题):系统核心AI 应用 A自定义集成工具 1工具、结果与反馈工具 2工具 3
查看原文结构
传统方式(M×N 问题):
  AI 应用 A → 自定义集成 → 工具 1
  AI 应用 A → 自定义集成 → 工具 2
  AI 应用 A → 自定义集成 → 工具 3
  AI 应用 B → 自定义集成 → 工具 1
  AI 应用 B → 自定义集成 → 工具 2
  ... M 个应用 × N 个工具 = M×N 个集成
语义 SVG 重绘MCP 协议详解(Model Context Protocol) · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文MCP 方式(M+N 问题):系统核心AI 应用 A 工具 1AI 应用 B MCP 协议 工具 2AI 应用 C 工具 3工具、结果与反馈每个应用实现一次 MCP 客户端每个工具实现一次 MCP 服务端
查看原文结构
MCP 方式(M+N 问题):
  AI 应用 A ─┐                    ┌─ 工具 1
  AI 应用 B ──┤── MCP 协议 ──────┤── 工具 2
  AI 应用 C ─┘                    └─ 工具 3
  每个应用实现一次 MCP 客户端
  每个工具实现一次 MCP 服务端
  总共 M+N 个集成

1.2 与 Function Calling 的关系

对比维度Function CallingMCP
定位模型层面的工具调用能力应用层面的通信协议标准
范围单次 LLM 调用中的工具使用完整的客户端-服务端架构
标准化每个模型厂商各自定义统一的开放标准
资源访问不支持(只能调用函数)支持资源和提示词模板
传输方式HTTP 请求内嵌JSON-RPC 2.0 / stdio
生态模型绑定跨模型、跨应用
语义 SVG 重绘MCP 协议详解(Model Context Protocol)

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文关系:系统核心用户请求AI 应用LLM 决策(Function Calling 选…工具、结果与反馈MCP 协议执行工具调用MCP 是 Function Calling 的下…
查看原文结构
关系:
  用户请求 → AI 应用 → LLM 决策(Function Calling 选择工具)→ MCP 协议执行工具调用
  MCP 是 Function Calling 的下游执行层

2. MCP 架构

2.1 三层架构

语义 SVG 重绘MCP 协议详解(Model Context Protocol)

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文MCP Host(宿主)系统核心如 Claude Desktop、IDE、AI 应…负责用户交互和 LLM 调管理多个 MCP Client 实例工具、结果与反馈MCP Client(客户端)每个 Client 与一个 Server 保持 1…
查看原文结构
┌───────────────────────────────────────────────────────┐
│                   MCP Host(宿主)                     │
│    如 Claude Desktop、IDE、AI 应用                     │
│    负责用户交互和 LLM 调用                             │
└────────────────────┬──────────────────────────────────┘
                     │ 管理多个 MCP Client 实例
                     ↓
┌───────────────────────────────────────────────────────┐
│              MCP Client(客户端)                      │
│    每个 Client 与一个 Server 保持 1:1 会话             │
│    负责协议协商、消息收发、安全策略                     │
└────────────────────┬──────────────────────────────────┘
                     │ JSON-RPC 2.0
                     ↓
┌───────────────────────────────────────────────────────┐
│              MCP Server(服务端)                      │
│    暴露 Tools / Resources / Prompts 给 Client          │
│    负责实际的工具执行和数据访问                         │
└───────────────────────────────────────────────────────┘

2.2 核心概念

概念说明示例
Host用户直接使用的应用Claude Desktop、Cursor
ClientHost 内的协议客户端每个 Server 对应一个 Client
Server提供工具/资源的服务GitHub MCP Server、DB Server
Tools可被 LLM 调用的函数搜索、发邮件、查数据库
Resources可被读取的数据源文件、数据库记录、API 响应
Prompts预定义的提示词模板"代码审查模板"、"周报模板"

3. 协议规范

3.1 传输层

MCP 支持两种传输方式:

语义 SVG 重绘MCP 协议详解(Model Context Protocol) · 结构 1

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

Host · (父进程)Server · (子进程)
查看原文结构
┌────────┐  stdin →  ┌────────┐
  │  Host  │           │ Server │
  │ (父进程)│  ← stdout │ (子进程)│
  └────────┘           └────────┘
语义 SVG 重绘MCP 协议详解(Model Context Protocol) · 结构 2

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

输入与上下文POST /mcp系统核心ClientServerSSE (远程)工具、结果与反馈
查看原文结构
┌────────┐  POST /mcp  ┌────────┐
  │ Client │ ──────────→ │ Server │
  │        │ ← SSE ───── │ (远程) │
  └────────┘             └────────┘

3.2 消息格式(JSON-RPC 2.0)

JSON
// 请求
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_github",
    "arguments": {
      "query": "MCP protocol",
      "language": "python"
    }
  }
}

// 成功响应
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "找到 3 个相关仓库:..."
      }
    ]
  }
}

// 错误响应
{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": -32602,
    "message": "Invalid arguments: 'query' is required"
  }
}

// 通知(无 id,不需要响应)
{
  "jsonrpc": "2.0",
  "method": "notifications/tools/list_changed"
}

3.3 生命周期

语义 SVG 重绘MCP 协议详解(Model Context Protocol)

根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。

initialize → · initialized → · 正常通信阶段…协商协议版本和能力 · 确认初始化完成 · 工具调用、资源读取等 · 保活…
查看原文结构
Client                        Server
  │                              │
  │──── initialize ────────────→│  协商协议版本和能力
  │←─── initialize response ───│
  │──── initialized ───────────→│  确认初始化完成
  │                              │
  │════ 正常通信阶段 ════════════│  工具调用、资源读取等
  │──── tools/list ────────────→│
  │←─── tools list response ───│
  │──── tools/call ────────────→│
  │←─── tools call response ───│
  │                              │
  │──── ping ──────────────────→│  保活检测
  │←─── pong ──────────────────│
  │                              │
  │──── shutdown ──────────────→│  关闭连接
  │                              │

4. MCP 的三大能力

4.1 Tools(工具)

Server 暴露可被 LLM 调用的函数:

JSON
// tools/list 返回
{
  "tools": [
    {
      "name": "query_database",
      "description": "执行 SQL 查询并返回结果",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sql": {
            "type": "string",
            "description": "SQL 查询语句"
          },
          "database": {
            "type": "string",
            "enum": ["production", "analytics"]
          }
        },
        "required": ["sql"]
      }
    }
  ]
}

// tools/call 请求
{
  "method": "tools/call",
  "params": {
    "name": "query_database",
    "arguments": {
      "sql": "SELECT * FROM users LIMIT 10",
      "database": "analytics"
    }
  }
}

// tools/call 响应
{
  "result": {
    "content": [
      {"type": "text", "text": "查询结果: ..."},
      {"type": "image", "data": "base64...", "mimeType": "image/png"}
    ],
    "isError": false
  }
}

4.2 Resources(资源)

Server 暴露可被读取的数据源,类似 REST 的 GET:

JSON
// resources/list 返回
{
  "resources": [
    {
      "uri": "file:///project/src/main.py",
      "name": "main.py",
      "mimeType": "text/x-python",
      "description": "项目入口文件"
    },
    {
      "uri": "db://analytics/sales_summary",
      "name": "销售汇总数据",
      "mimeType": "application/json"
    }
  ]
}

// resources/read 请求
{
  "method": "resources/read",
  "params": {
    "uri": "file:///project/src/main.py"
  }
}

// 资源模板(动态资源)
{
  "resourceTemplates": [
    {
      "uriTemplate": "db://analytics/{table_name}",
      "name": "数据库表数据",
      "description": "读取指定数据库表的内容"
    }
  ]
}

4.3 Prompts(提示词模板)

Server 提供预定义的提示词模板

JSON
// prompts/list 返回
{
  "prompts": [
    {
      "name": "code_review",
      "description": "代码审查提示词模板",
      "arguments": [
        {
          "name": "language",
          "description": "编程语言",
          "required": true
        },
        {
          "name": "code",
          "description": "要审查的代码",
          "required": true
        }
      ]
    }
  ]
}

// prompts/get 请求
{
  "method": "prompts/get",
  "params": {
    "name": "code_review",
    "arguments": {
      "language": "Python",
      "code": "def hello(): pass"
    }
  }
}

// prompts/get 响应
{
  "messages": [
    {
      "role": "user",
      "content": {
        "type": "text",
        "text": "请审查以下 Python 代码的质量和安全性:\n```python\ndef hello(): pass\n```"
      }
    }
  ]
}

5. 安全模型

5.1 安全原则

TEXT
1. 最小权限原则
   Server 只暴露必要的工具和资源
   客户端只能访问被授权的能力

2. 用户确认机制
   高风险工具调用需要用户显式确认
   如:删除文件、发送邮件、修改数据库

3. 沙箱隔离
   文件系统访问限制在指定目录
   代码执行在隔离容器中
   网络访问受白名单控制

4. 能力协商
   初始化时 Client 和 Server 协商各自支持的能力
   不支持的能力不会被调用

5.2 权限控制示例

JSON
{
  "serverInfo": {
    "name": "filesystem-server",
    "version": "1.0.0"
  },
  "capabilities": {
    "tools": {
      "listChanged": true
    },
    "resources": {
      "subscribe": true,
      "listChanged": true
    }
  }
}

6. MCP 生态系统

6.1 官方 MCP Server

Server能力状态
Filesystem文件读写、目录操作官方支持
GitHub仓库管理、Issue、PR官方支持
PostgreSQL数据库查询、Schema官方支持
Google Drive文件搜索、读取官方支持
Slack消息发送、频道管理官方支持
Brave Search网页搜索官方支持
Memory知识图谱存储和检索官方支持
FetchHTTP 请求、网页抓取官方支持

6.2 社区 MCP Server

Server能力
Docker容器管理和操作
KubernetesK8s 集群管理
Redis缓存操作
MongoDBNoSQL 数据库操作
Notion笔记和知识库管理
Linear项目管理
Figma设计稿读取

7. 本章小结

维度要点
定位AI 应用与工具之间的统一通信协议
架构Host → Client → Server 三层架构
传输stdio(本地)+ HTTP+SSE(远程)
三大能力Tools(工具调用)、Resources(数据访问)、Prompts(提示模板)
协议JSON-RPC 2.0
核心价值解决 M×N 集成问题,一次实现处处可用

相关章节


延伸阅读

  • Anthropic (2024). "Introducing the Model Context Protocol". anthropic.com/news
  • MCP Specification: modelcontextprotocol.io/specification
  • MCP SDK: github.com/modelcontextprotocol