跳转至

MCP 服务器

本文你会学到

  • 🔌 MCP 是什么,解决什么问题
  • ⚙️ 如何配置和使用 MCP 服务器
  • 📦 常用的 MCP 服务器推荐
  • 🔒 MCP 配置文件层级和安全注意事项
  • 🔐 OAuth 认证、Sampling 和安全策略

打个比方:Copilot 本身像一台电脑,MCP(Model Context Protocol) 就像是 USB 接口标准——通过它,你可以给 Copilot 接上各种"外设":数据库连接器、浏览器控制、文档查询器等,让它能访问原本接触不到的外部资源。


❓ 什么是 MCP?

MCP 提供了一种标准化的方式,让 AI 模型与外部系统通信:

graph LR
    A["Copilot CLI"] <-->|MCP 协议| B["MCP 服务器"]
    B <--> C["GitHub API"]
    B <--> D["文件系统"]
    B <--> E["数据库"]
    B <--> F["第三方 API"]

    classDef default fill:transparent,stroke:#768390,color:#adbac7,stroke-width:1px

自动调用

添加 MCP 服务器后,Copilot 会在与你的 prompt 相关时自动使用它提供的工具。你也可以在 prompt 中显式提及 MCP 工具名称来确保调用。


🐙 内置 GitHub MCP 服务器

Copilot CLI 内置了 GitHub MCP 服务器,无需额外配置即可使用。它提供对 GitHub 平台的完整访问:

1
2
3
4
5
6
7
8
# 查看仓库的 Issue
> 列出所有标记为 "bug" 的 Issue

# 搜索代码
> 在组织的所有仓库中搜索使用了 deprecated API 的代码

# 查看 PR
> 总结 PR #42 的所有变更

GitHub MCP 提供的能力

  • 读取和搜索 Issue / PR
  • 查看仓库文件和代码
  • 查看 CI/CD 工作流状态
  • 搜索组织范围的代码
  • 查看 commit 历史

➕ 添加 MCP 服务器

方法一:交互式添加(推荐新手使用)

/mcp add

按照交互提示输入服务器名称、命令、参数等信息。适合第一次配置 MCP 的用户。

方法二:直接编辑配置文件

如果你已经熟悉配置格式,直接编辑配置文件更快。

MCP 服务器配置文件位于 ~/.copilot/mcp-config.json(全局)或项目根目录 .mcp.json(项目级):

~/.copilot/mcp-config.json
{
  "mcpServers": {
    "filesystem": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/path/to/allowed/directory"
      ]
    },
    "context7": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"]
    }
  }
}

配置字段说明

字段 必需 说明
type 通信类型:"stdio" / "local" / "http" / "sse"
command ✅* 启动 MCP 服务器的命令(仅 STDIO 类型)
args 命令参数数组(仅 STDIO 类型)
env 环境变量键值对(仅 STDIO 类型)
url ✅* 远程服务器地址(仅 HTTP/SSE 类型)
headers HTTP 请求头(仅 HTTP/SSE 类型)
tools 可用工具列表,默认 "*" 表示全部

* 根据服务器类型,commandurl 二选一必需。

服务器类型详解

MCP 支持三种传输方式,适用场景不同:

通过本地进程的 stdin / stdout 通信,是最常用、兼容性最好的方式。VS Code、Copilot Cloud Agent 和其他 MCP 客户端均支持此类型。

STDIO 配置示例
{
  "mcpServers": {
    "playwright": {
      "type": "stdio",
      "command": "npx",
      "args": ["@playwright/mcp@latest"],
      "env": {
        "API_KEY": "YOUR-API-KEY"
      },
      "tools": ["*"]
    }
  }
}

特点

  • 本地启动子进程,通信通过标准输入输出
  • PATH 环境变量自动继承,其余变量需在 env 中配置
  • type"local""stdio" 均可,效果相同
  • 推荐用于需要访问本地资源的场景(文件系统、数据库、浏览器控制等)

使用 Streamable HTTP 传输,适合远程 MCP 服务器。这是 MCP 规范推荐的新版 HTTP 传输方式。

HTTP 配置示例
{
  "mcpServers": {
    "context7": {
      "type": "http",
      "url": "https://mcp.context7.com/mcp",
      "headers": {
        "CONTEXT7_API_KEY": "YOUR-API-KEY"
      },
      "tools": ["*"]
    }
  }
}

特点

  • 通过 HTTP POST 请求与远程服务器通信
  • 支持自定义请求头传递认证信息
  • 适合托管在云端的 MCP 服务
  • 需要网络连接,延迟受网络状况影响

旧版 HTTP 传输,基于 Server-Sent Events(SSE)。已在 MCP 规范中标记为弃用,但 Copilot CLI 仍支持以兼容现有服务器。

SSE 配置示例
{
  "mcpServers": {
    "legacy-server": {
      "type": "sse",
      "url": "https://example.com/mcp/sse",
      "headers": {},
      "tools": ["*"]
    }
  }
}

特点

  • 使用 Server-Sent Events 建立持久连接
  • 仅建议在旧版服务器无法升级时使用
  • 新项目推荐使用 HTTP(Streamable HTTP)类型

📦 常用 MCP 服务器

Filesystem MCP

提供受控的文件系统访问:

文件系统 MCP 配置
{
  "mcpServers": {
    "filesystem": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/home/user/projects",
        "/home/user/documents"
      ]
    }
  }
}

最后的路径参数指定 MCP 服务器可以访问的目录。

Context7

查询最新的库文档和 API 参考:

Context7 MCP 配置
1
2
3
4
5
6
7
8
9
{
  "mcpServers": {
    "context7": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"]
    }
  }
}
# 使用 Context7 查询最新文档
> 使用 Context7 查询 React 19 的最新 API 变更

Microsoft Learn MCP

访问 Microsoft 技术文档:

Microsoft Learn MCP 配置
1
2
3
4
5
6
7
8
9
{
  "mcpServers": {
    "microsoft-learn": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@nicobailon/mcp-microsoft-learn"]
    }
  }
}

🌐 Web 访问

除了通过 MCP 服务器访问外部资源,Copilot CLI 还内置了 web_fetch 工具,可以直接获取网页内容——不需要安装任何 MCP 服务器就能使用。

1
2
3
4
5
# 获取 API 文档
> @https://api.example.com/docs 根据这个文档生成客户端代码

# 获取 JSON 数据
> @https://jsonplaceholder.typicode.com/users 分析这个 API 的数据结构

🔧 管理 MCP 服务器

除了在交互会话中使用 /mcp 命令,还可以通过 CLI 直接管理 MCP 服务器(1.0.21 新增):

# 在终端中直接管理 MCP(无需进入交互会话)
copilot mcp

1.0.25 起,copilot mcp 新增了**注册表安装向导**——直接在 CLI 中通过 MCP 注册表搜索、选择并引导完成 MCP 服务器配置,无需手动编写 JSON 配置文件。

MCP 管理命令速查

交互会话内可通过 /mcp 命令管理 MCP 服务器:

命令 功能 版本
/mcp show 列出所有已配置的 MCP 服务器及当前状态
/mcp show <name> 查看指定服务器的详情和可用工具列表
/mcp add 交互式添加 MCP 服务器(引导填写名称、类型、命令等)
/mcp edit <name> 编辑已有服务器的配置
/mcp delete <name> 删除服务器(配置和 OAuth 状态一并清除)
/mcp disable <name> 禁用服务器(跨会话持久化) 1.0.19
/mcp enable <name> 重新启用已禁用的服务器 1.0.19
/mcp reload 重新加载所有 MCP 服务器配置
/mcp auth <name> 重新认证 MCP 服务器的 OAuth 凭据 1.0.15

禁用 vs 删除

/mcp disable 保留配置但暂停使用,适合临时调试;/mcp delete 彻底移除服务器。禁用状态跨会话持久化(1.0.19),无需每次重新配置。

/mcp disable/mcp enable 的状态跨会话持久化(1.0.19 新增),关闭终端后再次启动 Copilot CLI 时,之前禁用的服务器仍然保持禁用状态,无需每次重新配置。

MCP 工具调用在时间线中会显示工具名称和参数摘要(1.0.16 新增),方便追踪 MCP 服务器的调用情况。

MCP 服务器名称现在支持空格和特殊字符(1.0.35 改进),配置时不再受限于简单的 ASCII 标识符。


📂 配置文件层级

MCP 配置支持项目级和全局级两个层级:

层级 路径 适用范围 提交到 Git
项目级 .mcp.json(仓库根目录) 仅当前项目 ✅ 推荐
全局级 ~/.copilot/mcp-config.json 所有项目

1.0.22 配置源精简

1.0.22 起,CLI 只读取 .mcp.json 作为项目级 MCP 配置源。之前支持的 .vscode/mcp.json.devcontainer/devcontainer.json 已移除。如果 CLI 检测到 .vscode/mcp.json 但没有 .mcp.json,会显示迁移提示。

项目级配置优先于全局配置。团队共享的 MCP 服务器建议放在项目级配置中并提交到 Git。

安全注意

env 字段中的 API Key 等敏感信息不应提交到 Git。对于需要密钥的 MCP 服务器,建议:

  • 在全局配置中设置(不提交到 Git)
  • 或使用环境变量引用(如 "API_KEY": "$MY_API_KEY"

Workspace 信任机制

工作区级配置的 MCP 服务器不会自动加载,用户首次打开项目时需要确认信任该文件夹(1.0.10 改进)。这是防止恶意仓库通过项目级配置注入不安全 MCP 服务器的安全机制。

注册表 Allowlist

通过 MCP_ALLOWLIST 环境变量可以指定可信的 MCP 注册表地址列表(1.0.8 新增)。只有来源匹配 Allowlist 的 MCP 服务器才会被加载,防止不可信来源的服务器被注入:

# 仅允许来自 GitHub 官方注册表和内部注册表的 MCP 服务器
export MCP_ALLOWLIST="https://github.com/mcp,https://internal-registry.company.com"

🔐 MCP OAuth 认证

某些 MCP 服务器需要 OAuth 认证才能访问(如 Slack、Atlassian Rovo 等)。Copilot CLI 提供了完整的 OAuth 支持。

浏览器回调流程(默认)

在支持 HTTPS 的环境中自动打开浏览器完成认证。这是最常见的认证方式,适合日常开发使用。

1.0.17 新增自签名证书回退,兼容使用 HTTPS 但部署自签名证书的 OAuth 提供商。

设备码流程

Device Code Flow(RFC 8628)专为无头环境设计(1.0.15 新增)。当 CLI 检测到无法打开浏览器时(如 SSH 远程终端、CI 服务器),自动回退到此流程:

1
2
3
4
# CLI 输出示例
To authenticate, visit: https://oauth.example.com/device/auth?code=XXXX-XXXX
Enter the verification code: XXXX-XXXX
Waiting for authorization...

用户在任意设备上打开链接并输入验证码即可完成认证。

client_credentials 流程

client_credentials OAuth 授权类型直接使用客户端凭据完成认证,无需任何浏览器交互(1.0.40 新增)。适合纯服务器环境(CI/CD、无头服务器等):

client_credentials 配置示例
{
  "mcpServers": {
    "ci-server": {
      "type": "http",
      "url": "https://mcp.example.com",
      "headers": {
        "Authorization": "Bearer ${OAUTH_CLIENT_TOKEN}"
      }
    }
  }
}

带外交互(Out-of-Band)

MCP 服务器可请求用户访问 URL 进行交互式认证,如 OAuth 授权、API Key 输入等(0.0.423 新增)。这种方式让 MCP 服务器自身定义认证流程,灵活性最高。

重新认证

使用 /mcp auth <name> 命令可重新认证或切换账号(1.0.15 新增):

# 重新认证 MCP 服务器
/mcp auth slack-mcp

MCP OAuth 在 1.0.35 迁移到共享运行时流程,移除 MCP 服务器时同时清除关联的 OAuth 状态,避免残留的认证数据干扰后续操作。

OAuth Token 缓存

当多个 MCP 服务器共享相同 URL 但使用不同静态 OAuth 客户端 ID 时,OAuth 令牌现在能正确缓存(1.0.40 修复),避免了之前因缓存冲突导致认证失败的问题。


🧠 MCP Sampling

MCP 服务器可以请求 LLM 推理能力(sampling),让服务器端逻辑借助 AI 做出更智能的决策(1.0.13 新增)。

Sampling 的工作流程:MCP 服务器向 Copilot 发送 sampling 请求 → Copilot 弹出审查提示,展示请求内容 → 用户批准后,LLM 生成响应并返回给服务器。出于安全考虑,每次 sampling 请求都需要用户明确批准,不支持自动放行。


🛡️ MCP 安全策略

  • Allowlist 验证:通过 MCP_ALLOWLIST 环境变量指定可信注册表地址列表,只有来源匹配的 MCP 服务器才会被加载——防止不可信来源的服务器被注入(1.0.8 新增)
  • 组织级策略:组织管理员可统一配置第三方 MCP 服务器策略,对所有成员强制执行,个人配置无法覆盖(1.0.11 改进)
  • Workspace 信任:Workspace 级别配置的 MCP 服务器不会自动加载,需要用户在首次打开项目时确认信任该文件夹(1.0.10 改进)

🔌 ACP 客户端扩展

如果你通过 ACP(Agent Client Protocol)客户端(如 VS Code 中的 Copilot)使用 CLI 的能力,以下功能值得关注:

  • 权限模式切换(1.0.39 新增):ACP 客户端可通过会话配置切换 allow-all 权限模式,免去逐条审批工具调用的麻烦,适合在可信环境中使用。
  • 斜杠命令扩展(1.0.39 新增):ACP 会话现在支持 /compact/context/usage/env 等斜杠命令,让通过 ACP 客户端使用 CLI 时拥有与终端一致的操作体验。
  • 模型配置增强(1.0.37 改进):ACP 模型配置选项新增 descriptionmetadata 字段,供使用 configOptions API 的客户端更精细地描述和展示可用模型。