技术深度解析:Model Context Protocol (MCP)

1. 协议栈解剖:不仅仅是 API

MCP 并非某种高级的 AI 魔法,而是一个运行在标准传输层之上的应用层协议。它的核心设计哲学是将 AI 模型(Host)与外部工具(Server)之间的交互标准化,从而解决 N×M 的集成复杂度问题。

Model Context Protocol (MCP) 是由 Anthropic 于 2024 年底开源,并在 2026 年确立为事实标准的开放协议。它的核心目标是解决 AI 模型与外部数据源、工具和服务之间的连接碎片化问题。

正如 USB-C 统一了硬件设备的物理接口,MCP 统一了 AI 模型与外部世界的数字接口。截至 2026 年 3 月,MCP SDK 月下载量已突破 9700 万,GitHub 星标数超过 8.1 万,并获得 OpenAI、Google、Microsoft、Meta 等全行业巨头的原生支持。

2025 年 12 月,MCP 的治理权正式移交至 Linux Foundation 旗下的 Agentic AI Foundation (AAIF),标志着该协议从初创项目正式迈向企业级基础设施标准。

三大核心角色

角色 定义 典型示例
MCP Host 运行 LLM 的 AI 应用程序,负责发起连接。 Claude Desktop, Cursor, VS Code, OpenClaw
MCP Client 由 Host 创建的连接器,管理与 Server 的 1:1 会话。 内置于 Host 进程中的客户端库
MCP Server 暴露外部能力(工具、数据)的轻量级服务。 GitHub Server, PostgreSQL Server, Slack Server

三大基本原语 (Primitives)

MCP Server 通过以下三种原语向 AI 暴露能力:

  • Tools (工具): 模型可以调用的可执行函数(如 execute_sqlsend_email)。这是 Agent 执行动作的主要方式。
  • Resources (资源): 模型可以读取的数据源(如文件、数据库视图、API 响应)。类似于 URI 可寻址的”文件”。
  • Prompts (提示词): 预配置的模板,帮助模型理解如何与特定数据或工具交互。

1.1 传输层演进 (Transport Layer)

MCP 支持多种传输机制,以适应不同的部署环境。2026 年的规范中,传输层发生了重要演进:

  • Stdio (标准输入输出): 本地部署的首选。Host 将 Server 作为子进程启动,通过 stdin/stdout 进行通信。零网络开销,天然隔离。
  • HTTP + SSE (Server-Sent Events): 早期远程方案。POST 发送请求,SSE 接收响应和推送。需要两个端口或路径,状态管理复杂。
  • Streamable HTTP (2026 新标准): 统一了双向通信。单端口支持请求-响应和服务器推送,原生支持会话 ID (Mcp-Session-Id) 和断线重连 (Resumability)。

1.2 消息层:JSON-RPC 2.0

MCP 的所有消息均遵循 JSON-RPC 2.0 规范。这种选择确保了协议的轻量级和语言无关性。消息分为三类:

类型 结构特征 用途
Request 包含 id (number/string) Client 发起操作 (如 tools/list)
Response 包含 id (匹配 Request) 和 result 或 error Server 返回结果
Notification  id 字段 单向通知 (如 notifications/resources/changed)

2. 交互生命周期 (Deep Dive)

一个标准的 MCP 会话并非随意开始,而是遵循严格的状态机流转。理解这一过程是调试和开发自定义 Server 的关键。

┌──────────┐ ┌──────────┐ │ Client │ │ Server │ └────┬─────┘ └────┬─────┘ │ │ │ 1. InitializeRequest (Protocol Version) │ │ ──────────────────────────────────────────────>│ │ │ │ 2. InitializeResponse (Capabilities) │ │ <──────────────────────────────────────────────│ │ │ │ 3. notifications/initialized │ │ ──────────────────────────────────────────────>│ │ │ │ 4. tools/list / resources/list │ │ ──────────────────────────────────────────────>│ │ │ │ 5. tools/call / resources/read │ │ ──────────────────────────────────────────────>│ │ │ │ 6. Result / Content │ │ <──────────────────────────────────────────────│ │ │

2.1 握手与能力协商 (Handshake)

每个会话必须以 initialize 请求开始。这是双方交换”底牌”的时刻:

  • 版本协商: Client 声明支持的协议版本(如 2024-11-05)。如果 Server 不支持,必须立即终止连接。
  • 能力声明 (Capabilities):
    • Client: 声明是否支持 roots (文件系统上下文) 和 sampling (允许 Server 请求 LLM 调用)。
    • Server: 声明是否提供 toolsresourcespromptslogging 等。

只有在 Client 发送 notifications/initialized 后,Server 才能开始主动推送消息或处理业务请求。

2.2 运行时原语 (Runtime Primitives)

MCP 通过三个核心原语暴露能力,它们在底层均映射为特定的 JSON-RPC 方法:

  • Tools: 映射到 LLM 的 Function Calling。
    tools/list 返回工具列表及 JSON Schema 定义。
    tools/call 执行工具并返回 content (Text, Image, 或 Resource)。
  • Resources: URI 可寻址的数据源。
    支持 resources/listresources/read
    支持订阅模式 resources/subscribe,当数据变更时 Server 推送 notifications/resources/updated
  • Prompts: 预定义的交互模板。
    帮助 Client 快速构建复杂的上下文提示词。

3. 底层实现揭秘:手写 JSON-RPC

为了真正理解 MCP,我们抛开 SDK,直接观察底层的 JSON 报文。这是 AI 模型与工具交互的真实数据流。

3.1 工具发现 (Tool Discovery)

Client 询问 Server 有哪些可用工具:

// Request
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": { "cursor": null } 
}

// Response
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [{
      "name": "get_weather",
      "description": "Get weather for a city",
      "inputSchema": {
        "type": "object",
        "properties": {
          "city": { "type": "string", "description": "City name" }
        },
        "required": ["city"]
      }
    }]
  }
}

3.2 工具调用 (Tool Execution)

LLM 决定调用工具后,Client 转发请求:

// Request
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "get_weather",
    "arguments": { "city": "Beijing" }
  }
}

// Response
{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [{
      "type": "text",
      "text": "Current weather in Beijing: Sunny, 25°C"
    }],
    "isError": false
  }
}

极客洞察: MCP Server 返回的 content 是一个数组,支持混合类型(文本、图片 Base64、资源引用)。这使得多模态模型能够同时接收多种格式的上下文。

4. 安全架构:OAuth 2.1 与动态注册

在 2026 年的企业级部署中,安全性是 MCP 的核心考量。对于远程 Server,MCP 规范强制推荐使用 OAuth 2.1

4.1 认证流 (Authorization Flow)

MCP 采用了针对公共客户端优化的 OAuth 2.1 流程,核心包括:

  • PKCE (Proof Key for Code Exchange): 防止授权码拦截攻击,无需 Client Secret。
  • Protected Resource Metadata (RFC 9728): Server 必须在 /.well-known/oauth-protected-resource 暴露元数据,Client 据此自动发现认证服务器地址。

4.2 动态客户端注册 (DCR)

由于 MCP 生态中存在海量 Client,静态注册 Client ID 是不现实的。MCP 支持 Dynamic Client Registration (DCR)

  1. Client 首次连接时,向 Server 的 /register 端点发送注册请求。
  2. Server 返回 client_id 和 client_secret (如果是机密客户端)。
  3. Client 使用凭据发起 OAuth 流程。

4.3 权限隔离 (Scopes & Least Privilege)

Server 应通过 Scope 实现细粒度权限控制。例如:

  • weather:read: 仅允许查询天气。
  • github:write: 允许创建 PR 或 Issue。

Host 应在 UI 中明确展示请求的 Scope,并要求用户确认(Human-in-the-loop)。

5. 高级模式:Roots 与 Sampling

除了基础的工具调用,MCP 还定义了一些高级模式,用于增强 Agent 的上下文感知和自主性。

5.1 Roots (上下文感知)

Client 可以通过 roots/list 告知 Server 当前用户关注的”根目录”或”上下文范围”。例如,在 IDE 中,Root 可能是当前打开的项目文件夹。Server 可以利用这些信息优化搜索结果或过滤无关数据。

5.2 Sampling (反向 LLM 调用)

这是 MCP 最独特的设计之一。Server 可以向 Client 发送 sampling/createMessage 请求,要求 Client 调用其连接的 LLM 生成内容。

应用场景: Server 是一个代码分析工具,它需要 LLM 总结代码片段,但 Server 本身没有 LLM 接入能力。它通过 Sampling 请求 Client 代为调用 LLM,并将结果返回给 Server 继续处理。

5.3 MCP Gateway (企业网关)

随着 Server 数量增加,直接管理变得困难。MCP Gateway 模式应运而生:

  • 统一鉴权: 网关处理 OAuth,后端 Server 无需重复实现。
  • 路由与负载均衡: 将请求分发到多个 Server 实例。
  • 审计与日志: 记录所有 Tool Call,满足合规要求。

u2

Related Posts

Hermes Agent 自动学习与成长原理深度解读

Nous Research 推出的 Hermes Agent 是 2026 年增长最快的开源 AI Agent,其核心差异化能力是内置学习循环(Learning Loop)——它能从经验中自动创建技能、在使用中自我改进、主动持久化知识,实现跨 Session 的能力累积。本文从源码层面深度拆解其原理。

Read more

本地AI时代来临:Ollama + MemPalace工作流深度指南

本地优先(Local-First)正在重塑AI开发范式。当O…

Read more

发表回复

You Missed

技术深度解析:Model Context Protocol (MCP)

  • u2
  • 5月 16, 2026
  • 6 views

Hermes Agent 自动学习与成长原理深度解读

  • u2
  • 5月 14, 2026
  • 36 views

Agent Memory + Skills 双轮驱动 Memori Labs × Anthropic Dreaming 执行记忆 vs 会话记忆,如何构建持续进化的 Agent

  • u2
  • 5月 11, 2026
  • 68 views
Agent Memory + Skills 双轮驱动 Memori Labs × Anthropic Dreaming 执行记忆 vs 会话记忆,如何构建持续进化的 Agent

基于大模型的测试用例生成解决方案

  • u2
  • 5月 10, 2026
  • 76 views

从0到1搭建一个AI Token中转站:技术架构与实战指南

  • u2
  • 5月 2, 2026
  • 628 views

本地AI时代来临:Ollama + MemPalace工作流深度指南

  • u2
  • 4月 21, 2026
  • 243 views