AI

Anthropic-feature:MCP

Posted by 汤键|兔子队列 on December 8, 2025 禁止转载
本文总共 2360 字 · 阅读全文大约需要 10 分钟

核心概念

MCP 是什么

MCP (Model Context Protocol) 标准化数据总线 是 Anthropic 开源的一套标准化协议

用于建立客户端、主机和服务器之间的通用对话方式

核心特征:

  • 统一接口:任何支持 MCP 的 AI 都能访问遵循 MCP 标准的数据源
  • 即插即用:实现一次,到处通用
  • 标准化通信:基于 JSON-RPC 协议

理解”标准化”问题

每个数据源都说”方言”

因素 说明
没有通用标准 GitHub、Slack、Google Drive 由不同公司在不同年份开发
各自的设计目标 每个服务解决的是不同的问题
通信方式差异 API 设计完全不同:请求格式、认证方式、返回数据结构都不一样
数据源 需要做的事情
GitHub GET /commits + Authentication 头 + 读 message 字段
Slack POST /conversations.history + Bot Token + 读 text 字段
Google Drive GET /drive/files + OAuth2 认证 + 读 name 字段

关键点:指令完全不同,数据格式也不同

为 GitHub 写的代码对 Slack 完全无用

AI 也说”方言”

1
2
3
4
5
6
7
8
9
10
11
OpenAI (GPT-4):
└─ 数据必须包装成 messages 列表
└─ Function Calling 需要特定的 JSON Schema 格式

Anthropic (Claude):
└─ API 结构不同
└─ System Prompt 位置要求不同
└─ 工具定义格式在细节字段上不兼容

本地模型 (Llama 3):
└─ 需要特定的提示词模板格式

N × M 复杂度问题

场景:

  • 数据源:3 个(GitHub、Slack、本地数据库)
  • AI 客户端:3 个(Claude Desktop、Cursor、Dify)

旧模式的工作量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
总工作量 = 数据源数量 × AI 数量
= 3 × 3 = 9 组适配器代码

GitHub ──┬─→ Claude 适配器
├─→ Cursor 适配器
└─→ Dify 适配器

Slack ───┬─→ Claude 适配器
├─→ Cursor 适配器
└─→ Dify 适配器

DB ──────┬─→ Claude 适配器
├─→ Cursor 适配器
└─→ Dify 适配器

MCP 模式的工作量:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
总工作量 = 数据源数量 + AI 数量
= 3 + 3 = 6 次标准适配

数据源方(Server):
└─ GitHub 实现一个 MCP Server
└─ Slack 实现一个 MCP Server
└─ DB 实现一个 MCP Server

AI 方(Client):
└─ Claude 学会 MCP 协议
└─ Cursor 学会 MCP 协议
└─ Dify 学会 MCP 协议

结果:任何组合都能自动工作

理解”解耦”的价值

MCP 出现前的紧耦合

假设你开发了一个 AI 助手来查看 GitHub 仓库:

1
2
3
4
5
6
7
8
9
// 你的 AI 应用代码(紧耦合)
func fetchGitHubData() {
	// GitHub API 的细节被硬编码在这里
	response := http.Get("https://github.com/api/v3/repos/...")
	// 特定的鉴权方式
	req.Header.Set("Authorization", "token " + token)
	// 特定的数据解析逻辑
	data := response.JSON["items"][0]["message"]
}

后果

  • 你的 AI 软件和 GitHub 绑死了
  • 如果 GitHub 改了接口 → 你的 AI 软件就挂了
  • 如果你想换成 GitLab → 代码得完全重写

MCP 如何解耦

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
┌─────────────────────────────────────────────────┐
│ AI 客户端 │
│ (Claude Desktop / Cursor / Dify) │
│ └─ 只说"普通话"(标准 MCP 指令) │
└─────────────┬───────────────────────────────────┘
│ (标准 MCP 协议)
│
┌─────────────▼───────────────────────────────────┐
│ MCP Server(翻译官) │
│ ┌──────────────────────────────────────────┐ │
│ │ 左侧:听 AI 说普通话 │ │
│ │ 右侧:跟 GitHub 说"方言" │ │
│ │ 作用:隔离变化,防止数据源变动影响客户端 │ │
│ └──────────────────────────────────────────┘ │
└─────────────┬───────────────────────────────────┘
│ (GitHub 特定 API)
│
┌─────────────▼───────────────────────────────────┐
│ GitHub API(数据源) │
└─────────────────────────────────────────────────┘
维度
耦合方式 点对点紧耦合 通过标准协议解耦
变化隔离 GitHub 改 API → AI 挂了 GitHub 改 API → 只改 Server
AI 端影响 需要改代码 无需改代码
防腐效果 ❌ 无防护 ✅ 完全隔离

维护成本对比

场景:GitHub 修改了底层 API

旧模式(没有 MCP):

1
2
3
4
5
6
7
GitHub API 变更通知 ↓
Claude Desktop 里的连接器 → 坏了 → 需要修 1 次
Cursor 编辑器 里的插件 → 坏了 → 需要修 1 次
Dify 平台 里的模块 → 坏了 → 需要修 1 次

总修改次数:3 次
维护成本:高

新模式(有 MCP):

1
2
3
4
5
6
7
8
GitHub API 变更通知 ↓
git-mcp-server 代码 → 修改 1 处
↓
所有 AI 客户端自动获得修复

总修改次数:1 次
维护成本:✅ 低
所有客户端是否需要改代码?❌ 都不需要

三大原语