Claude Code: MCP(Model Context Protocol)

最后更新:2026-08-31

MCP 让 Claude Code 不再局限于读写本地文件——通过 MCP 服务器,它能连接数据库、操作浏览器、调用 API,能力边界无限扩展。

💡 提示:MCP(Model Context Protocol)是 Anthropic 推出的开放协议,让 AI 模型能安全地连接外部数据源和工具。Claude Code 原生支持 MCP。

📋 前置知识:第十一章 权限配置

1. 你将学到


2. MCP 核心概念

(1) 架构概览

100%
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 技术上可以,但强烈不建议。使用只读副本或开发数据库,避免误操作影响生产数据。

📖 小节


📝 作业

  1. 基础题(难度⭐):配置一个 Filesystem MCP 服务器,验证 Claude Code 能使用增强文件操作。
  2. 进阶题(难度⭐⭐):配置 PostgreSQL MCP,用 Claude Code 查询数据库并分析结果。
  3. 挑战题(难度⭐⭐⭐):创建一个自定义 MCP 服务器,提供特定业务功能(如查询内部 API),集成到 Claude Code 中使用。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏