3.1 本章介绍
🎯 一句话理解
MCP (Model Context Protocol) 是 AI 工具集成的通用协议标准,让 Claude Code 能够像使用 USB-C 一样连接到任何外部工具、数据库和服务。
🤔 为什么需要 MCP?
想象你让 Claude 帮你:
场景 1:调试生产环境错误
❌ 没有 MCP:
你:"Claude,线上有个认证错误"
Claude:"能提供错误日志吗?"
你:(切换到 Sentry)→ 复制错误信息 → 粘贴到 Claude
Claude:"能看看相关的代码吗?"
你:(切换到 GitHub)→ 找到文件 → 复制代码 → 粘贴回来
Claude:"这个 API 的文档是什么样的?"
你:(切换到 Notion)→ 搜索文档 → 复制内容 → 再次粘贴来回切换 5-10 次,花费 20 分钟,上下文不断丢失。
✅ 有 MCP:
你:"Claude,分析 @sentry 中的最新认证错误"
Claude:
→ 自动连接 Sentry 获取错误详情
→ 自动访问 @github 查看相关代码
→ 自动查询 @notion 中的 API 文档
→ 3 分钟内给出完整诊断和修复建议一次性完成,工作流不中断。
场景 2:实现 JIRA 任务
❌ 没有 MCP:
你:(打开 JIRA)→ 阅读需求 → 复制到笔记
你:(打开 Figma)→ 查看设计 → 截图保存
你:"Claude,根据这个需求实现..." → 粘贴需求文本
Claude:开始编码
你:"等等,设计稿里按钮是蓝色的" → 粘贴截图
Claude:修改代码
你:"能自动更新 JIRA 状态吗?"
Claude:"抱歉,我无法直接访问 JIRA"
你:(回到 JIRA)→ 手动更新状态手动来回 8+ 次,信息容易遗漏。
✅ 有 MCP:
你:"实现 @linear:issue://ENG-123"
Claude:
→ 自动读取 Linear issue 完整需求
→ 自动获取 @figma 设计规范
→ 实现功能并运行测试
→ 自动更新 Linear issue 状态为 "In Review"
→ 创建 GitHub PR 并关联 issue端到端自动化,零信息丢失。
场景 3:数据分析与报告
❌ 没有 MCP:
你:(打开 PostgreSQL 客户端)→ 运行查询 → 导出 CSV
你:"Claude,分析这份销售数据" → 上传 CSV 文件
Claude:分析数据并生成见解
你:"能把这个加到 Notion 的季度报告里吗?"
Claude:"你需要手动复制粘贴到 Notion"
你:(打开 Notion)→ 创建页面 → 格式化内容 → 手动添加数据流转完全手动,耗时 30+ 分钟。
✅ 有 MCP:
你:"分析 @postgres:sales 表的 Q1 数据并更新 @notion 季度报告"
Claude:
→ 自动查询 PostgreSQL 数据库
→ 运行数据分析和可视化
→ 生成结构化报告
→ 自动创建/更新 Notion 页面
→ 添加图表和关键指标完全自动化,5 分钟完成。
💡 核心问题与解决方案
问题 1:集成复杂度爆炸 (M×N 问题)
传统方式:
- 每个 AI 工具需要为每个服务写定制集成代码
- N 个 AI 工具 × M 个服务 = N×M 个连接器
- GitHub 集成、Notion 集成、Slack 集成... 每个都要单独实现
- 维护成本指数级增长
MCP 解决方案:
- 一次实现,处处可用
- AI 工具实现 MCP 客户端 一次
- 服务提供 MCP 服务器 一次
- N + M = 线性复杂度
- 类似 USB-C:一个标准,连接所有设备
问题 2:上下文效率低下
传统方式:
- 工具定义占用大量 token(150,000+ tokens)
- 中间结果多次流经模型(50,000+ tokens 额外开销)
- 每次工具调用都是完整的请求-响应循环
- 成本高、延迟大
MCP 解决方案:
- 98.7% token 减少(150,000 → 2,000 tokens)
- 按需加载工具定义(渐进式发现)
- 中间结果在执行环境处理,不经过模型
- 文件系统层次结构组织工具
- 支持代码执行进行复杂数据处理
问题 3:工具发现和适配困难
传统方式:
- 硬编码的工具列表
- API 变化导致集成失效
- 需要单独的文档和说明
- 版本兼容性问题
MCP 解决方案:
- 动态工具发现(运行时
tools/list查询) - 自描述接口(工具包含语义描述和参数说明)
- 参数变化时客户端自动适配
- 无需单独文档,接口即文档
📖 什么是 MCP?
比类理解
MCP 就像:
USB-C 通用接口
- USB-C 让你用一根线连接所有设备(显示器、硬盘、手机)
- MCP 让 Claude 用一个协议连接所有服务(GitHub、数据库、Notion)
ODBC 数据库标准
- 90 年代 ODBC 让应用程序标准化连接任何数据库
- 2020 年代 MCP 让 AI 标准化连接任何工具和数据源
语言服务器协议 (LSP)
- LSP 让任何编辑器支持任何编程语言(VS Code、Vim、Emacs)
- MCP 让任何 AI 访问任何数据源和工具
技术定义
Model Context Protocol (MCP) 是一个开源的标准协议,用于连接 AI 系统与外部数据源、工具和服务。它定义了统一的通信接口,使 AI 应用能够动态发现、访问和调用外部能力,同时保持高效的上下文管理和安全的权限控制。
核心组成:
- 协议层:基于 JSON-RPC 2.0 的消息交换规范
- 传输层:支持 HTTP、SSE、Stdio 三种传输机制
- 原语层:定义 Resources、Prompts、Tools 等核心概念
- 安全层:OAuth 2.1 认证和权限管理
🎨 MCP 工作原理(可视化)
┌─────────────────────────────────────────────────────────────┐
│ Claude Code (MCP Host) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ MCP Client 1 │ │ MCP Client 2 │ │ MCP Client 3 │ │
│ │ (GitHub) │ │ (Sentry) │ │ (Postgres) │ │
│ └───────┬──────┘ └───────┬──────┘ └───────┬──────┘ │
└──────────┼─────────────────┼─────────────────┼────────────┘
│ │ │
│ MCP Protocol │ MCP Protocol │ MCP Protocol
│ (JSON-RPC 2.0) │ (JSON-RPC 2.0) │ (JSON-RPC 2.0)
│ │ │
┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐
│ MCP Server │ │ MCP Server │ │ MCP Server │
│ (Remote) │ │ (Remote) │ │ (Local) │
│ GitHub │ │ Sentry │ │ Postgres │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
▼ ▼ ▼
GitHub API Sentry API Local Database数据流:
- Claude Code 创建 MCP 客户端连接到每个服务器
- 服务器暴露 Tools(可执行函数)、Resources(数据)、Prompts(提示模板)
- Claude 动态发现可用工具:
tools/list→ 获取 GitHub/Sentry/Postgres 的所有工具 - 用户请求时,Claude 调用相应工具:
tools/call→ 执行操作 - 结果直接返回,无需多次往返
🆚 MCP vs Skills:何时使用什么?
| 维度 | Skills | MCP |
|---|---|---|
| 核心定位 | 📋 工作流程和提示模板 | 🔌 外部工具和数据集成 |
| 主要用途 | 封装复杂的多步骤任务指令 | 连接第三方服务和数据源 |
| 触发方式 | / 斜杠命令 | @ 提及资源或自动工具调用 |
| 内容类型 | Markdown 文档 + 可选文件 | 可执行代码(服务器程序) |
| 数据访问 | 静态文件和模板 | 实时 API 调用和数据库查询 |
| 配置复杂度 | ⭕ 低(一个 SKILL.md 文件) | 🟡 中到高(需配置服务器和认证) |
| 开发难度 | ⭕ 低(写 Markdown) | 🟡 中到高(需编程或使用现成服务器) |
| 适用场景 | 代码审查、文档生成、测试流程 | 监控集成、项目管理、数据分析 |
| 团队共享 | ✅ 项目 .claude/skills/ | ✅ 项目 .mcp.json |
| 更新频率 | 低(工作流相对稳定) | 高(数据实时更新) |
| Token 开销 | 高(完整内容加载到上下文) | 低(按需调用,结果不经模型) |
使用建议
选择 Skills 当你需要:
- ✅ 标准化代码审查流程
- ✅ 提供项目特定的文档模板
- ✅ 定义复杂的多步骤操作指令
- ✅ 团队共享最佳实践和规范
- ✅ 不需要外部 API 或实时数据
选择 MCP 当你需要:
- ✅ 访问 GitHub/GitLab 仓库和 PR
- ✅ 查询数据库或 API
- ✅ 集成 Sentry/Datadog 监控系统
- ✅ 连接 Notion/Linear 项目管理工具
- ✅ 获取实时数据或执行外部操作
组合使用:
# Skill: 生产环境故障诊断
1. 使用 @sentry 获取最新错误报告
2. 检查 @github:repo://backend 的相关代码
3. 查询 @postgres:logs 表获取详细日志
4. 生成诊断报告并更新 @linear:issue
5. 创建 hotfix 分支并提交修复Skill 提供流程,MCP 提供数据和工具。
🌟 MCP 的四大核心特性
1. 🔌 通用连接标准
问题:
- 每个服务都有自己的 API 格式
- 每个 AI 工具都要单独实现集成
- 维护成本随服务数量指数增长
MCP 解决:
不再是:
Claude → 定制 GitHub 集成
Claude → 定制 Sentry 集成
Claude → 定制 Notion 集成
Claude → ... (每个都要单独写)
而是:
Claude → MCP 协议 ← GitHub MCP Server
← Sentry MCP Server
← Notion MCP Server
← ... (一次实现,处处可用)行业采用:
- ✅ Anthropic (Claude)
- ✅ OpenAI (已采用 MCP)
- ✅ Microsoft
- ✅ Sourcegraph、Zed、Replit、Codeium
- ✅ 1000+ 社区服务器
2. ⚡ 极致的效率优化
Token 减少:98.7%
传统工具调用:
┌─────────────────────────────────────────┐
│ 加载所有工具定义:150,000 tokens │
│ + 中间结果往返:50,000 tokens │
│ = 总计:200,000 tokens │
└─────────────────────────────────────────┘
MCP 方式:
┌─────────────────────────────────────────┐
│ 按需加载工具定义:2,000 tokens │
│ 中间结果本地处理:0 tokens │
│ = 总计:2,000 tokens │
│ ✅ 节省 98.7% │
└─────────────────────────────────────────┘性能提升示例(Vercel 部署监控):
- 工具列表:10,100 tokens → 300-500 tokens(减少 95-97%)
- 会议记录分析:50,000 tokens → 0 tokens(中间结果不经模型)
- 数据库查询:全表加载 → 过滤后结果(10,000 行 → 5 行)
3. 🔍 动态发现与自适应
传统 API:静态硬编码
// 硬编码的工具定义
{
"name": "github_create_issue",
"parameters": {
"title": "string",
"body": "string"
}
}
// 如果 GitHub 添加新参数 "assignee"?
// ❌ 集成失效,需要手动更新代码MCP:动态发现和自描述
// 运行时查询可用工具
→ tools/list
// 服务器返回最新定义
{
"name": "github_create_issue",
"description": "Create a new issue in the repository",
"inputSchema": {
"title": {"type": "string", "description": "Issue title"},
"body": {"type": "string", "description": "Issue body"},
"assignee": {"type": "string", "description": "Assign to user"}
}
}
// ✅ Claude 自动适配新参数,无需代码更新自描述优势:
- 工具描述 = 工具文档(无需单独维护文档)
- 参数变化自动适配
- 新工具自动可用
- 语义化描述帮助 AI 正确使用
4. 🔒 安全与隐私优先
多层安全机制:
1. 传输层安全
Local (Stdio):操作系统进程隔离
Remote (HTTP):TLS 加密 + OAuth 2.1 认证2. 权限控制
# Filesystem 服务器只能访问指定目录
claude mcp add filesystem --scope project /allowed/path/only
# 不允许访问:
# ❌ /etc/passwd
# ❌ /Users/你的个人文件
# ✅ /project/allowed/path3. 用户审批
Claude:"需要调用 GitHub 创建 PR,是否允许?"
你:
[✅ 仅本次允许]
[✅ 始终允许此工具]
[❌ 拒绝]4. 隐私保护
中间结果在执行环境处理,敏感数据不经模型:
获取用户邮箱 → 自动脱敏 → 只有 token 进入模型上下文
原始邮件地址、电话号码永不暴露给 AI5. 企业级管理
// managed-mcp.json(IT 管理员控制)
{
"allowedMcpServers": [
{"serverName": "github"},
{"serverName": "sentry"}
],
"deniedMcpServers": [
{"serverName": "filesystem"} // 阻止文件系统访问
]
}🗺️ 学习路线图
你在这里 → [3.1 本章介绍] ← 当前位置
↓
[3.2 MCP 基础概念和架构]
├─ 协议架构(Client-Server-Host)
├─ 三种传输类型(HTTP/SSE/Stdio)
├─ 配置文件结构
└─ 原语系统(Tools/Resources/Prompts)
↓
[3.3 创建你的第一个 MCP 集成]
├─ 示例 1:远程服务器(GitHub/Notion)
├─ 示例 2:本地服务器(Sequential Thinking)
└─ 示例 3:复杂多服务器设置
↓
[3.4 进阶技巧和最佳实践]
├─ OAuth 认证配置
├─ 环境变量和作用域管理
├─ 调试方法论
├─ 性能优化
└─ 安全加固
↓
[3.5 本章小结]
├─ 核心知识回顾
├─ FAQ 常见问题
└─ 学习路径建议📋 学习前的快速检查
在开始学习 MCP 之前,确保你:
环境准备:
- [ ] 已安装 Claude Code
- [ ] 已完成 Claude Code 基础教程(Module 1)
- [ ] 了解 Skills 基础概念(Module 2)
- [ ] Node.js 版本 ≥ 18.17(运行
node --version检查) - [ ] 熟悉基本的命令行操作
知识储备:
- [ ] 了解什么是 API
- [ ] 知道 JSON 格式
- [ ] 理解客户端-服务器架构
- [ ] (可选)有使用过 GitHub/Notion/Slack 等服务
学习目标:
- [ ] 理解 MCP 的核心概念和设计理念
- [ ] 能够配置和使用远程 MCP 服务器
- [ ] 能够设置本地 MCP 服务器
- [ ] 掌握 MCP 的调试和优化方法
- [ ] 了解 MCP 的安全最佳实践
时间预期:
- 阅读本章:20-25 分钟
- 完成所有章节:3-4 小时
- 动手实践:额外 2-3 小时
🎯 本章核心要点
1. MCP 解决的核心问题
集成复杂度: M×N → M+N(线性复杂度) 上下文效率: 150,000 tokens → 2,000 tokens(98.7% 减少) 工具发现: 硬编码 → 动态发现和自描述 数据流转: 手动复制粘贴 → 自动化集成
2. MCP vs Skills 的区别
| Skills | MCP |
|---|---|
| 工作流和指令 | 工具和数据 |
| 静态内容 | 实时 API |
/ 斜杠命令 | @ 资源引用 |
| 低复杂度 | 中高复杂度 |
3. MCP 的四大特性
- 通用连接标准:USB-C for AI
- 极致效率:98.7% token 减少
- 动态发现:自描述接口
- 安全优先:多层权限控制
4. MCP 生态系统
- 已支持: 1000+ 服务器
- 主流采用: OpenAI、Microsoft、Sourcegraph
- 企业部署: Cognizant 350,000 员工
- 市场规模: 2025 年预计 $10.3B
🚀 下一步
现在你已经了解了 MCP 的核心价值和应用场景。
在 3.2 MCP 基础概念和架构 中,我们将深入:
- MCP 的协议架构(Client-Server-Host)
- 三种传输类型(HTTP、SSE、Stdio)的区别和使用场景
- 配置文件的结构和位置
- 核心原语系统(Tools、Resources、Prompts)
准备好了吗? 让我们开始掌握 MCP 的技术基础!
💡 学习提示: MCP 的概念可能一开始看起来有些复杂,但不用担心。我们会从最简单的远程服务器开始(只需一行命令),然后逐步深入。记住:MCP 是工具,Skills 是流程,两者结合才能发挥最大价值。