Claude Code 完整指南(七):MCP(让 AI 连接外部真实系统)
文章目录
1. 引言

在前面的博客,博主已经讲解了 Claude Code 相关的概念,有兴趣的同学可以参考下:
- 《Claude Code 完整指南(一):安装、CLI 实战、IDE 集成一次讲透》
- 《Claude Code 完整指南(二):终端命令全解析(收藏级)》
- 《Claude Code 完整指南(三):命令背后的数据流动》
- 《Claude Code 完整指南(四):Hooks(自动化事件触发)》
- 《Claude Code 完整指南(五):Subagents(AI 角色工程化)》
- 《Claude Code 完整指南(六):Skills(可复用的标准操作流程)》
前几篇我们解决的更多是 “Claude Code 如何在本地更好地工作”:
- 用 Hooks 做门禁与自动化
- 用 Subagents 做角色分工与并行
- 用 Skills 把 SOP 固化成可复用模板
但这些能力的边界仍然主要在“本地文件/命令”。
MCP 的意义在于:让 Claude 能用标准协议连接到外部系统 —— GitHub、数据库、监控平台、内部 API、知识库……
从这一刻开始,Claude 才真正具备 “像工程师一样操作系统” 的能力:查数据、找异常、开工单、回写状态、联动流程。
2. MCP 是什么?
2.1 概念
MCP(Model Context Protocol) 是一个标准化协议,用于让 Claude 连接外部服务。你可以把它理解成:
- 外部服务提供一个 MCP Server
- MCP Server 暴露 Tools / Resources / Prompts
- Claude Code 通过 MCP 把这些能力当成“可调用工具”使用
在 Claude Code 里,MCP 主要用于扩展两类能力:
- 读:把外部数据源作为上下文(比如查数据库、读 PR、读告警)
- 写:对外部系统执行动作(比如创建 Issue、发消息、更新工单)
2.2 Tools / Resources / Prompts
MCP 的核心概念通常按这三类理解:
| 概念 | 可以理解为 | 示例 |
|---|---|---|
| Tools | 可调用的 “动作” | github.create_issue、db.query、sentry.list_errors |
| Resources | 可读取的 “数据源” | PR 列表、某条告警详情、某张表的数据 |
| Prompts | 预定义的 “提示模板” | 固定的“事故复盘模板”“发布检查模板” |
注意:MCP 并不是“自动帮你做事”,而是提供一个规范接口,让 Claude 能安全、可控地访问外部能力。
2.3 传输方式
Claude Code 里常见的 MCP 传输方式主要有两种:
2.3.1 HTTP(推荐)
- 适合:GitHub、Sentry、Slack、内部平台(有服务端、可复用)
- 优点:部署在统一环境、便于权限与审计、多人共享
- 典型配置字段:
transport: "http"+url
2.3.2 stdio(本地进程)
- 适合:本地快速试验、数据库连接、本地脚本封装成 MCP
- 优点:启动简单、无需单独部署服务
- 风险:凭证/环境变量/本地网络访问更分散;团队复用成本更高
- 典型配置字段:
transport: "stdio"+command+args+env
选型建议(团队落地版):
- 团队要长期用、要审计、要统一权限:优先 HTTP
- 个人本地工具、短期实验:用 stdio
3. MCP 配置
Claude Code 常见的 MCP 配置入口有种。
① 全局配置(用户级):
- 位置:
~/.claude.json - 字段:
mcpServers - 适合:你个人跨项目复用的 MCP(比如 GitHub、个人数据库等)
示例(节选):
{
"mcpServers": {
"user": {
"github": {
"transport": "http",
"url": "https://github-mcp.example.com"
},
"database": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"]
}
},
"local": {}
}
}
② 项目配置(项目级):
- 位置:
{project}/.mcp.json - 字段:
mcpServers - 适合:团队共享、与项目强绑定的 MCP(内部 API、项目专用服务)
示例(节选):
{
"mcpServers": {
"github": {
"transport": "http",
"url": "https://github-mcp.example.com"
}
}
}
团队最佳实践:项目级
.mcp.json可提交 Git;个人密钥用环境变量,不要写死在配置里。
4. MCP 用法
4.1 安装/添加 MCP Server
# HTTP 服务器
claude mcp add --transport http github https://api.github.com/mcp
# stdio 服务器(本地进程)
claude mcp add --transport stdio weather -- npx @modelcontextprotocol/server-weather
带环境变量示例(stdio):
claude mcp add --transport stdio database \
--env DB_HOST=localhost \
--env DB_PORT=5432 \
--env DB_USER=admin \
-- node ./mcp-servers/database.js
项目级安装示例:
claude mcp add --scope project slack-bot https://slack.company.com/mcp
4.2 管理命令
claude mcp list
claude mcp get weather
claude mcp remove weather
你可以在会话里查看 MCP 状态、并对需要认证的服务器完成 OAuth 流程(如果该 server 配置了 OAuth),命令如下:
/mcp
4.3 案例模板
推荐的项目目录布局(MCP + Claude 配置):
your-project/
├── .claude/
│ ├── settings.json
│ ├── settings.local.json # 个人环境变量(不提交)
│ ├── agents/
│ ├── skills/
│ ├── hooks/
│ └── commands/
├── .mcp.json # MCP 服务器配置(可提交)
└── CLAUDE.md
{project}/.mcp.json:
{
"mcpServers": {
"github": {
"transport": "http",
"url": "https://github-mcp.example.com",
"auth": {
"type": "oauth2",
"clientId": "${GITHUB_CLIENT_ID}",
"clientSecret": "${GITHUB_CLIENT_SECRET}"
}
},
"database": {
"transport": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": {
"DATABASE_URL": "${DATABASE_URL}"
}
},
"sentry": {
"transport": "http",
"url": "https://sentry-mcp.example.com/api",
"headers": {
"Authorization": "Bearer ${SENTRY_TOKEN}"
}
}
}
}
建议:
.mcp.json里只写“连接方式”,凭证一律从环境变量注入- 如果你用
settings.local.json管理环境变量,别把它提交到 Git
4.4 Hooks / Subagents / Skills 使用 MCP
MCP 单独用当然可以,如果结合Claude,可以实现“系统化编排”,下面讲解几个场景。
4.4.1 MCP + Subagent
这种方式可以理解为:专职工种操作外部系统
例子:你可以定义一个只负责“处理告警”的子代理(只开放必要工具 + MCP)。
- 子代理负责:查 Sentry、定位错误、创建 Issue、回填链接
- 主对话负责:确认策略、决定是否上线修复、做最终把关
4.4.2 MCP + Skills
这种方式可以理解为:把外部操作变成 SOP
例子:做一个 incident-triage Skill(事故分诊 SOP):
输出契约固定为:
- Incident Summary(现象与影响面)
- Evidence(Sentry 错误、关键日志、相关 PR)
- Hypothesis(最可能原因)
- Actions(创建 Issue/PR/通知)
- Rollback & Mitigation(缓解与回滚)
有了 MCP 之后,Skill 不再只是“写文字”,而是能拉取证据、完成动作。
4.4.3 MCP + Hook
这种方式可以理解为:把通知与门禁接到团队系统
可以用 Notification Hook 做系统通知:
- 让 Hook 把关键事件转发到 Slack(通过 Slack MCP server)
- 在
Stop门禁失败时自动发一条“测试没过/风险提示”到团队
注意:Hook 执行外部动作一定要谨慎,建议默认
blocking=false,并加入明确的白名单/开关。
4.5 安全性问题
MCP 的能力越强,越要把 “安全边界” 先立起来,建议如下:
① 凭证管理:只用环境变量,不写死:
.mcp.json / ~/.claude.json 里不要直接写 Token,推荐:
- OAuth:走
/mcp完成授权 - Header/Token:用
${ENV:...}或${VAR}形式引用(具体以你们配置规范为准)
② 最小权限原则:能只读就只读
- 只做查询:尽量只开放读取型工具
- 必须写入:让操作变成显式动作(最好让主对话确认)
③ 建议的权限落地顺序(先收住“写操作”)
如果第一次接 MCP,建议按“风险从低到高”开放:
- 只读型 MCP:读 PR、读告警、读数据库查询(先跑通证据链)
- 低风险写入:发通知、写评论(可逆、影响小)
- 高风险写入:合并 PR、改配置、删资源(必须人工确认 + 审计)
同时建议配合第四篇的 Hooks:
PreToolUse(Bash)拦截危险命令Stop门禁失败时给出明确反馈(必要时通知团队)
④ 企业策略(Managed Settings)
企业场景里,常见做法是把 MCP server 的范围/白名单锁到托管配置里,例如:
- 只允许连接批准的 MCP 域名
- 强制开启审计日志
- 锁定
mcpServers不允许用户修改
4.6 主流 MCP 资源导航
如果想找“主流 MCP Server/SDK/生态工具”,建议优先从官方入口开始(最权威、更新也最快):
- MCP 官方站点(协议与生态入口):https://modelcontextprotocol.io
- MCP 开源组织(代码与生态聚合):https://github.com/modelcontextprotocol
- 官方/社区 MCP Servers 汇总仓库(按需挑选接入):https://github.com/modelcontextprotocol/servers
- Claude Code 的 MCP 文档(Claude 侧接入方式):https://code.claude.com/docs/en/mcp
建议:不同 MCP Server 的鉴权、能力范围、写操作风险差异很大,团队落地时建议先接只读能力,再逐步放开写入,并配合审计与门禁。
5. 文末
通过阅读本文,相信大家已经系统理解了 Claude Code 中 MCP(Model Context Protocol) 的设计理念与工程价值:它并不是“让 AI 自动替你操作系统”的黑盒能力,而是一套 以标准协议为边界、以权限与审计为前提的外部能力接入机制。
MCP 的核心意义在于:把真实世界的系统能力(代码仓库、数据库、监控平台、内部 API)安全、可控地引入到 Claude 的上下文与行动空间中。通过 MCP,Claude 不再只停留在 “分析与建议”,而是能够 读取真实数据、执行明确动作、回写处理结果,让 AI 参与到完整的工程闭环中。
希望本文能帮助大家正确理解并安全落地 MCP,也欢迎在评论区分享MCP实践经验。感谢阅读,本文完!
更多推荐
所有评论(0)