主题
07.1 MCP 协议原理
MCP 是让 Claude 连接一切外部系统的开放协议。理解它,你就理解了所有连接器的底层。
读完你能做什么:说清 MCP 解决什么问题、它的三种传输和四类原语,并判断什么场景该用 MCP。
一、MCP 解决的根本问题
Claude 本身是封闭的 —— 它只能处理你放进上下文的内容。但真实工作需要它访问:
text
你的数据库 你的工单系统 你的代码仓库 你的文档 你的监控在 MCP 之前,每接一个系统都要定制集成,N 个模型 × M 个系统 = N×M 个适配。
MCP 的核心思想:定义一个标准协议,让任何系统只要实现一次这个协议,就能被任何支持 MCP 的 AI 使用。N + M 取代 N×M。
text
MCP 协议(统一标准)
│
┌──────────┼──────────┐
Claude 其他 AI ...
│
┌──────────┼──────────┐
数据库 工单系统 你的内部 API
(实现一次) (实现一次) (实现一次)MCP(Model Context Protocol)是一个开放标准。[Connectors] (连接器) 就是 MCP 的一层 UI 封装(见 01.6)。
二、客户端与服务端
text
┌─────────────────┐ ┌──────────────────┐
│ MCP 客户端 │◄───────►│ MCP 服务端 │
│ (Claude Code、 │ 协议 │ (你或第三方写的) │
│ 桌面客户端等) │ │ │
└─────────────────┘ └──────────────────┘
消费能力 暴露能力- 客户端:Claude Code、Claude 桌面客户端、CoWork 等。它们消费 server 暴露的能力。
- 服务端:把某个系统的能力包装成 MCP 协议暴露出来。可以是官方的(GitHub、Sentry)、第三方的、或你自研的。
三、三种传输方式
MCP server 通过不同的传输与客户端通信:
| 传输 | 全称 | 运行位置 | 适合 |
|---|---|---|---|
| stdio | 标准输入输出 | 本地进程 | 本地工具、访问本地资源、无需联网 |
| HTTP | HTTP | 远程服务 | 云服务、团队共享 |
| SSE | Server-Sent Events | 远程服务 | 需要服务端推送的场景 |
| WebSocket | WebSocket | 远程服务 | 双向实时 |
3.1 怎么选传输
text
server 在你本地跑,访问本地文件/数据库
→ stdio
server 是别人托管的云服务
→ HTTP(现在最主流)
需要 server 主动推送事件
→ SSE 或 WebSocket安装命令对应不同传输,见 07.2。
四、四类原语(Primitives)
MCP server 可以暴露四种东西给 Claude:
4.1 Tools(工具)—— 最常用
可被 Claude 调用的函数。
text
例:query_database(sql)、create_issue(title, body)、send_message(channel, text)工具是 Claude "做事"的手段。在 Agent Loop 里,MCP 工具和内置工具(Bash、Read)平等地参与循环(见 06.1)。
工具名的形式:mcp__<server>__<tool>,如 mcp__github__create_issue。
4.2 Resources(资源)—— 可引用的数据
Claude 可以读取的数据源,用 URI 标识。
text
例:file:///logs/app.log、db://users/schema、doc://wiki/onboarding在 Claude Code 里可以引用 MCP 资源,让它读取。
4.3 Prompts(提示词)—— 预设的命令
Server 可以提供预设的提示词模板,作为斜杠命令暴露。
text
例:某个 server 提供 /deploy-checklist,展开成一段标准的部署检查提示词4.4 Elicitation(信息征询)—— 反向索要输入
Server 可以在执行中反向向用户索要信息。
text
例:一个部署 server 在执行前问"确认部署到 production 吗?(yes/no)"见 07.3 的安全考量。
五、一次 MCP 工具调用的完整流程
以"让 Claude 查数据库"为例:
text
1. 你问:"上个月注册了多少用户?"
2. Claude 决定调用 mcp__db__query
生成:{tool: "mcp__db__query", args: {sql: "SELECT COUNT(*)..."}}
3. Claude Code 客户端拦截,检查权限(MCP 工具也走权限系统)
4. 客户端通过传输(如 stdio)把请求发给 db server
5. db server 执行 SQL,返回结果
6. 结果作为工具结果回填 Claude 的上下文
7. Claude 基于真实数据回答:"上个月注册了 3,847 人"关键:和内置工具一样,Claude 只生成请求,客户端负责执行。数据库的实际访问由 server 完成。
六、什么时候用 MCP,什么时候不用
6.1 该用 MCP
| 场景 | 为什么 |
|---|---|
| 需要查询活数据(数据库、工单、监控) | 数据实时变化,不能靠静态上传 |
| 需要写入外部系统(建 issue、发消息) | 需要真实的写操作 |
| 团队共享的内部系统接入 | 一次实现,全团队用 |
| 有现成官方 server 的服务(GitHub、Sentry) | 直接用,不用自己写 |
6.2 不该用 MCP
| 场景 | 更好的选择 |
|---|---|
| 静态参考资料 | Project 知识库 / 文件 |
| 一次性的本地文件操作 | Claude Code 的内置工具 |
| 固定的多步流程 | Skill |
| 只是想让它读一个网页 | WebFetch |
判据:MCP 提供的是新能力(新的工具函数)。如果你只是想提供新知识或新流程,用 Project / Skill 更轻。见 00.3 第六节。
七、MCP 生态
7.1 找现成的 server
很多服务已有官方或社区 MCP server:
text
GitHub、GitLab、Sentry、Notion、Slack、Asana、Stripe、
Postgres、Airtable、Google Drive、Linear、Jira ...在 Claude Code 里可以搜索连接器注册表来发现它们。
7.2 官方文档
MCP 是开放标准,规范和 SDK 见:
https://modelcontextprotocol.io(协议规范)https://code.claude.com/docs/en/mcp(Claude Code 的 MCP 文档)
八、一个心智模型
把 MCP 理解成"给 Claude 装外设":
text
Claude 本体 = 主机
内置工具 = 主机自带的接口(USB、网口)
MCP server = 你插上去的外设(打印机、扫描仪、外置硬盘)
MCP 协议 = USB 标准(让任何外设都能插任何主机)- 装一个 GitHub server = 插上一个"代码托管外设"
- 装一个 Postgres server = 插上一个"数据库外设"
- 写自己的 server = 自制一个外设
外设越多,Claude 能做的事越多 —— 但也越占"接口资源"(上下文),这就是为什么工具多了要用 tool search(见 07.5)。