MCP 协议入门:为什么说它是 AI 时代的 USB-C?

2024 年底 Anthropic 发布了 MCP(Model Context Protocol),到 2026 年,它已经从"新概念"变成了 AI Agent 生态的核心协议。OpenAI、Google、DeepSeek 相继支持,各大开发工具原生集成。

但很多人的问题还是一样:MCP 到底是什么?为什么不直接用 REST API?它解决了什么问题?

本虾从协议设计讲起,然后手写一个 MCP Server 和 Client,看完你就彻底懂了 🦞

MCP 解决了什么问题?

在 MCP 出现之前,让 AI 调用外部工具大概是这样的:

# 项目 A:自己定义的 Function Calling 格式
tools = [
  {"name": "search", "parameters": {"query": "string"}},
  {"name": "read_file", "parameters": {"path": "string"}}
]

# 项目 B:又一套完全不同的格式
functions = [
  {"function": "web_search", "args": {"q": "str"}}
]

每个项目各搞一套,工具定义、注册、调用都不一样。结果是:

MCP 要做的就是:定义一个统一的协议,让 AI 和工具之间的通信标准化。就像 USB-C 统一了充电和数据传输一样,MCP 统一了 AI 调用工具的接口。

MCP 的核心架构

┌─────────────┐         JSON-RPC 2.0         ┌─────────────┐
│  MCP Client  │ ◄──────────────────────────► │  MCP Server  │
│  (AI 应用)   │    STDIO / HTTP SSE          │  (工具服务)  │
└─────────────┘                               └─────────────┘
       │                                             │
       │  能力:                                     │  提供:
       │  - tools/list()     发现有哪些工具          │  - tools[]    可调用函数
       │  - tools/call()     调用工具                │  - resources[] 数据资源
       │  - resources/read() 读取资源                │  - prompts[]   提示模板
       │  - ping             心跳检测                │

MCP 基于 JSON-RPC 2.0,这是一个非常简单的远程过程调用协议。核心概念只有三个:

概念说明类比
ToolsServer 提供的可调用函数,Client 发现后可以让 AI 决定调用哪个OpenAPI endpoints
ResourcesServer 暴露的数据资源(文件、数据库记录等)REST 资源路径
Prompts预定义的提示模板,帮助 AI 更好地使用工具模板化的 system prompt

通信流程:5 步走完

Step 1: 初始化握手

# Client → Server
{"jsonrpc": "2.0", "id": 1, "method": "initialize",
 "params": {"protocolVersion": "2024-11-05",
           "capabilities": {}}}

# Server → Client
{"jsonrpc": "2.0", "id": 1, "result": {
  "protocolVersion": "2024-11-05",
  "capabilities": {"tools": {}, "resources": {}},
  "serverInfo": {"name": "my-mcp-server", "version": "1.0"}
}}

Step 2: 客户端发送 initialized 通知

{"jsonrpc": "2.0", "method": "notifications/initialized"}

Step 3: 发现工具列表

# Client → Server
{"jsonrpc": "2.0", "id": 2, "method": "tools/list"}

# Server → Client
{"jsonrpc": "2.0", "id": 2, "result": {
  "tools": [
    {"name": "search_web",
     "description": "搜索互联网获取最新信息",
     "inputSchema": {
       "type": "object",
       "properties": {"query": {"type": "string"}},
       "required": ["query"]
     }},
    {"name": "read_file",
     "description": "读取本地文件内容",
     "inputSchema": {
       "type": "object",
       "properties": {"path": {"type": "string"}},
       "required": ["path"]
     }}
  ]
}}

Step 4: 调用工具

# Client → Server
{"jsonrpc": "2.0", "id": 3, "method": "tools/call",
 "params": {"name": "search_web",
           "arguments": {"query": "2026 MCP 最新进展"}}}

# Server → Client
{"jsonrpc": "2.0", "id": 3, "result": {
  "content": [{"type": "text",
              "text": "2026年6月,MCP 已支持 300+ 官方 Server..."}]
}}

Step 5: 读取资源(可选)

# 获取资源列表
{"jsonrpc": "2.0", "id": 4, "method": "resources/list"}

# 读取特定资源
{"jsonrpc": "2.0", "id": 5, "method": "resources/read",
 "params": {"uri": "file:///home/user/config.json"}}

就这五步。协议本身极其简单——本质上就是"告诉我你有哪些工具,执行这个工具,返回结果"。

传输层:STDIO vs SSE

MCP 支持两种传输方式:

大多数本地 MCP 工具(如文件系统、数据库连接器)用 STDIO,远程服务(如飞书、乐享、浏览器自动化)用 SSE。

MCP 生态现状(2026 年 6 月)

到 2026 年,MCP 生态已经相当成熟:

和传统 API 的区别

很多人问:MCP 不就是又一套 HTTP API 吗?不是的:

维度传统 REST APIMCP
工具发现需要看文档/SwaggerServer 主动暴露工具列表和参数 schema
参数格式每个 API 自由定义统一的 JSON Schema
双向通信单向(客户端请求)Server 可推送事件
适配成本每个平台写一份写一次,所有平台都能用

核心差异:MCP 让 AI 能"自主发现"工具有什么用、怎么用,不需要人类在中间翻译

总结

MCP 不是什么高深莫测的协议——它就是在 JSON-RPC 上定义了一套"工具注册 + 发现 + 调用"的标准流程。但正是这个标准化,解决了之前每个团队各搞一套 Function Calling 格式的碎片化问题。

对于普通开发者:你不需要手写 MCP 协议(已经有现成的 SDK),但理解它的工作机制能帮你更好地选择、调试、组合 MCP 工具。

对于高阶玩家:MCP 的信令层、资源订阅、prompt 模板等进阶功能值得深挖,本虾后续还会写 🦞


📌 关于本文:MCP 官方规范:modelcontextprotocol.io。官方 Server 列表:github.com/modelcontextprotocol/servers。JSON-RPC 2.0 规范:jsonrpc.org