MCP 深度指南
"MCP 是 AI 应用的 USB-C 标准——一个通用的连接器,让工具和数据源能被任何模型使用。"
1. 问题定义:N×M 集成地狱
现代 AI 应用需要连接到 N 个数据源(GitHub、数据库、API)和 M 个模型提供商(Claude、GPT、Gemini)。如果没有标准化协议,每个提供商 × 数据源组合都需要定制集成——总计 N × M 个连接器。
Model Context Protocol (MCP) 通过一个通用标准解决了这个问题:
- 数据源提供商构建 一个 MCP Server 来暴露其数据
- AI 应用实现 一个 MCP Client 来消费任何兼容 Server 的数据
- 结果:N + M 个连接器 而非 N × M 个
Anthropic 于 2024 年 11 月开源了 MCP 规范。截至 2025 年初,主要采用者包括 Claude Desktop、Cursor、Zed IDE、Sourcegraph 和 Replit。
这种 "一次编写,到处运行" 的理念将模型提供商与工具构建者解耦,创建了一个标准化生态系统,开发者构建一个 "Postgres MCP Server" 就能立即接入所有 MCP 兼容 AI 应用的用户群。
2. 架构拓扑与系统设计
MCP 的架构不同于传统 RESTful API 范式,采用专为对话 AI 的有状态、会话式特性设计的 Client-Host-Server 拓扑。
2.1 MCP 三角:Host、Client 和 Server 的动态关系
MCP 生态系统由三个不同角色定义,通常称为 "MCP 三角":
| 组件 | 角色 | 职责与描述 |
|---|---|---|
| MCP Host | 编排器 | 用户面对的应用程序,LLM 运行其中(Claude Desktop、Cursor、Zed IDE)。管理 UI、上下文聚合、安全策略和决策。 |
| MCP Client | 连接器 | Host 内部的协议实现。将 LLM 输出转换为 JSON-RPC 消息,管理与 Server 的 1:1 持久连接。 |
| MCP Server | 提供者 | 封装特定数据源的独立进程。暴露 Resources、Tools 和 Prompts;执行实际 API 调用。 |
2.2 传输层:通信与逻辑解耦
MCP 是传输无关的——协议语义与传输层解耦。
Stdio(标准输入/输出)传输
- 机制:Host 将 Server 作为子进程启动;通过 stdin/stdout 通信
- 优势:零配置、本地安全、极低延迟
- 限制:Server 随 Host 会话结束而终止;难以在用户间共享
SSE(Server-Sent Events)/ HTTP 传输
- 机制:HTTP POST 用于客户端到服务端;SSE 用于服务端到客户端
- 优势:可扩展(服务数千客户端)、持久化、与标准基础设施兼容
- 安全:需要 OAuth/Bearer Token 和 TLS 加密
2.3 JSON-RPC 2.0:语言基础
MCP 的传输协议基于 JSON-RPC 2.0,一个无状态、轻量的远程过程调用协议。
MCP 中的每次交互都封装在 JSON-RPC 消息中:
- 请求:method、params 和唯一 id
- 响应:result 或 error,带有匹配的 id
- 通知:method 和 params,无 id(即发即弃)
3. 功能原语:能力剖析
MCP 将 AI 交互标准化为三种主要能力类型,或称 "原语":
3.1 Resources:被动上下文层
Resources 代表 Server 暴露的**"只读"**知识。
- 定义:提供上下文的被动数据
- 标识:每个 resource 有唯一 URI(如
file:///logs/app.log、postgres://users/schema) - 动态发现:Server 可暴露 "Resource Templates"(如
git://{repo}/pull/{pr_number}) - 订阅:Client 可通过
notifications/resources/updated订阅实时更新
3.2 Tools:智能体行动层
Tools 是 Server 的可执行能力。
- 定义:接受参数并返回结果的可执行函数
- 结构:name、description 和 inputSchema(JSON Schema)
- 执行:Host 暂停生成,Client 发送
tools/call请求,Server 执行,结果返回给模型 - 副作用:Tools 假定有副作用,通常触发 Human-in-the-Loop 确认
3.3 Prompts:模板层
Prompts 允许 Server 导出**"最佳实践"**交互模板。
- 定义:预配置模板,定义 LLM 应如何与 Server 数据交互
- 用例:Git MCP Server 可能暴露
generate-commit-messageprompt - 价值:标准化工作流并编码专家策略