Appearance
Model Context Protocol (MCP)
MCP(Model Context Protocol) 是 Anthropic 主导开发的一种开放标准协议,旨在为 AI 应用程序提供与外部系统(数据源、工具、工作流)交互的统一接口。它将 AI 模型与外部世界的连接标准化,被誉为"AI 应用的 USB-C 接口"。
Overview
在 MCP 出现之前,每个 AI 应用(Claude、ChatGPT、VS Code 等)都需要为集成的外部系统(文件系统、数据库、API、日历等)编写自定义适配代码。这种碎片化的集成模式导致:
- 重复劳动:每个 AI 应用重复实现相同的工具集成
- 不可移植:为一个平台编写的集成无法在其他平台复用
- 安全风险:缺乏统一的安全审核和权限控制框架
MCP 通过提供一个标准化的协议层来解决这些问题——让 AI 应用作为 MCP Host,外部系统通过 MCP Server 暴露能力,两者通过 JSON-RPC 2.0 协议进行标准化通信。
类比理解
USB-C 接口 = MCP 协议
USB-C 设备 = MCP Server(文件系统、数据库、GitHub……)
USB-C 主机 = MCP Host(Claude Desktop、VS Code、ChatGPT……)就像 USB-C 统一了电子设备的连接方式,MCP 统一了 AI 应用与外部世界的连接方式。
Architecture
MCP 遵循 客户端-服务器架构,基于 JSON-RPC 2.0 作为通信协议。
核心参与者
┌─────────────────────────────────────────────────────────┐
│ MCP Host (AI 应用) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │Client 1 │ │Client 2 │ │Client 3 │ ← 每个Client │
│ │(连接管理) │ │(连接管理) │ │(连接管理) │ 对应一个Server│
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
└───────┼───────────────┼───────────────┼──────────────────┘
│ JSON-RPC 2.0 │ │
┌─────▼──────┐ ┌────▼─────┐ ┌──────▼─────┐
│ MCP Server │ │MCP Server│ │ MCP Server │
│ (本地/远程) │ │ (本地) │ │ (远程) │
│ 文件系统 │ │ 数据库 │ │ GitHub │
└────────────┘ └──────────┘ └────────────┘| 角色 | 说明 | 示例 |
|---|---|---|
| MCP Host | 管理用户体验并协调多个 Client 的 AI 应用 | Claude Desktop、VS Code、ChatGPT |
| MCP Client | Host 为每个 Server 创建的协议级连接组件 | 一个 Host 可以有多个 Client |
| MCP Server | 通过标准化接口暴露特定能力的程序 | 文件系统、数据库、GitHub、Slack 等 |
两种传输方式
| 传输方式 | 适用场景 | 特点 |
|---|---|---|
| STDIO | 本地 MCP Server | 进程内通信,一对一连接,适合文件系统等本地资源 |
| Streamable HTTP | 远程 MCP Server | 网络通信,一对多连接,适合 API/SaaS 集成 |
Core Primitives
MCP Server 通过三种核心原语暴露能力:
1. Resources(资源)
只读的被动数据源,为模型提供上下文信息。
| 属性 | 说明 |
|---|---|
| 用途 | 检索文档、读取文件、访问知识库、获取日历 |
| 控制方 | 应用(MCP Host/Client 决定何时使用) |
| 协议操作 | resources/list — 列出可用资源;resources/read — 读取资源内容 |
| 典型场景 | AI 在回答问题前检索相关文档作为上下文 |
2. Tools(工具)
模型可主动调用的操作,支持写操作。
| 属性 | 说明 |
|---|---|
| 用途 | 写入数据库、调用外部 API、发送消息、修改文件 |
| 控制方 | 模型(LLM 根据上下文决定是否调用) |
| 协议操作 | tools/list — 发现可用工具及其 JSON Schema 定义;tools/call — 执行特定工具 |
| 安全机制 | 工具执行可能需要用户授权(user consent),确保用户保持控制 |
| 典型场景 | AI 写代码时调用 GitHub MCP 创建 PR、发消息时调用 Slack MCP |
3. Prompts(提示词模板)
预构建的指令模板,指导模型如何与特定工具和资源协作。
| 属性 | 说明 |
|---|---|
| 用途 | 规划假期、总结会议、起草邮件、代码审查 |
| 控制方 | 用户(用户选择使用哪个模板) |
| 协议操作 | prompts/list — 列出可用提示词;prompts/get — 获取提示词模板内容 |
| 典型场景 | 用户说"帮我规划假期",触发含航班工具调用模板 |
三者协作示例
以旅行助手场景为例:
用户: "帮我规划下周去东京的行程"
MCP Server (航班工具): tools/call → 搜索航班
MCP Server (酒店资源): resources/read → 获取酒店推荐
MCP Server (日历资源): resources/read → 读取用户日历确认空闲时间
Prompt 模板: 组织输出为结构化行程单Client Features
MCP Client 除了消费 Server 提供的能力外,还可以提供以下功能给 Server:
Elicitation(信息征询)
允许 Server 在交互过程中主动向用户请求特定信息——提供了一种结构化方式来按需收集信息。例如旅行预订 Server 可以询问乘客偏好、座位类型、联系方式。
Roots(根目录)
允许 Client 指定 Server 应关注的工作范围,通过一种协调机制来设定边界。例如代码审查 Server 可能只被授予访问特定项目目录的权限。
Security Model
MCP 设计了一套多层级的安全模型:
| 层级 | 机制 | 说明 |
|---|---|---|
| 用户授权 | 工具执行前可能要求用户确认(user consent) | 用户对模型的每个重要操作保持最终控制 |
| 信任边界 | 本地 STDIO Server 与远程 HTTP Server 的信任层级不同 | 远程 Server 需要额外的身份验证 |
| 根目录隔离 | Roots 机制限制 Server 可访问的路径范围 | 防止 Server 越权访问文件系统 |
| 认证方案 | 支持 Bearer Token、API Key、OAuth2 等多种认证方式 | 通过 Authorization header 传递 |
Versioning
MCP 使用基于日期的版本标识符,格式为 YYYY-MM-DD,表示最后一次不向后兼容变更的日期。只要变更保持向后兼容,协议版本不会递增。这允许在保持互操作性的同时进行增量改进。
当前最新协议版本:2025-11-25
Ecosystem
SDK 支持
MCP 官方提供以下语言的 SDK,已在 GitHub 开源(MIT 许可证):
- Python SDK — 完整的 async/await 支持
- TypeScript/JavaScript SDK — 服务端和客户端实现
- Java SDK — 基于 Reactor 的响应式实现
- Kotlin SDK — 基于协程的轻量级实现
- Go SDK — 基于 Go 协程的高性能实现
已知的 MCP Server 实现
| 类型 | 示例 |
|---|---|
| 代码/开发 | GitHub、GitLab、Filesystem、VS Code |
| 通信 | Slack、Notion、Google Calendar、Gmail |
| 数据 | PostgreSQL、SQLite、DuckDB、Elasticsearch |
| 创意 | Figma、Blender、Photoshop |
| 基础设施 | Kubernetes、Docker、AWS、Cloudflare |
| 搜索/知识 | Brave Search、Tavily、Perplexity |
已知的 MCP Host
| Host | 支持方 |
|---|---|
| Claude Desktop | Anthropic |
| Claude Code | Anthropic |
| VS Code | Microsoft |
| Zed | Zed Industries |
| Cursor | Cursor |
| IntelliJ IDEA | JetBrains(插件) |
| Continue.dev | Continue |
| Sourcegraph Cody | Sourcegraph |
MCP vs Harness Engineering
MCP 与 Harness Engineering 在概念上互补:
| MCP | Harness Engineering | |
|---|---|---|
| 范围 | 协议层:标准化 AI ↔ 外部工具的通信 | 方法论层:设计约束、反馈回路、整体架构 |
| 关注点 | 连接(Connection) | 控制(Control) |
| 输出 | 可插拔的工具/资源/提示词标准 | AGENTS.md、linter、机械约束 |
| 关系 | MCP Server 是 Harness 中 Tools 层的标准实现 | Harness 是 MCP 的更高层设计哲学 |
在 Harness Engineering 的组件清单中,MCP Server 对应"Tools & MCP"组件——为智能体提供标准化的能力扩展接口。
Why MCP Matters
- 标准化消除了重复集成 — 一个 MCP Server 可供所有主流 AI 应用复用,不再"为每个平台写一遍"
- 降低了 AI 应用开发门槛 — 开发者只需实现标准协议即可让自己的系统被 AI 访问
- 提升了安全性 — 统一的用户授权框架和信任边界模型
- 生态系统效应 — MCP Registry 将发展为类似 npm/PyPI 的工具市场
- 与 Agent 范式天然契合 — Tools 原语是 Agent 调用外部能力的基础
Related Concepts
- AI Agents — AI Agent 系统形态,MCP 是 Agent 的工具扩展标准
- Harness Engineering — Harness Engineering 方法论,MCP 是其 Tools 层的标准实现
- Model Inference & Deployment — 模型部署中 MCP 作为服务间通信协议
Open Questions
- MCP 在跨模型可移植性方面的表现如何?使用 MCP 的 Agent 是否能更自由地在模型间切换?
- MCP Registry 是否会形成类似 npm 的垄断效应?
- MCP 对工具调用的延迟开销是否会影响 Agent 的实时性?
- MCP 与 OpenAI 的 Function Calling、Google 的 Tool Use 标准如何竞合?