注意
Copilot 编码智能体 为 公共预览版,可能会变动。 在预览期间,该功能的使用须遵循“GitHub 预发行许可条款”。
先决条件
在为 Copilot 编码智能体 设置 MCP 服务器之前,请阅读“Model Context Protocol (MCP) and GitHub Copilot coding agent”,以确保你理解 MCP 服务器和 Copilot 编码智能体 的相关概念。
简介
作为存储库管理员,可以将 MCP 服务器配置为在存储库中使用。 使用 JSON 格式的配置完成此操作,该配置指定要使用的 MCP 服务器的详细信息。 直接在 GitHub.com 上的存储库的设置中输入 JSON 配置。
警告
配置 MCP 服务器后,Copilot 将能够自主使用服务器提供的工具且在使用之前不请求批准。
将 MCP 配置添加到存储库
存储库管理员可以按照以下步骤配置 MCP 服务器:
-
在 GitHub 上,导航到存储库的主页面。
-
在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。
-
在边栏的“Code & automation”部分,单击“Copilot”,然后单击“编码智能体”********。
-
**** 在“MCP configuration”部分中添加配置。
本文中的以下各节解释如何编写需要在此处输入的 JSON 配置。
-
单击“ 保存”。
系统将验证配置以确保其语法正确。
-
如果 MCP 服务器需要密钥或机密,请将机密添加到 Copilot 环境。 仅当机密名称带有前缀
COPILOT_MCP_
才可用于 MCP 配置。 请参阅为 Copilot 编码智能体 设置 Copilot 环境。
编写 MCP 服务器的 JSON 配置
使用专用 JSON 格式配置 MCP 服务器。 JSON 必须包含一个 mcpServers
对象,其中键是 MCP 服务器的名称(例如 sentry
),值是具有该 MCP 服务器的配置的对象。
{ "mcpServers": { "MCP SERVER 1": { "command": "VALUE", "args": [ VALUES ], ... }, "MCP SERVER 2": { "command": "VALUE", "args": [ VALUES ], ... }, ... } }
{
"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_
开头。 - 字符串值。
- 已配置的 GitHub Actions 机密的名称,以
远程 MCP 特定密钥****
url
(string
):必需。 MCP 服务器的 URL。headers
(object
):可选。 要附加到对服务器的请求的标头。 此对象应将标头密钥的名称映射到以下任一项:- 已配置的 GitHub Actions 机密的名称,以
COPILOT_MCP_
开头,前面有一个$
- 一个字符串值
- 已配置的 GitHub Actions 机密的名称,以
示例配置
示例:Sentry
Sentry MCP 服务器为 Copilot 提供经身份验证的访问权限,从而能够访问 Sentry 中记录的异常。
// 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" } } } }
// 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 的笔记和其他内容。
// 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": ["*"] } } }
// 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 登录工作流步骤。
-
在 Microsoft Entra 应用程序中配置 OIDC,以便信任 GitHub。 请参阅将 Azure 登录操作与 OpenID Connect 结合使用。
-
如果还没有作工作流文件,在存储库中添加
.github/workflows/copilot-setup-steps.yml
操作工作流文件。 -
将 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 }}
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 编码智能体 运行时会执行该操作。 -
在存储库的 Copilot 环境中,为
AZURE_CLIENT_ID
、AZURE_TENANT_ID
和AZURE_SUBSCRIPTION_ID
添加机密。 -
通过将
azure
对象添加到 MCP 配置中来配置 Azure MCP 服务器。
{ "mcpServers": { "Azure": { "type": "local", "command": "npx", "args": [ "-y", "@azure/mcp@latest", "server", "start" ], "tools": ["*"] } } }
{
"mcpServers": {
"Azure": {
"type": "local",
"command": "npx",
"args": [
"-y",
"@azure/mcp@latest",
"server",
"start"
],
"tools": ["*"]
}
}
}
示例:Cloudflare
Cloudflare MCP 服务器在 Cloudflare 服务(包括处理文档和数据分析)之间创建连接。
{ "mcpServers": { "cloudflare": { "type": "sse", "url": "https://docs.mcp.cloudflare.com/sse", "tools": ["*"] } } }
{
"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 编码智能体 的配置,需要:
- 为每个 MCP 服务器添加一个
tools
键,指定哪些工具可供 Copilot 使用。 - 如果配置了
inputs
,直接切换为使用env
。 - 如果配置了
envFile
,直接切换为使用env
。 - 将
args
配置中对inputs
的任何引用更新为引用env
中的环境变量。
有关 VS Code 中 MCP 的详细信息,请参阅 VS Code 文档。
为 Copilot 编码智能体 设置 Copilot 环境
某些 MCP 服务器需要密钥或机密。 若要在 Copilot 编码智能体 中利用这些服务器,可以在 Copilot 的环境中添加机密。 这可确保正确识别机密并将其传递给已配置的适用的 MCP 服务器。
要为存储库配置 Copilot 环境,需要具有存储库管理员身份。
-
在 GitHub 上,导航到存储库的主页面。
-
在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。
-
在左侧边栏中,单击“环境”。
-
单击“新建环境”。
-
**** 调用新环境
copilot
,然后单击“Configure environment”。 -
**** 在“Environment secrets”下,单击“Add environment secret”。
-
**** 将机密命名为以
COPILOT_MCP_
开头的名称,添加机密值,然后单击“Add secret”。
验证 MCP 配置
设置 MCP 配置后,应对其进行测试以确保设置正确。
- 在存储库中创建问题,然后将其分配给 Copilot。
- 等待几秒钟,Copilot 会对议题做出 👀 反应。
- 再等待几秒钟,Copilot 会创建拉取请求,该请求会显示在议题的时间线中。
- 单击时间线中创建的拉取请求,等待“Copilot started work”时间线事件出现。
- **** 单击“View session”,打开 Copilot 编码智能体 日志。
- ******** 单击日志查看器右上角的省略号按钮 (...),然后单击边栏中的 Copilot。
- **** 单击“Start MCP Servers”步骤,展开日志。
- 如果 MCP 服务器成功启动,日志底部会列出其工具。
如果 MCP 服务器需要任何 GitHub Actions 运行程序上未默认安装的依赖项,如 uv
和 pipx
,或需要专门设置步骤的依赖项,则可能需要创建 copilot-setup-steps.yml
操作工作流文件来安装它们。 有关详细信息,请参阅“自定义 Copilot 编码代理的开发环境”。
自定义内置 GitHub MCP 服务器
GitHub MCP 服务器默认启用并通过特定作用范围的令牌连接到 GitHub,该令牌对当前仓库仅具有只读访问权限。
如果要允许 Copilot 访问当前存储库以外的数据,可以向其提供具有更广泛访问权限的 personal access token。
-
创建具有适当权限的 personal access token。 建议使用 fine-grained personal access token,可在其中将令牌访问权限限为特定存储库的只读权限。 有关 personal access tokens 的详细信息,请参阅 管理个人访问令牌。
-
在 GitHub 上,导航到存储库的主页面。
-
在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。
-
在边栏的“Code & automation”部分,单击“Copilot”,然后单击“编码智能体”********。
-
**** 在“MCP configuration”部分中添加配置。
-
单击“ 保存”。
-
在左侧边栏中,单击“环境”。
-
单击
copilot
环境。 -
**** 在“Environment secrets”下,单击“Add environment secret”。
-
**** 调用机密
COPILOT_MCP_GITHUB_PERSONAL_ACCESS_TOKEN
,在“Value”字段中输入 personal access token,然后单击“Add secret”。
有关如何在其他环境中配置 GitHub MCP 服务器的信息,请参阅“使用 GitHub MCP 服务器”。