Skip to content

MCP(模型上下文协议)

把 AI 编程助手接入真实的外部系统——数据库、API、内部工具

🎯 什么是 MCP?

MCP(Model Context Protocol,模型上下文协议)是一套开放标准,用来把 AI 助手连接到外部工具和数据源。以往 AI 只能依赖训练数据和你手动展示给它的文件,而通过 MCP server,AI 可以获得实时能力——查询数据库、调用内部 API、搜索文档、读取工单系统里的问题——这些都变成了 AI 在对话中可以直接调用的工具。

可以把 MCP server 理解成插件:每一个都专注于一个系统,并暴露一小组工具/资源供 AI 交互使用。

💡 为什么重要

没有 MCP 的时候,"查一下 staging 环境当前的数据库表结构"或者"看一下 Jira 里这张工单"都需要你手动把数据复制粘贴进对话框。接入了合适的 MCP server 之后,AI 可以直接查询,基于实时、最新的数据进行推理。

📦 配置作用域

和 Claude Code 的其他配置一样,MCP server 也可以在三个层级注册:

作用域文件是否团队共享典型用途
用户级(全局)~/.claude.json(user scope)否——个人专属所有项目都会用到的服务(如你个人的 GitHub 账号、个人笔记工具)
项目级仓库根目录的 .mcp.json,提交到 git这个项目里每个同事都需要的服务(如项目数据库、内部 API 网关)
本地级项目作用域但不提交否——个人覆盖使用个人凭证或本地专属地址的服务
bash
# 在项目作用域添加 MCP server(写入 .mcp.json,通过 git 共享)
claude mcp add --scope project my-db -- npx -y @some/mcp-server-db

# 在用户作用域添加 MCP server(个人专属,任何项目都能用)
claude mcp add --scope user github -- npx -y @modelcontextprotocol/server-github

# 列出已配置的 server
claude mcp list

# 移除某个 server
claude mcp remove my-db

🧩 示例:项目级 .mcp.json

json
{
  "mcpServers": {
    "mysql_prod": {
      "command": "npx",
      "args": ["-y", "@some-org/mysql-mcp-server"],
      "env": {
        "MYSQL_HOST": "${MYSQL_PROD_HOST}",
        "MYSQL_USER": "${MYSQL_PROD_USER}",
        "MYSQL_PASSWORD": "${MYSQL_PROD_PASSWORD}"
      }
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"]
    }
  }
}

⚠️ 绝不提交敏感凭证

凡是会被提交到 git 的 .mcp.json,敏感信息一律用环境变量引用(${MYSQL_PROD_PASSWORD}),不要写死明文。个人专属的凭证应该放在 .env 文件或 shell 配置里,绝不放进被 git 跟踪的配置文件。

🔒 权限与安全

每一次 MCP 工具调用都会走和内置工具一样的权限体系。你可以:

  • 默认要求每次调用都手动确认(新接入的 server 默认如此)
  • settings.json / settings.local.json 里预先放行特定工具,例如把 "mcp__github__create_issue" 加入 allow 列表
  • 在 server 层面就把数据库 MCP server 限制成只读查询——这是最安全的做法,不要只靠"提示词让它小心点"来防止误写

⚠️ 生产环境数据库

如果你把 MCP server 接到生产数据库,尽量在连接字符串层面使用只读数据库账号。不要指望 AI "会小心"——一定要在基础设施层面强制限制。

🚀 真实项目中常见的 MCP server

Server用途
Filesystem读写工作目录沙箱之外的文件
GitHub / GitLab处理 CLI 没有 checkout 的仓库的 issue、PR、代码搜索
数据库(MySQL/Postgres 等)直接查询表结构和数据,不用手动粘贴 SQL 结果
Slack读取/发送消息,用于状态同步或故障协同
Web fetch / 浏览器抓取并阅读文档页面、API 参考
内部 API 网关封装公司内部服务的自定义 MCP server

💡 多环境场景,统一命名模式

对于有 dev/test/UAT/prod 多套数据库的项目,通常会给每个环境分别注册一个 MCP server(比如 mysqlmysql_testmysql_uatmysql_prod),而不是用一个带环境参数的 server——这样在工具调用里就能一眼看出正在操作哪个环境,减少误操作生产库的风险。

🛠️ 自己写一个 MCP server

如果现有的 server 都覆盖不了某个内部系统,你可以自己写一个。大体上,一个 MCP server 需要:

  1. 声明一组工具(AI 可以调用的函数,附带参数的 JSON schema)
  2. 可选地声明资源(AI 可以浏览的只读数据)
  3. 以本地进程(stdio 传输)或远程服务(HTTP/SSE 传输)的形式运行

官方提供了 TypeScript 和 Python 的 SDK,把内部 API 或数据库封装成一个小型 MCP server 并不复杂,团队所有人都能在 .mcp.json 里注册使用。

🎉 效果

配置完成后,你的 AI 助手就能直接查询真实的 staging 数据库、开一个真实的 GitHub issue,或者查看某个内部服务的当前状态——都不需要你先手动抓取数据再粘贴进去。

和谐、友善、互助、开心