1. 引言

在这里插入图片描述
在前面的博客,博主已经讲解了 Claude Code 相关的概念,有兴趣的同学可以参考下:

前几篇我们解决的更多是 “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 主要用于扩展两类能力:

  1. :把外部数据源作为上下文(比如查数据库、读 PR、读告警)
  2. :对外部系统执行动作(比如创建 Issue、发消息、更新工单)

2.2 Tools / Resources / Prompts

MCP 的核心概念通常按这三类理解:

概念 可以理解为 示例
Tools 可调用的 “动作” github.create_issuedb.querysentry.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):

输出契约固定为:

  1. Incident Summary(现象与影响面)
  2. Evidence(Sentry 错误、关键日志、相关 PR)
  3. Hypothesis(最可能原因)
  4. Actions(创建 Issue/PR/通知)
  5. 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,建议按“风险从低到高”开放:

  1. 只读型 MCP:读 PR、读告警、读数据库查询(先跑通证据链)
  2. 低风险写入:发通知、写评论(可逆、影响小)
  3. 高风险写入:合并 PR、改配置、删资源(必须人工确认 + 审计)

同时建议配合第四篇的 Hooks:

  • PreToolUse(Bash) 拦截危险命令
  • Stop 门禁失败时给出明确反馈(必要时通知团队)

④ 企业策略(Managed Settings)

企业场景里,常见做法是把 MCP server 的范围/白名单锁到托管配置里,例如:

  • 只允许连接批准的 MCP 域名
  • 强制开启审计日志
  • 锁定 mcpServers 不允许用户修改

4.6 主流 MCP 资源导航

如果想找“主流 MCP Server/SDK/生态工具”,建议优先从官方入口开始(最权威、更新也最快):

建议:不同 MCP Server 的鉴权、能力范围、写操作风险差异很大,团队落地时建议先接只读能力,再逐步放开写入,并配合审计与门禁。

5. 文末

通过阅读本文,相信大家已经系统理解了 Claude Code 中 MCP(Model Context Protocol) 的设计理念与工程价值:它并不是“让 AI 自动替你操作系统”的黑盒能力,而是一套 以标准协议为边界、以权限与审计为前提的外部能力接入机制

MCP 的核心意义在于把真实世界的系统能力(代码仓库、数据库、监控平台、内部 API)安全、可控地引入到 Claude 的上下文与行动空间中。通过 MCP,Claude 不再只停留在 “分析与建议”,而是能够 读取真实数据、执行明确动作、回写处理结果,让 AI 参与到完整的工程闭环中。

希望本文能帮助大家正确理解并安全落地 MCP,也欢迎在评论区分享MCP实践经验。感谢阅读,本文完!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐