Gemini CLI 通过 MCP(Model Context Protocol)连接外部服务,让 AI 能直接操作 GitHub、数据库、Slack 等工具。本文以 GitHub MCP Server 为例,演示从凭据准备到自然语言使用的完整流程,适合第一次接入 MCP 的用户。

接入 MCP 服务器(GitHub 示例)

通过 MCP,Gemini CLI 可以连接外部服务(GitHub、数据库、Slack、Google Drive 等),让 AI 直接调用你的业务工具,而不只是读写本地文件。

前置条件

  • Gemini CLI 已安装并认证
  • Docker:本示例 GitHub MCP Server 以 Docker 容器形式运行
  • GitHub Personal Access Token(PAT):细粒度令牌

第一步:准备认证凭据

  1. 在 GitHub 创建细粒度 PAT
  2. 赋予以下权限:
    • Metadata:读取
    • Contents:读取
    • Issues:读取/写入
    • Pull Requests:读取/写入
  3. 将 Token 设置为环境变量:

macOS/Linux

export GITHUB_PERSONAL_ACCESS_TOKEN="github_pat_..."

Windows(PowerShell)

$env:GITHUB_PERSONAL_ACCESS_TOKEN="github_pat_..."

建议写入 ~/.bashrc~/.zshrc,避免每次开新终端都要重新 export。


第二步:配置 settings.json

打开 ~/.gemini/settings.json(全局配置)或项目下的 .gemini/settings.json,添加 mcpServers 块:

{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server:latest"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
      }
    }
  }
}

${GITHUB_PERSONAL_ACCESS_TOKEN} 是变量引用,Gemini CLI 启动时从当前环境变量展开。Token 不会明文写入配置文件。

字段说明

字段 说明
command 启动 MCP 服务器的可执行文件
args 传给命令的参数数组
env 注入到服务器进程的环境变量

第三步:验证连接

重启 Gemini CLI(保存 settings.json 后 CLI 会自动尝试启动已配置的服务器)。

输入:

/mcp list

正常输出:

✓ github: docker run ... - Connected

如果显示 Disconnected 或错误:

  • 确认 Docker Desktop 已启动并运行
  • 手动执行 docker run -i --rm ghcr.io/github/github-mcp-server:latest 查看容器本身是否报错
  • 检查 PAT 是否正确且未过期

如需强制重载服务器工具列表,使用:

/mcp reload

第四步:用自然语言使用工具

服务器连接成功后,Agent 自动获得新的工具能力,无需学习特殊命令,直接用自然语言即可。

示例 1:列出 Pull Request

列出 google/gemini-cli 仓库中当前打开的 PR。

Agent 会:

  1. 识别请求匹配 GitHub 工具
  2. 调用 mcp_github_list_pull_requests
  3. 将结果整理后展示给你

示例 2:创建 Issue

在我的 repo 中创建一个标题为 "Bug: 登录失败" 的 Issue,描述为 "详见日志"。

Agent 会调用 mcp_github_create_issue 并将链接返回给你。


扩展:其他 MCP 服务器

接入方式与 GitHub 完全一致,只需替换 command/args 和认证环境变量。

常用服务器推荐:

服务 镜像/命令
Postgres npx -y @modelcontextprotocol/server-postgres postgresql://...
Slack docker run -e SLACK_BOT_TOKEN ghcr.io/modelcontextprotocol/server-slack
Google Drive 见官方文档

完整服务器列表:modelcontextprotocol/servers

MCP 服务器高级配置(SSE 远程传输、HTTP 模式、超时等)参见 MCP 服务器接入参考

常见问题

Q: settings.json 中 env 里引用环境变量没有展开,值变成了字面字符串怎么办?

A: 确认格式为 "${VAR_NAME}"(美元符号加花括号),且当前 Shell 中确实已 export 该变量。在 Windows PowerShell 里,$env:VAR_NAME 的值需要先 export 为进程级环境变量,重启终端后生效。

Q: 同一项目里能同时接多个 MCP 服务器吗?

A: 可以,在 mcpServers 对象中添加多个键即可。每个键对应一个独立的服务器进程,工具名自动以 mcp_<server_name>_ 为前缀区分。

Q: 如何知道某个 MCP 服务器提供了哪些工具?

A: 运行 /mcp list 后,可以再运行 /mcp info <server-name> 查看该服务器暴露的所有工具及其说明。