Skip to main content

使用模型上下文协议 (MCP) 扩展 Copilot 编码助手

了解如何使用模型上下文协议 (MCP) 扩展 Copilot 编码智能体 的功能。

注意

Copilot 编码智能体 为 公共预览版,可能会变动。 在预览期间,该功能的使用须遵循“GitHub 预发行许可条款”。

先决条件

在为 Copilot 编码智能体 设置 MCP 服务器之前,请阅读“模型上下文协议 (MCP) 与 Copilot 编码智能体”,以确保你理解 MCP 服务器和 Copilot 编码智能体 的相关概念。

简介

作为存储库管理员,可以将 MCP 服务器配置为在存储库中使用。 使用 JSON 格式的配置完成此操作,该配置指定要使用的 MCP 服务器的详细信息。 直接在 GitHub.com 上的存储库的设置中输入 JSON 配置。

警告

配置 MCP 服务器后,Copilot 将能够自主使用服务器提供的工具且在使用之前不请求批准。

将 MCP 配置添加到存储库

存储库管理员可以按照以下步骤配置 MCP 服务器:

  1. 在 GitHub 上,导航到存储库的主页面。

  2. 在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。

    存储库标头的屏幕截图,其中显示了选项卡。 “设置”选项卡以深橙色边框突出显示。

  3. 在边栏的“Code & automation”部分,单击“Copilot”,然后单击“Coding agent”********。

  4. **** 在“MCP configuration”部分中添加配置。

    本文中的以下各节解释如何编写需要在此处输入的 JSON 配置。

  5. 单击“ 保存”。

    系统将验证配置以确保其语法正确。

  6. 如果 MCP 服务器需要密钥或机密,请将机密添加到 Copilot 环境。 仅当机密名称带有前缀 COPILOT_MCP_ 才可用于 MCP 配置。 请参阅为 Copilot 编码智能体 设置 Copilot 环境

编写 MCP 服务器的 JSON 配置

使用专用 JSON 格式配置 MCP 服务器。 JSON 必须包含一个 mcpServers 对象,其中键是 MCP 服务器的名称(例如 sentry),值是具有该 MCP 服务器的配置的对象。

JSON
{
  "mcpServers": {
    "MCP SERVER 1": {
      "command": "VALUE",
      "args": [ VALUES ],
      ...
    },
    "MCP SERVER 2": {
      "command": "VALUE",
      "args": [ VALUES ],
      ...
    },
    ...
  }
}

配置对象可包含以下键:

本地和远程 MCP 服务器的必需密钥****

  • tools (string[]):要启用的 MCP 服务器中的工具。 有可能在服务器的文档或代码中找到工具列表。 我们强烈建议你将特定的只读工具列入允许列表,因为代理将能够自主使用这些工具,且不会事先征求你的批准。 你还可通过在数组中包含 * 来启用所有工具。
  • type (string):Copilot 编码智能体 接受 "local""http""sse"

本地 MCP 特定密钥****

  • command (string):必需。 启动 MCP 服务器时要运行的命令。
  • args (string[]):必需。 要传递给 command 的参数。
  • env (object):可选。 要传递给服务器的环境变量。 此对象须将应向 MCP 服务器公开的环境变量的名称映射到以下任一项:
    • 已配置的 GitHub Actions 机密的名称,以 COPILOT_MCP_ 开头。
    • 字符串值。

远程 MCP 特定密钥****

  • url (string):必需。 MCP 服务器的 URL。
  • headers (object):可选。 要附加到对服务器的请求的标头。 此对象应将标头密钥的名称映射到以下任一项:
    • 已配置的 GitHub Actions 机密的名称,以 COPILOT_MCP_ 开头,前面有一个 $
    • 一个字符串值

示例配置

示例:Sentry

Sentry MCP 服务器为 Copilot 提供经身份验证的访问权限,从而能够访问 Sentry 中记录的异常。

JavaScript
// If you copy and paste this example, you will need to remove the comments prefixed with `//`, which are not valid JSON.
{
  "mcpServers": {
    "sentry": {
      "type": "local",
      "command": "npx",
      // We can use the $SENTRY_HOST environment variable which is passed to
      // the server because of the `env` value below.
      "args": ["@sentry/mcp-server@latest", "--host=$SENTRY_HOST"],
      "tools": ["get_issue_details", "get_issue_summary"],
      "env": {
        // We can specify an environment variable value as a string...
        "SENTRY_HOST": "https://contoso.sentry.io",
        // or refer to a GitHub Actions secret with a name starting with
        // `COPILOT_MCP_`
        "SENTRY_ACCESS_TOKEN": "COPILOT_MCP_SENTRY_ACCESS_TOKEN"
      }
    }
  }
}

示例:Notion

Notion MCP 服务器向 Copilot 经身份验证的访问权限,从而能够访问来自 Notion 的笔记和其他内容。

JavaScript
// If you copy and paste this example, you will need to remove the comments prefixed with `//`, which are not valid JSON.
{
  "mcpServers": {
    "notionApi": {
      "type": "local",
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        // We can use the $NOTION_API_KEY environment variable which is passed to
        // the server because of the `env` value below.
        "OPENAPI_MCP_HEADERS={\"Authorization\": \"Bearer $NOTION_API_KEY\", \"Notion-Version\": \"2022-06-28\"}",
       "mcp/notion"
      ],
      "env": {
        // The value of the `COPILOT_MCP_NOTION_API_KEY` secret will be passed to the
        // server command as an environment variable called `NOTION_API_KEY`
        "NOTION_API_KEY": "COPILOT_MCP_NOTION_API_KEY"
      },
      "tools": ["*"]
    }
  }
}

示例: Azure

Azure MCP 服务器在 Copilot 与重要的 Azure 服务(例如 Azure Cosmos DB 和 Azure 存储平台)之间建立无缝连接。

若要将 Azure MCP 与 Copilot 编码智能体 配合使用,需要更新存储库的 copilot-setup-steps.yml 文件,使其包含 Azure 登录工作流步骤。

  1. 在 Microsoft Entra 应用程序中配置 OIDC,以便信任 GitHub。 请参阅将 Azure 登录操作与 OpenID Connect 结合使用

  2. 如果还没有作工作流文件,在存储库中添加 .github/workflows/copilot-setup-steps.yml 操作工作流文件。

  3. 将 Azure 登录步骤添加到 copilot-setup-steps 工作流作业。

    YAML
    on:
      workflow_dispatch:
    permissions:
      id-token: write
      contents: read
    jobs:
      copilot-setup-steps:
        runs-on: ubuntu-latest
        permissions:
          id-token: write
          contents: read
        environment: copilot
        steps:
          - name: Azure login
            uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5
            with:
              client-id: ${{ secrets.AZURE_CLIENT_ID }}
              tenant-id: ${{ secrets.AZURE_TENANT_ID }}
              subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
    

    此配置可确保在 azure/login Copilot 编码智能体 运行时会执行该操作。

  4. 在存储库的 Copilot 环境中,为 AZURE_CLIENT_IDAZURE_TENANT_IDAZURE_SUBSCRIPTION_ID 添加机密。

  5. 通过将 azure 对象添加到 MCP 配置中来配置 Azure MCP 服务器。

JSON
 {
   "mcpServers": {
     "Azure": {
      "type": "local",
      "command": "npx",
      "args": [
        "-y",
        "@azure/mcp@latest",
        "server",
        "start"
       ],
      "tools": ["*"]
     }
   }
 }

示例:Cloudflare

Cloudflare MCP 服务器在 Cloudflare 服务(包括处理文档和数据分析)之间创建连接。

JSON
{
  "mcpServers": {
    "cloudflare": {
      "type": "sse",
      "url": "https://docs.mcp.cloudflare.com/sse",
      "tools": ["*"]
    }
  }
}

从 Visual Studio Code

重用 MCP 配置

如果已在 VS Code 中配置 MCP 服务器,可以对 Copilot 编码智能体 利用相似配置。

根据 VS Code 的配置方式,有可能可在存储库的 .vscode/mcp.json 文件或计算机的专用 settings.json 文件中找到 MCP 设置。

若要调整 Copilot 编码智能体 的配置,需要:

  1. 为每个 MCP 服务器添加一个 tools 键,指定哪些工具可供 Copilot 使用。
  2. 如果配置了 inputs,直接切换为使用 env
  3. 如果配置了 envFile,直接切换为使用 env
  4. args 配置中对 inputs 的任何引用更新为引用 env 中的环境变量。

有关 VS Code 中 MCP 的详细信息,请参阅 VS Code 文档

为 Copilot 编码智能体 设置 Copilot 环境

某些 MCP 服务器需要密钥或机密。 若要在 Copilot 编码智能体 中利用这些服务器,可以在 Copilot 的环境中添加机密。 这可确保正确识别机密并将其传递给已配置的适用的 MCP 服务器。

要为存储库配置 Copilot 环境,需要具有存储库管理员身份。

  1. 在 GitHub 上,导航到存储库的主页面。

  2. 在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。

    存储库标头的屏幕截图,其中显示了选项卡。 “设置”选项卡以深橙色边框突出显示。

  3. 在左侧边栏中,单击“环境”。

  4. 单击“新建环境”。

  5. **** 调用新环境 copilot,然后单击“Configure environment”。

  6. **** 在“Environment secrets”下,单击“Add environment secret”。

  7. **** 将机密命名为以 COPILOT_MCP_ 开头的名称,添加机密值,然后单击“Add secret”。

验证 MCP 配置

设置 MCP 配置后,应对其进行测试以确保设置正确。

  1. 在存储库中创建问题,然后将其分配给 Copilot。
  2. 等待几秒钟,Copilot 会对议题做出 👀 反应。
  3. 再等待几秒钟,Copilot 会创建拉取请求,该请求会显示在议题的时间线中。
  4. 单击时间线中创建的拉取请求,等待“Copilot started work”时间线事件出现。
  5. **** 单击“View session”,打开 Copilot 编码智能体 日志。
  6. ******** 单击日志查看器右上角的省略号按钮 (...),然后单击边栏中的 Copilot。
  7. **** 单击“Start MCP Servers”步骤,展开日志。
  8. 如果 MCP 服务器成功启动,日志底部会列出其工具。

如果 MCP 服务器需要任何 GitHub Actions 运行程序上未默认安装的依赖项,如 uvpipx,或需要专门设置步骤的依赖项,则可能需要创建 copilot-setup-steps.yml 操作工作流文件来安装它们。 有关详细信息,请参阅“自定义 Copilot 编码代理的开发环境”。

自定义内置 GitHub MCP 服务器

GitHub MCP 服务器默认启用并通过特定作用范围的令牌连接到 GitHub,该令牌对当前仓库仅具有只读访问权限。

如果要允许 Copilot 访问当前存储库以外的数据,可以向其提供具有更广泛访问权限的 personal access token。

  1. 创建具有适当权限的 personal access token。 建议使用 fine-grained personal access token,可在其中将令牌访问权限限为特定存储库的只读权限。 有关 personal access tokens 的详细信息,请参阅 管理个人访问令牌

  2. 在 GitHub 上,导航到存储库的主页面。

  3. 在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。

    存储库标头的屏幕截图,其中显示了选项卡。 “设置”选项卡以深橙色边框突出显示。

  4. 在边栏的“Code & automation”部分,单击“Copilot”,然后单击“Coding agent”********。

  5. **** 在“MCP configuration”部分中添加配置。

  6. 单击“ 保存”。

  7. 在左侧边栏中,单击“环境”。

  8. 单击 copilot 环境。

  9. **** 在“Environment secrets”下,单击“Add environment secret”。

  10. **** 调用机密 COPILOT_MCP_GITHUB_PERSONAL_ACCESS_TOKEN,在“Value”字段中输入 personal access token,然后单击“Add secret”。

有关如何在其他环境中配置 GitHub MCP 服务器的信息,请参阅“使用 GitHub MCP 服务器”。

后续步骤