第 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-githubtext
> 帮我在 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 数据库?
🛠️ 动手实践
- 用
claude mcp add添加 filesystem server,让它读取你桌面上的一个文本文件。 - 配置 GitHub MCP server(需要一个 personal access token),然后让 Claude 列出某个仓库的 open issues。
- 尝试配置一个不存在的 MCP server,观察
/mcp的错误提示,然后修复它。
完成练习后,进入下一章:Skills 技能系统。