Claude Code: MCP(Model Context Protocol)
最后更新:2026-08-31
MCP 让 Claude Code 不再局限于读写本地文件——通过 MCP 服务器,它能连接数据库、操作浏览器、调用 API,能力边界无限扩展。
💡 提示:MCP(Model Context Protocol)是 Anthropic 推出的开放协议,让 AI 模型能安全地连接外部数据源和工具。Claude Code 原生支持 MCP。
📋 前置知识:第十一章 权限配置
1. 你将学到
- MCP 的核心概念与架构
- MCP 服务器配置方法
- 常用 MCP 服务器实战
- 自定义 MCP 服务器
- MCP 安全与权限
2. MCP 核心概念
(1) 架构概览
graph LR
CC[Claude Code] <--> MCP[MCP Client]
MCP <--> S1[Filesystem Server]
MCP <--> S2[Database Server]
MCP <--> S3[GitHub Server]
MCP <--> S4[Browser Server]
MCP <--> S5[Custom Server]
| 概念 | 说明 | 类比 |
|---|---|---|
| MCP Host | 运行 AI 模型的程序 | 浏览器 |
| MCP Client | 与 Server 通信的客户端 | HTTP Client |
| MCP Server | 提供工具和数据的服务 | HTTP Server |
| Tool | Server 暴露的操作 | API Endpoint |
| Resource | Server 暴露的数据 | API Resource |
(2) MCP 能做什么
| 能力 | 无 MCP | 有 MCP |
|---|---|---|
| 读本地文件 | ✅ 内置 | ✅ 内置 |
| 写本地文件 | ✅ 内置 | ✅ 内置 |
| 执行 Shell | ✅ 内置 | ✅ 内置 |
| 查数据库 | ❌ | ✅ PostgreSQL MCP |
| 操作 GitHub | ❌(仅 CLI) | ✅ GitHub MCP |
| 浏览器操作 | ❌ | ✅ Browser MCP |
| 搜网络 | ❌ | ✅ Search MCP |
| 发消息 | ❌ | ✅ Slack/Discord MCP |
▶ 示例 1: MCP 工作流
TEXT
📖 仅展示
# 无 MCP:手动查数据库
> 帮我看看 users 表有多少条记录
Claude Code: 我无法直接访问数据库。你可以运行:
psql -c "SELECT COUNT(*) FROM users"
# 有 MCP(PostgreSQL Server):直接查询
> 帮我看看 users 表有多少条记录
Claude Code: [通过 PostgreSQL MCP 查询]
users 表有 12,450 条记录。
其中活跃用户 8,920(71.6%),
最近 7 天注册 342 人。
3. MCP 服务器配置
(1) 全局配置
JSON
// ~/.claude/mcp_settings.json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-filesystem", "/home/user/projects"],
"env": {}
},
"postgres": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-postgres"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost:5432/mydb"
}
}
}
}
(2) 项目级配置
JSON
// .claude/mcp_settings.json
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-github"],
"env": {
"GITHUB_TOKEN": "ghp_xxxxx"
}
}
}
}
(3) 启动时指定
BASH
# 通过命令行指定 MCP 配置
claude --mcp-config ./custom-mcp.json
4. 常用 MCP 服务器
(1) 官方 MCP 服务器
| 服务器 | 功能 | 安装命令 |
|---|---|---|
| Filesystem | 增强文件操作 | npx -y @anthropic/mcp-filesystem |
| PostgreSQL | 数据库查询 | npx -y @anthropic/mcp-postgres |
| GitHub | GitHub API 操作 | npx -y @anthropic/mcp-github |
| GitLab | GitLab API 操作 | npx -y @anthropic/mcp-gitlab |
| Browser | 浏览器自动化 | npx -y @anthropic/mcp-browser |
| Brave Search | 网络搜索 | npx -y @anthropic/mcp-brave-search |
(2) 社区 MCP 服务器
| 服务器 | 功能 | 来源 |
|---|---|---|
| Slack | 发送/读取消息 | 社区 |
| Notion | 读写 Notion 页面 | 社区 |
| Docker | 管理容器 | 社区 |
| AWS | AWS 服务操作 | 社区 |
| Jira | Issue 管理 | 社区 |
▶ 示例 2: PostgreSQL MCP 实战
JSON
// .claude/mcp_settings.json
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-postgres", "postgresql://localhost/mydb"]
}
}
}
TEXT
📖 仅展示
> 查询最近7天注册的用户数量,按天分组
Claude Code: [使用 PostgreSQL MCP]
→ Executing: SELECT DATE(created_at), COUNT(*) FROM users
WHERE created_at > NOW() - INTERVAL '7 days'
GROUP BY DATE(created_at) ORDER BY 1
结果:
| 日期 | 注册数 |
|:-----------|:-------|
| 2026-08-22 | 45 |
| 2026-08-23 | 52 |
| 2026-08-24 | 38 |
| 2026-08-25 | 61 |
| 2026-08-26 | 49 |
| 2026-08-27 | 55 |
| 2026-08-28 | 42 |
5. 自定义 MCP 服务器
▶ 示例 3: 创建简单的 MCP 服务器
TYPESCRIPT
// custom-mcp-server.ts
import { Server } from "@anthropic/mcp";
const server = new Server({
name: "weather",
version: "1.0.0",
});
server.tool("get_weather", "Get current weather for a city", {
city: { type: "string", description: "City name" },
}, async ({ city }) => {
const response = await fetch(
`https://api.weather.com/current?city=${city}`
);
const data = await response.json();
return {
content: [{
type: "text",
text: `${city}: ${data.temperature}°C, ${data.condition}`
}]
};
});
server.start();
JSON
// .claude/mcp_settings.json
{
"mcpServers": {
"weather": {
"command": "npx",
"args": ["tsx", "./custom-mcp-server.ts"]
}
}
}
6. MCP 安全与权限
(1) MCP 操作权限
| 权限级别 | 说明 | 配置方式 |
|---|---|---|
| 自动允许 | 只读 MCP 工具 | CLAUDE.md 声明 |
| 需确认 | 写入/修改类工具 | 默认行为 |
| 拒绝 | 高风险工具 | CLAUDE.md 禁止 |
(2) 安全最佳实践
| 实践 | 说明 |
|---|---|
| 最小权限 | 只配置必要的 MCP 服务器 |
| 环境变量 | Token/密码用环境变量,不硬编码 |
| 只读优先 | 数据库 MCP 优先配置只读连接 |
| 审计日志 | 记录 MCP 工具调用历史 |
| 网络隔离 | 生产数据库不暴露给 MCP |
7. 综合示例:MCP 集成方案
JSON
// Alice 的项目 MCP 配置
{
"mcpServers": {
"postgres-read": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-postgres"],
"env": {
"DATABASE_URL": "postgresql://readonly:pass@localhost/dev"
}
},
"github": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
},
"browser": {
"command": "npx",
"args": ["-y", "@anthropic/mcp-browser"]
}
}
}
TEXT
📖 仅展示
# Alice 使用 MCP 完成完整工作流
> 查询数据库中活跃用户数,
> 在 GitHub 创建一个对应的 issue,
> 然后打开浏览器验证修复后的页面
Claude Code:
→ [PostgreSQL MCP] 查询活跃用户数:12,450
→ [GitHub MCP] 创建 issue #342: 活跃用户统计优化
→ [Browser MCP] 打开 https://localhost:3000/dashboard
→ 页面截图验证:数据正确显示 ✓
❓ 常见问题
Q MCP 和 API 调用有什么区别?
A MCP 是标准化协议,提供统一的工具发现和调用机制。API 调用需要在代码中硬编码,MCP 让 Claude Code 动态发现和使用工具。
Q MCP 服务器会拖慢 Claude Code 吗?
A 启动时会稍慢(加载 MCP 配置),运行时只有调用 MCP 工具时才消耗时间。不影响不使用 MCP 的常规操作。
Q 如何调试 MCP 连接问题?
A 运行
claude /mcp 查看已连接的 MCP 服务器和工具列表。检查配置文件路径和环境变量。Q MCP 支持哪些传输协议?
A 支持 stdio(本地进程)和 SSE(远程 HTTP)。本地 MCP 用 stdio,远程用 SSE。
Q 社区 MCP 服务器安全吗?
A 不保证。使用前审查源码,优先使用官方服务器。敏感环境只用审核过的 MCP。
Q MCP 能连接生产数据库吗?
A 技术上可以,但强烈不建议。使用只读副本或开发数据库,避免误操作影响生产数据。
📖 小节
- MCP 让 Claude Code 连接外部世界:数据库、GitHub、浏览器等
- 通过
mcp_settings.json配置 MCP 服务器 - 官方提供 Filesystem、PostgreSQL、GitHub、Browser 等服务器
- 可自定义 MCP 服务器扩展能力
- 安全第一:最小权限、只读优先、环境变量管理凭证
📝 作业
- 基础题(难度⭐):配置一个 Filesystem MCP 服务器,验证 Claude Code 能使用增强文件操作。
- 进阶题(难度⭐⭐):配置 PostgreSQL MCP,用 Claude Code 查询数据库并分析结果。
- 挑战题(难度⭐⭐⭐):创建一个自定义 MCP 服务器,提供特定业务功能(如查询内部 API),集成到 Claude Code 中使用。