Skip to content

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标准输入输出本地进程本地工具、访问本地资源、无需联网
HTTPHTTP远程服务云服务、团队共享
SSEServer-Sent Events远程服务需要服务端推送的场景
WebSocketWebSocket远程服务双向实时

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)。


延伸阅读

基于 VitePress 构建 · 内容采用原作者授权