Skip to content

第1章 为什么需要 MCP

"We shape our tools, and thereafter our tools shape us." —— Marshall McLuhan

本章要点

  1. 碎片化困局:每个 Agent 框架都在各自发明工具集成方案,导致生态严重割裂
  2. USB 类比:MCP 之于 AI Agent 工具生态,正如 USB 之于计算机外设生态
  3. 协议本质:MCP 是基于 JSON-RPC 2.0 的开放协议,定义了 Host-Client-Server 三层架构
  4. 三大原语:Tool(模型控制)、Resource(应用控制)、Prompt(用户控制)的分层设计是 MCP 的精髓
  5. 生态爆发:从 2024 年 11 月首次发布到 Claude Code、Cursor、VS Code 全面采用,MCP 正在成为事实标准

1.1 一个真实的痛点:工具集成的碎片化

假设你是一个全栈开发者,刚刚构建了一个连接 PostgreSQL 数据库的工具——它能执行 SQL 查询、分析表结构、生成数据报告。现在你希望把这个工具接入各种 AI 应用,让不同的 AI 助手都能使用它。

你很快会发现一个令人沮丧的现实:

  • 要接入 Claude Desktop,你需要按照 Anthropic 的工具格式包装一层
  • 要接入 ChatGPT,你需要按照 OpenAI 的 function calling 格式再包装一层
  • 要接入 LangChain 应用,你需要继承 BaseTool 类,实现 _run() 方法
  • 要接入 Cursor,又是另一套接口
  • 要接入你自己写的 Agent,你可能直接用了 REST API

同一个工具,五种接口。每增加一个 AI 应用,就要多写一套适配代码。每增加一个工具,就要为所有已接入的 AI 应用分别适配。这是一个典型的 M×N 问题

各框架工具接口的真实面貌

让我们看看这些不兼容的接口到底长什么样。

OpenAI Function Calling 格式:

json
{
  "type": "function",
  "function": {
    "name": "query_database",
    "description": "Execute SQL query on PostgreSQL",
    "parameters": {
      "type": "object",
      "properties": {
        "sql": { "type": "string", "description": "SQL statement" }
      },
      "required": ["sql"]
    }
  }
}

LangChain BaseTool:

python
from langchain.tools import BaseTool
from pydantic import Field

class DatabaseQueryTool(BaseTool):
    name: str = "query_database"
    description: str = "Execute SQL query on PostgreSQL"

    def _run(self, sql: str) -> str:
        # 执行查询逻辑
        return result

    async def _arun(self, sql: str) -> str:
        # 异步执行逻辑
        return result

Claude Code 内置工具格式:

typescript
const tool = {
  name: "query_database",
  description: "Execute SQL query on PostgreSQL",
  inputSchema: {
    type: "object" as const,
    properties: {
      sql: { type: "string", description: "SQL statement" }
    },
    required: ["sql"]
  },
  async call(input: { sql: string }) {
    // 执行查询逻辑
    return { result };
  }
};

表面上看,这些定义的核心信息是一样的:工具名、描述、参数 schema、执行逻辑。但包装方式完全不同——有的用 JSON,有的用类继承,有的用对象字面量。更关键的是,传输协议、生命周期管理、错误处理、安全模型都各不相同

M×N 问题的本质

3 个 AI 应用 × 3 个工具 = 9 个适配层。当应用和工具各增长到 100 个时,就需要 10,000 个适配层。这显然不可持续。

这不是一个新问题。计算机历史上每一次外设接口标准化都经历过同样的阶段——打印机、显示器、存储设备,在 USB 出现之前,每种设备都有自己的专用接口。

1.2 USB 类比:为什么标准协议改变一切

USB(Universal Serial Bus)在 1996 年发布时,PC 世界的外设接口是一团混乱:串口连调制解调器,并口连打印机,PS/2 连键盘鼠标,SCSI 连硬盘,游戏端口连手柄。每种设备需要专用的物理接口、专用的驱动程序、专用的通信协议。

USB 做了什么?它定义了:

  1. 统一的物理接口——一种接口连接所有设备
  2. 标准的通信协议——设备自描述,即插即用
  3. 清晰的角色分工——Host(主机)控制总线,Device(设备)响应请求
  4. 可扩展的设备类型——键盘、鼠标、存储、音频,都通过同一协议描述

USB 把 M×N 问题变成了 M+N 问题:设备厂商只需实现一次 USB 协议,计算机厂商也只需实现一次 USB 主控,两边独立发展,互不干扰。

MCP 在 AI Agent 领域做的,正是同样的事情。

4 个应用 + 4 个工具 = 只需要 8 次实现,而不是 16 次。当两边各增长到 100 个时,只需要 200 次实现,而不是 10,000 次。

这个类比不只是修辞手法。USB 的成功有三个关键因素,MCP 同样具备:

特征USBMCP
统一接口标准物理插口 + 电气协议JSON-RPC 2.0 + 标准消息格式
设备自描述USB 描述符(Device Descriptor)能力协商(Capability Negotiation)
角色分工Host / DeviceHost / Client / Server
即插即用热插拔 + 自动驱动动态发现 + 运行时注册
开放标准USB-IF 组织维护Anthropic 开源 + 社区共建

1.3 MCP 到底是什么

让我们给 MCP 一个精确的定义。

Model Context Protocol(MCP)是一个开放协议,它标准化了 AI 应用(如 Claude Desktop、Cursor、IDE 插件)与外部数据源和工具之间的通信方式。

这个定义来自 MCP 规范的官方描述:

"Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools."

让我们拆解这个定义中的每一个关键词:

  • 开放协议(Open Protocol):MCP 是完全开源的,规范文档、Schema 定义、多语言 SDK 全部公开可用。任何人都可以实现 MCP 的客户端或服务端,不需要 Anthropic 的授权
  • 标准化:不是某个框架的内部接口,而是跨框架、跨语言、跨平台的统一标准
  • LLM 应用:MCP 的客户端不是人类用户,而是包含大语言模型的应用程序
  • 外部数据源和工具:MCP 不关心你用什么数据库、什么 API、什么编程语言——它只关心通信协议

技术基础:JSON-RPC 2.0

MCP 建立在 JSON-RPC 2.0 之上。这不是随意的选择,而是经过深思熟虑的技术决策。

JSON-RPC 2.0 是一个轻量级的远程过程调用协议,它的消息格式极其简洁:

请求(Request):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {}
}

响应(Response):

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "query_database",
        "description": "Execute SQL query",
        "inputSchema": {
          "type": "object",
          "properties": {
            "sql": { "type": "string" }
          },
          "required": ["sql"]
        }
      }
    ]
  }
}

通知(Notification)——没有 id 字段,不需要响应:

json
{
  "jsonrpc": "2.0",
  "method": "notifications/tools/list_changed"
}

为什么选择 JSON-RPC 而不是其他协议?这个问题的答案与 MCP 的设计哲学密切相关,我们将在 1.6 节详细讨论。

MCP 的灵感来源

MCP 规范明确提到了它的灵感来源:

"MCP takes some inspiration from the Language Server Protocol (LSP), which standardizes how to add support for programming languages across a whole ecosystem of development tools."

LSP 解决的问题和 MCP 几乎完全对称:在 LSP 出现之前,每个编辑器(VS Code、Vim、Emacs、Sublime)要单独实现每种编程语言的支持(语法高亮、自动补全、跳转定义),这也是一个 M×N 问题。LSP 通过定义一个标准的 Language Server 协议,把问题变成了 M+N——编辑器只需要实现 LSP 客户端,语言工具只需要实现 LSP 服务端。

MCP 在 AI 领域做了同样的事,但它面对的挑战更复杂:

维度LSPMCP
通信发起方人类输入触发模型自主决策触发
安全模型相对简单(读代码)复杂(可能执行任意操作)
状态管理文件系统为中心多数据源、多工具
结果类型结构化(补全列表、诊断)非结构化(文本、图片、音频)

1.4 Host-Client-Server:三层架构的精妙设计

理解 MCP 的架构是理解整个协议的钥匙。MCP 采用的不是简单的客户端-服务端两层模型,而是 Host-Client-Server 三层架构

为什么是三层而不是两层?

这是 MCP 最容易被误解的设计决策之一。直觉上,似乎"应用直接连服务器"更简单。但三层架构解决了几个关键问题:

Host(宿主) 是用户直接交互的应用程序,比如 Claude Desktop、Cursor、VS Code。它的职责是:

  • 创建和管理多个 Client 实例
  • 控制 Client 的连接权限和生命周期
  • 执行安全策略和用户授权
  • 协调 AI/LLM 集成
  • 聚合来自多个 Client 的上下文

Client(客户端) 是 Host 内部的连接器,每个 Client 与一个 Server 保持一对一的连接:

  • 与 Server 建立有状态的会话
  • 处理协议协商和能力交换
  • 双向路由协议消息
  • 维护服务器之间的安全隔离

Server(服务端) 提供具体的工具和数据:

  • 通过 MCP 原语暴露资源、工具和提示
  • 独立运行,职责单一
  • 可以是本地进程,也可以是远程服务

安全隔离:为什么每个 Server 看不到其他 Server

这是三层架构最重要的设计意图之一。MCP 规范的设计原则明确指出:

"Servers should not be able to read the whole conversation, nor 'see into' other servers."

这意味着:

  • Server 只收到执行当前任务所需的信息,不会收到完整的对话历史
  • 不同 Server 之间完全隔离,文件系统 Server 不知道数据库 Server 的存在
  • 跨 Server 的交互由 Host 统一控制
  • Host 负责执行安全边界

这种设计直接源于安全考量。想象一下:如果你同时连接了一个"公司内部数据库"Server 和一个"第三方天气查询"Server,你绝对不希望天气 Server 能看到你的数据库查询内容。三层架构通过 Client 的隔离确保了这一点。

能力协商:渐进式功能发现

MCP 的另一个精妙设计是**能力协商(Capability Negotiation)**机制。在连接建立时,Client 和 Server 会交换各自支持的功能列表:

json
// Client 发送 initialize 请求
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-03-26",
    "capabilities": {
      "roots": { "listChanged": true },
      "sampling": {}
    },
    "clientInfo": {
      "name": "claude-desktop",
      "version": "1.0.0"
    }
  }
}

// Server 响应,声明自己支持的能力
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-03-26",
    "capabilities": {
      "tools": { "listChanged": true },
      "resources": { "subscribe": true }
    },
    "serverInfo": {
      "name": "database-server",
      "version": "2.1.0"
    }
  }
}

这种设计的好处是渐进式兼容——旧版本的 Client 遇到新版本的 Server 不会崩溃,它只是看不到新功能。MCP 规范对此的设计原则是:

"Features can be added to servers and clients progressively. Core protocol provides minimal required functionality. Additional capabilities can be negotiated as needed."

这和 USB 的设备描述符机制如出一辙:你把一个 USB 3.0 设备插到 USB 2.0 端口,它不会报错,只是降级到 USB 2.0 速度运行。

1.5 三大原语:Tool、Resource、Prompt

MCP 定义了三种核心原语,这是理解整个协议最关键的概念。它们不是按"功能类型"划分的,而是按**"谁来控制调用"**划分的。

原语控制方类比典型用例
Tool模型控制(Model-controlled)函数执行 SQL、调用 API、文件操作
Resource应用控制(Application-controlled)数据源读取文件内容、获取数据库 schema
Prompt用户控制(User-controlled)模板代码审查模板、SQL 生成模板

这个三分法看似简单,实则蕴含深意。

Tool:模型自主决策的执行能力

Tool 是最容易理解的原语。MCP 规范对 Tool 的定义是:

"Tools in MCP are designed to be model-controlled, meaning that the language model can discover and invoke tools automatically based on its contextual understanding and the user's prompts."

当你对 Claude 说"帮我查一下数据库中用户表有多少条记录",模型会自主决定调用数据库查询工具。模型发现可用工具列表、选择合适的工具、构造参数、发起调用——整个过程都是模型驱动的。

一个 MCP Tool 的定义包含以下关键字段:

json
{
  "name": "query_database",
  "description": "Execute a read-only SQL query on the PostgreSQL database",
  "inputSchema": {
    "type": "object",
    "properties": {
      "sql": {
        "type": "string",
        "description": "The SQL query to execute (SELECT only)"
      }
    },
    "required": ["sql"]
  },
  "annotations": {
    "readOnlyHint": true,
    "openWorldHint": false
  }
}

注意 annotations 字段——它提供了关于工具行为的元数据提示,比如这个工具是否只读、是否会产生副作用。但规范特别提醒:

"For trust & safety and security, clients MUST consider tool annotations to be untrusted unless they come from trusted servers."

这意味着工具的 annotations 仅供参考,Host 不应该盲目信任它们来做安全决策。

Resource:应用程序控制的上下文数据

Resource 的控制逻辑与 Tool 完全不同。MCP 规范明确说:

"Resources in MCP are designed to be application-driven, with host applications determining how to incorporate context based on their needs."

Resource 不是模型自主去取的,而是应用程序决定什么时候、以什么方式把数据提供给模型。典型的场景包括:

  • 用户在 Claude Desktop 中手动选择一个文件作为上下文
  • IDE 自动将当前打开的文件内容注入模型上下文
  • 应用基于启发式规则自动附加相关的数据库 schema

每个 Resource 由一个 URI 唯一标识,支持订阅和变更通知:

json
{
  "uri": "file:///project/src/main.rs",
  "name": "main.rs",
  "description": "Primary application entry point",
  "mimeType": "text/x-rust"
}

Resource 还支持模板化的 URI,这意味着服务端可以暴露动态的资源空间。比如一个数据库 Server 可以暴露 db://{schema}/{table} 模板,让应用程序根据需要查询任意表的结构。

Prompt:用户显式选择的交互模板

Prompt 是三个原语中最"人性化"的一个。MCP 规范说:

"Prompts are designed to be user-controlled, meaning they are exposed from servers to clients with the intention of the user being able to explicitly select them for use."

Prompt 通常以斜杠命令(slash command)的形式暴露给用户。比如在 Claude Desktop 中,数据库 Server 可能提供一个 /analyze-table 提示模板:

json
{
  "name": "analyze-table",
  "description": "Generate a comprehensive analysis of a database table",
  "arguments": [
    {
      "name": "table_name",
      "description": "Name of the table to analyze",
      "required": true
    }
  ]
}

当用户选择这个命令时,Server 返回一组预构造的消息,引导模型按照特定的方式分析数据。

为什么这个三分法很重要?

你可能会想:Tool、Resource、Prompt 的底层不都是"向 Server 请求数据或执行操作"吗?为什么要分成三种?

关键在于安全模型和用户体验

Tool 涉及执行(execution)。模型调用工具可能产生副作用——修改文件、发送邮件、删除数据。因此 MCP 规范要求:

"There SHOULD always be a human in the loop with the ability to deny tool invocations."

Host 必须在工具执行前展示确认对话框,让用户审批。

Resource 涉及读取(reading)。读取操作通常是安全的,不会修改外部状态。应用程序可以自动、静默地把相关资源注入上下文,不需要每次都征求用户同意。

Prompt 涉及引导(guidance)。它改变的不是外部世界,而是模型的行为方式。用户需要显式选择使用哪个 Prompt 模板,因为不同的模板会导致完全不同的分析视角和输出格式。

这三种控制层级构成了一个安全梯度:

用户控制(Prompt)→ 应用控制(Resource)→ 模型控制(Tool)
   安全性最高            中等              需要人工审批

这种分层与操作系统的权限设计有异曲同工之妙。读取文件不需要特殊权限,执行程序需要执行权限,修改系统配置需要管理员权限——MCP 的三大原语用类似的逻辑把 AI Agent 的操作按风险等级分层。

1.6 MCP vs 替代方案:为什么不用已有的协议?

在 MCP 出现之前,已经有很多成熟的通信协议和工具集成方案。一个自然的问题是:为什么不直接用它们?

为什么不用 REST API?

REST API 是 Web 开发的基石,几乎所有后端服务都暴露 REST 接口。但它不适合做 AI 工具协议,原因有三:

第一,REST 是无状态的,MCP 需要有状态的会话。 MCP 的会话从 initialize 开始,经过能力协商,到 shutdown 结束。在整个会话期间,Client 和 Server 维持着共享状态——哪些能力已协商、哪些资源已订阅、哪些工具可用。REST 的每个请求都是独立的,无法优雅地管理这种有状态的交互。

第二,REST 缺少双向通信。 REST 是请求-响应模式,Server 无法主动向 Client 推送消息。但 MCP 需要 Server 主动发送通知,比如"工具列表发生了变化"(notifications/tools/list_changed)或"资源内容更新了"(notifications/resources/updated)。

第三,REST 没有标准的能力协商机制。 每个 REST API 都自定义自己的认证方式、版本管理、错误格式。MCP 通过 initialize 请求统一解决了这些问题。

为什么不用 gRPC?

gRPC 是 Google 开发的高性能 RPC 框架,支持双向流、Protocol Buffers 序列化、强类型。它看起来很适合 MCP 的场景。

但 gRPC 的门槛太高了。 MCP 规范的第一条设计原则是:

"Servers should be extremely easy to build."

gRPC 需要预定义 .proto 文件,需要代码生成步骤,需要 HTTP/2 服务器。而 MCP 的 stdio 传输模式只需要从标准输入读 JSON、向标准输出写 JSON——一个 Python 初学者用 json.loads()print() 就能实现一个最简 MCP Server。

gRPC 的 Protocol Buffers 虽然高效,但牺牲了可读性。当你在调试 MCP 通信问题时,JSON 可以直接用肉眼阅读,而 protobuf 的二进制格式需要专用工具解码。对于一个主要传输文本(代码、文档、SQL 查询结果)的协议来说,JSON 的序列化开销并不是瓶颈。

为什么不用 OpenAI Function Calling 格式?

OpenAI 的 function calling 格式已经是事实上的行业标准——很多框架都兼容或参考了它。为什么 MCP 不直接采用?

因为 function calling 不是协议,它只是一种消息格式。 function calling 定义了"工具长什么样"和"调用参数是什么",但没有定义:

  • 工具如何被发现和注册
  • 工具的生命周期如何管理
  • 客户端和服务端如何建立连接
  • 错误如何分类和处理
  • 安全边界如何划定

MCP 在消息层面与 function calling 是兼容的(工具定义的 inputSchema 格式一致),但它在此基础上增加了完整的协议层——传输、会话、能力协商、安全模型。

为什么不用 LSP 直接扩展?

LSP 是 MCP 的直接灵感来源,为什么不直接扩展 LSP 而是另起炉灶?

因为 LSP 的假设是"一个语言服务器对应一种编程语言",它的消息类型都围绕代码编辑场景设计:textDocument/completiontextDocument/definitiontextDocument/diagnostic。AI Agent 的工具生态远超代码编辑——数据库查询、API 调用、文件操作、网络搜索——这些用例需要不同的抽象模型。

MCP 借鉴了 LSP 的协议设计思路(JSON-RPC、能力协商、渐进式功能),但定义了全新的消息类型和原语体系

对比总结

维度REST APIgRPCFunction CallingLSPMCP
传输HTTPHTTP/2嵌入 LLM APIJSON-RPCJSON-RPC
状态无状态有状态无状态有状态有状态
双向通信
能力协商
易于实现
序列化JSONProtobufJSONJSONJSON
安全模型自定义自定义依赖平台有限完整
工具发现无标准反射静态静态动态
场景覆盖通用 Web微服务LLM 调用代码编辑AI Agent

MCP 不是要替代这些协议,而是在 AI Agent 工具集成这个特定领域,填补了一个空白。

1.7 从发布到生态爆发:MCP 的发展时间线

MCP 的发展速度超出了大多数人的预期。以下是关键里程碑:

2024 年 11 月:首次发布

Anthropic 在 2024 年 11 月 25 日发布了 MCP 的第一个版本(协议版本 2024-11-05),同步开源了:

  • 完整的协议规范文档
  • TypeScript SDK
  • Python SDK
  • Claude Desktop 的 MCP 集成

首版协议定义了核心架构(Host-Client-Server)、三大原语(Tool/Resource/Prompt)、两种传输方式(stdio 和 HTTP+SSE),以及完整的生命周期管理。

2025 年 3 月:重大版本更新

协议版本 2025-03-26 带来了多项重要改进:

  • Streamable HTTP 传输:替代了原来的 HTTP+SSE 传输,更灵活、更高效
  • 工具注解(Tool Annotations):允许服务端声明工具的行为特征,如是否只读、是否幂等
  • 结构化输出(Structured Output):工具可以同时返回结构化和非结构化结果
  • Elicitation:服务端可以向用户请求额外信息
  • OAuth 2.1 授权框架:标准化了远程 MCP Server 的认证流程

2025 年中:生态爆发

多个主流 AI 开发工具宣布支持 MCP:

  • Claude Code:Anthropic 的命令行 AI 编程助手,内置完整的 MCP 客户端,支持通过配置文件动态加载 MCP Server
  • Cursor:AI 代码编辑器,集成 MCP 支持
  • VS Code:微软的 GitHub Copilot 扩展开始支持 MCP Server
  • Windsurf(Codeium):集成 MCP 支持
  • 社区贡献了数百个 MCP Server:从数据库连接器到云服务 API,从文件系统操作到搜索引擎集成

2025 年底至 2026 年:持续演进

协议版本 2025-06-182025-11-25 继续推进:

  • 更成熟的安全模型
  • 更完善的错误处理
  • 更丰富的传输选项
  • 社区治理模型的建立

MCP 的规范仓库中维护着完整的版本历史,每个版本的 Schema 定义都保存在 schema/ 目录下,从 2024-11-05 到最新的 draft,清晰地记录了协议的演进轨迹。

schema/
├── 2024-11-05/    # 首版
├── 2025-03-26/    # 重大更新
├── 2025-06-18/    # 持续演进
├── 2025-11-25/    # 最新稳定版
└── draft/         # 开发中的下一版
    ├── schema.json
    ├── schema.ts   # TypeScript 类型定义(权威源)
    └── schema.mdx

值得注意的是,MCP 规范明确指出 TypeScript Schema(schema.ts)是权威定义源:

"This specification defines the authoritative protocol requirements, based on the TypeScript schema in schema.ts."

这意味着所有语言的 SDK 实现都以这个 TypeScript 定义为准。

1.8 本书的范围:教什么,不教什么

你将学到什么

本书将从协议规范和 SDK 源码出发,系统地教你:

协议层面(第 2-7 章):

  • MCP 的完整架构设计和设计原则
  • JSON-RPC 2.0 在 MCP 中的应用
  • 连接生命周期:初始化、能力协商、操作、关闭
  • 三大原语(Tool、Resource、Prompt)的完整协议细节
  • 每个消息类型的 JSON 格式、请求/响应流程

实现层面(第 8-11 章):

  • 用 TypeScript SDK 实现 MCP Server 和 Client
  • 用 Python SDK 实现 MCP Server 和 Client
  • SDK 的内部架构:传输层、协议层、应用层

传输与安全(第 12-16 章):

  • stdio 传输的实现细节
  • Streamable HTTP 传输的完整流程
  • SSE 和 WebSocket 扩展
  • OAuth 2.1 授权框架在 MCP 中的应用
  • Server 发现与注册机制

高级特性(第 17-18 章):

  • Sampling:让 Server 反向请求 LLM 推理
  • Elicitation 和 Roots:Server 向用户和文件系统的交互

实战(第 19-21 章):

  • Claude Code 中的 MCP 集成分析
  • 从零构建生产级 MCP Server
  • 设计模式与最佳实践

不教什么

  • 不教 LLM 基础知识:本书假设你理解大语言模型的基本概念——Prompt、Token、上下文窗口、Tool Use
  • 不教特定 Agent 框架:LangChain、CrewAI、AutoGen 等框架有各自的教程,本书关注的是它们底层共享的协议标准
  • 不教前端 UI 开发:MCP 是后端协议,不涉及用户界面的构建
  • 不做 API 参考手册:本书不是对规范文档的逐字翻译,而是通过源码分析揭示设计背后的"为什么"

阅读前提

  • 你需要有基本的 TypeScript 或 Python 编程经验
  • 你需要理解 JSON 格式和 HTTP 基础知识
  • 你需要对"AI Agent 调用工具"这个概念有基本认知
  • 如果你曾经用过 Claude Code、Cursor 或任何 AI 编程工具,理解会更顺畅

1.9 本章小结

本章从一个真实的工程痛点出发——AI 工具集成的碎片化——引出了 MCP 协议存在的意义。我们看到:

  1. 碎片化是真实存在的。每个 Agent 框架的工具接口互不兼容,导致工具开发者面临 M×N 的适配困境
  2. MCP 是 AI 领域的 USB。它通过定义标准协议,把 M×N 问题降维为 M+N 问题
  3. MCP 建立在 JSON-RPC 2.0 之上,这是一个深思熟虑的技术选择——简单、可读、易于实现
  4. 三层架构(Host-Client-Server) 不是过度设计,而是安全隔离和可组合性的必然要求
  5. 三大原语(Tool/Resource/Prompt) 按控制方而非功能类型划分,构成了清晰的安全梯度
  6. MCP 不是要替代 REST、gRPC 或 function calling,而是在 AI Agent 工具集成这个特定领域填补空白
  7. MCP 的生态增长速度远超预期,正在成为 AI 工具集成的事实标准

从下一章开始,我们将深入 MCP 的架构设计,逐层拆解协议的每一个组成部分。在那之前,建议你先尝试一件事:打开 Claude Desktop 或 Claude Code,配置一个简单的 MCP Server(比如官方的 filesystem server),亲身体验一下"即插即用"的工具集成是什么感觉。这个体验会让后续章节的每一个技术细节都变得更加生动。

基于 VitePress 构建