Skip to content

第 10 章 · MCP 集成与外部工具

本章目标:掌握 Claude Code 的 MCP(Model Context Protocol)集成,学会配置 stdio/SSE 传输的 MCP server,使用常用工具扩展 Claude 的能力边界。

10.1 MCP 在 Claude Code 中的角色

MCP 让 Claude Code 突破内置工具(文件读写、Bash)的限制,连接任意外部服务:

text
┌─────────────────┐     MCP 协议      ┌──────────────────┐
│   Claude Code    │ ◄──────────────► │   MCP Server      │
│                  │                   │                  │
│  内置工具:        │    stdio/SSE     │  filesystem      │
│   Read/Write     │    JSON-RPC      │  github          │
│   Bash/Grep      │ ◄──────────────► │  postgres        │
│                  │                   │  slack           │
│  MCP 工具:       │                   │  puppeteer       │
│   mcp__fs__read  │                   │  ...自定义        │
└─────────────────┘                   └──────────────────┘

每个 MCP server 暴露一组工具(tools),Claude 根据任务需要自动选择调用。工具名格式为 mcp__<server>__<tool>

10.2 配置 MCP Server

命令行添加

bash
# 基本语法
claude mcp add <name> <command> [args...]

# 添加 filesystem server — 让 Claude 安全地访问指定目录
claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem /path/to/dir

# 添加 GitHub server
claude mcp add github -- npx -y @modelcontextprotocol/server-github

# 添加 SSE 远程 server
claude mcp add my-api --transport sse https://my-server.com/mcp

# 查看已配置的 servers
claude mcp list

# 删除
claude mcp remove filesystem

配置文件方式

json
// .claude/settings.json 或 ~/.claude/settings.json
{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/projects"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "ghp_xxx"
      }
    }
  }
}

作用域

作用域标志生效范围
项目默认仅当前目录
用户--scope user所有项目
全局--scope global跨项目共享

10.3 传输协议详解

stdio(标准输入输出)

最常用的本地传输方式:

text
Claude Code ──stdin──►  MCP Server 进程
            ◄─stdout──
  • Server 以子进程启动;
  • 通过 stdin/stdout 交换 JSON-RPC 消息;
  • 适合本地脚本和 npm 包形式的 server。

SSE(Server-Sent Events)

用于远程 HTTP 服务:

bash
claude mcp add remote-tools --transport sse https://mcp.example.com/sse \
  --header "Authorization: Bearer token123"
  • Claude Code 作为 SSE 客户端连接远程端点;
  • 适合团队共享的集中式 MCP 服务。

10.4 常用 MCP Server 实战

filesystem — 文件系统访问

bash
claude mcp add fs -- npx -y @modelcontextprotocol/server-filesystem ~/docs ~/notes

添加后 Claude 可以:

  • mcp__fs__read_file — 读取指定目录中的文件
  • mcp__fs__write_file — 创建或修改文件
  • mcp__fs__list_directory — 列出目录内容
  • mcp__fs__search_files — 搜索文件

github — GitHub API 操作

bash
export GITHUB_TOKEN="ghp_your_token"
claude mcp add gh -- npx -y @modelcontextprotocol/server-github
text
> 帮我在 anthropics/claude-code 仓库创建一个 issue,
  标题是"MCP integration guide",描述写"需要补充 MCP 配置文档"

Claude 会调用 mcp__gh__create_issue 工具完成操作。

postgres — 数据库查询

bash
claude mcp add db -- npx -y @modelcontextprotocol/server-postgres \
  "postgresql://user:pass@localhost:5432/mydb"
text
> 查询最近 7 天注册的用户数量并按天分组

Claude 会通过 mcp__db__query 执行 SQL 并返回结果。

10.5 工具发现与权限控制

查看可用工具

bash
# 列出当前所有可用的 MCP 工具
> /mcp

# 输出:
# ┌────────────────────────────────────────────┐
# │ MCP Servers                                │
# ├────────────────────────────────────────────┤
# │ ✅ filesystem (4 tools)                    │
# │ ✅ github (12 tools)                       │
# │ ❌ postgres — connection refused           │
# └────────────────────────────────────────────┘

权限控制

MCP 工具默认需要用户确认,可以在 settings.json 中预授权:

json
{
  "permissions": {
    "allow": [
      "mcp__filesystem__read_file",
      "mcp__filesystem__list_directory",
      "mcp__github__get_issue"
    ],
    "deny": [
      "mcp__github__delete_repository"
    ]
  }
}

最小权限原则

只 allow 你信任的工具。特别是 delete_*write_* 类工具——一个错误的 MCP server 可能导致数据丢失。

本章小结

  • MCP 通过 claude mcp add 配置,支持 stdio(本地)和 SSE(远程)传输;
  • 常用 server:filesystem(文件)、github(代码托管)、postgres(数据库);
  • 工具命名格式 mcp__<server>__<tool>,用 /mcp 查看状态;
  • 在 settings.json 的 allow/deny 中精细控制 MCP 工具权限;
  • 遵循最小权限原则——只开放必要的工具。

🧪 随堂测验

点击你认为正确的选项。答错时会展示正确答案与原因解析。

1. MCP 工具在 Claude Code 中的命名格式是什么?

2. stdio 和 SSE 传输的主要区别是什么?

3. 如何让 Claude 自动执行某个 MCP 工具而不每次都询问?

4. 以下哪个 MCP server 可以让 Claude 直接查询 PostgreSQL 数据库?

🛠️ 动手实践

  1. claude mcp add 添加 filesystem server,让它读取你桌面上的一个文本文件。
  2. 配置 GitHub MCP server(需要一个 personal access token),然后让 Claude 列出某个仓库的 open issues。
  3. 尝试配置一个不存在的 MCP server,观察 /mcp 的错误提示,然后修复它。

完成练习后,进入下一章:Skills 技能系统