MCP 协议深度解析:从通信模型到工具调用

MCP(Model Context Protocol)是 Anthropic 于 2024 年底推出的一项开放协议标准,旨在为 AI 应用程序提供一套统一的、标准化的外部工具与数据接入接口。形象地说,MCP 就像 AI 世界的"USB-C 接口"——无论你是 Claude、ChatGPT,还是 OpenClaw Agent,只要实现了 MCP 协议,就能即插即用地连接文件系统、数据库、搜索引擎、API 网关等任意外部系统。
🎯 一、MCP 是什么:要解决什么问题?
在 MCP 出现之前,AI Agent 接入外部工具的方式极为碎片化:
- 每个 AI 框架自己定义 Function Calling 格式(OpenAI、Anthropic、Google 各有不同)
- 每个工具需要单独写适配代码(查数据库一个函数、发邮件一个函数、读文件一个函数)
- 工具复用几乎不可能——换个平台就得重写
MCP 的核心目标就是:一次定义工具,到处接入 AI。 它定义了一套标准化的通信协议(基于 JSON-RPC 2.0),让 MCP 服务器(工具提供方)和 MCP 客户端(AI 应用)之间可以自动完成能力发现、工具调用和数据交换。
支持 MCP 的生态(2026年): Claude Desktop · Claude Code · ChatGPT · Visual Studio Code · Cursor · OpenClaw · MCPJam · Continue · Zed · Copilot 等
📡 二、传输层:三种通信模式
MCP 定义了三种传输方式,适用于不同的部署场景:
| 传输方式 | 通信方向 | 适用场景 | 连接模型 |
|---|---|---|---|
| stdio | 子进程 stdin/stdout | 本地工具,1 客户端 : 1 服务器 | 进程生命周期绑定 |
| SSE(Server-Sent Events) | HTTP Server-Sent Events | 远程服务器,1 : N 多客户端 | HTTP 长连接 |
| Streamable HTTP | HTTP 请求-响应 + 流 | 远程服务器,支持 OAuth | 无状态 HTTP,可扩展 |
stdio 传输(最常用)
AI 应用(Host)以子进程方式启动 MCP 服务器,通过标准输入/输出进行 JSON-RPC 通信。适用于本地文件系统、本地数据库、代码分析器等无需网络的服务。
Streamable HTTP 传输
适用于云端/远程工具,支持标准 OAuth 认证、mTLS 双向证书验证,以及并行工具调用。一个远程 MCP 服务器可以同时服务于多个 AI 客户端。
📨 三、消息层:JSON-RPC 2.0 通信格式
MCP 所有通信都基于 JSON-RPC 2.0 协议,三种基本消息类型:
➡️ Request(请求)
客户端→服务器。包含 id(唯一标识)、method(方法名)、params(参数)。
⬅️ Response(响应)
服务器→客户端。要求 id 与请求匹配,返回 result 或 error。
🔔 Notification(通知)
单方向消息,无对应响应。不需要 id,用于日志、进度等。
JSON-RPC Request 示例
🔄 四、核心生命周期:初始化 → 工具列表 → 调用 → 关闭
一个完整的 MCP 连接的生命周期分为四个阶段:
△ MCP 连接生命周期:初始化→工具发现→调用→关闭
阶段一:Initialize(初始化)
客户端发送 initialize 请求,包含自己支持的协议版本和能力声明。服务器回复自己的版本和能力。双方协商出共同支持的协议版本后进入就绪状态。
阶段二:能力发现(List Tools / Resources / Prompts)
初始化完成后,客户端调用 tools/list 获取服务器上所有可用的工具列表,每个工具包含名称、描述和 InputSchema(JSON Schema 格式的参数声明)。
阶段三:工具调用(Tools/Call)
AI 模型根据工具列表决定调用哪个工具,客户端发送 tools/call,传入工具名和参数。服务器执行后返回结果(文本、图像、资源引用等)。
阶段四:关闭
结束会话时关闭传输通道。stdio 模式下进程退出即关闭;HTTP 模式下可发送取消通知或关闭连接。
🧩 五、工具注册与 InputSchema
每个 MCP 工具通过 inputSchema 描述自己的参数格式,采用 JSON Schema 标准。这使得 AI 模型可以自动理解每个工具需要什么参数,并正确构造调用请求。
工具定义的核心字段:
name— 工具名称,AI 通过此名称识别和调用description— 自然语言描述,解释工具的用途和何时调用inputSchema— JSON Schema,声明参数的类型、格式、必填项和描述
OpenClaw 中通过 mcp.servers 配置注册 MCP 服务器后,支持使用 toolFilter 精确控制暴露哪些工具到 Agent:
⚡ 六、Skill + MCP 集成模式
在 OpenClaw 中,MCP 工具与 Skill 可以深度协作。典型的集成模式如下:
模式一:Skill 声明 MCP 依赖
Skill 的 SKILL.md 中声明其依赖的 MCP 服务器和工具,Agent 加载 Skill 时自动确保对应 MCP 服务器已注册。
模式二:透传调用
Agent 在 Prompt 上下文中看到已注册 MCP 服务器的工具列表,AI 模型自主决定何时调用哪个工具——无需任何额外适配代码。这是 MCP 最大的优势:工具接入与 AI 推理完全解耦。
模式三:OpenClaw 作为 MCP Server(服务端模式)
使用 openclaw mcp serve 将 OpenClaw 自身暴露为一个 MCP 服务器,外部 MCP 客户端(如 Claude Code)可以通过 stdio 连接,读取 OpenClaw 的会话历史、发送消息、处理审批。
🔗 七、多会话连接池管理
在 OpenClaw 中,MCP 服务器连接由 Gateway 统一管理,支持:
- 会话级注入:每个 Agent 会话可以拥有独立的 MCP 工具集
- 空闲回收:MCP 子进程空闲超过
mcp.sessionIdleTtlMs(默认 10 分钟)后自动回收 - 故障隔离:单个 MCP 服务器的重复协议失败会被短暂暂停,不会拖垮整个 Agent 推理
- 热重载:
openclaw mcp reload可重新加载 MCP 服务器配置,无需重启 Gateway - 并行调用:对于声明支持并行工具调用的 MCP 服务器,OpenClaw 可以同时发起多个工具请求
🛡️ 八、安全边界:Scope 与 Approval 机制
MCP 协议本身不强制执行安全策略——但 OpenClaw 围绕 MCP 构建了多层安全防护:
| 安全层 | 机制 | 作用 |
|---|---|---|
| toolFilter | Include/Exclude 过滤 | 控制 Agent 可见的 MCP 工具范围 |
| Approval | 可配置审批规则 | 高风险工具需要用户手动确认 |
| OAuth | 标准 OAuth 2.0 流程 | 远程 MCP 服务器的身份认证 |
| mTLS | 双向证书验证 | 私密 HTTPS 端点的安全通信 |
| Env 安全过滤 | 拦截危险环境变量 | 防止 stdio 启动时被注入恶意配置 |
🔄 九、MCP vs Function Calling
| 维度 | MCP | 传统 Function Calling |
|---|---|---|
| 协议标准 | 开放标准,跨平台跨厂商 | 各家厂商私有格式 |
| 工具注册 | MCP Server 自动注册+发现 | 代码中手动定义函数签名 |
| 复用性 | 一次构建,任何 MCP Host 可用 | 每个项目/平台单独实现 |
| 传输层 | stdio / SSE / HTTP | 通常绑定 SDK 内部 |
| 实时通知 | 支持(服务端推送进度/日志) | 不支持 |
| 生命周期 | 有状态连接,能力协商 | 无状态,每次调用独立 |
| 生态规模 | 快速增长中(2026年) | 成熟但碎片化 |
结论:MCP 不是要取代 Function Calling——它是 Function Calling 的"上层标准"。Function Calling 解决了"模型如何调用函数"的技术问题,而 MCP 解决了"工具如何被 AI 发现和复用"的生态问题。两者在同一个 Agent 中可以共存:MCP 处理外部工具的标准化接入,Function Calling 处理模型内部的推理交互。
📝 总结
MCP 是 AI Agent 生态走向标准化的重要里程碑。它用一套简洁的 JSON-RPC 协议,将"工具接入"从重复劳动变成了"一次开发,随处可用"。对于 OpenClaw 用户来说,MCP 意味着:
- 已有 MCP 生态中 1000+ 个工具可以直接集成
- 无需为每个工具编写适配代码
- 工具接入与 AI 推理完全解耦
- 不同 MCP 客户端共享同一套工具注册表
🔌 MCP 生态资源
OpenClaw 知识百科 · MCP协议深度解析 · 知识wiki





黑公网安备 23010302001359号