注意
Copilot 编码智能体 为 公共预览版,可能会变动。 在预览期间,该功能的使用须遵循“GitHub 预发行许可条款”。
先决条件
在为 Copilot 编码智能体 设置 MCP 服务器之前,请阅读“模型上下文协议 (MCP) 与 Copilot 编码智能体”,以确保你理解 MCP 服务器和 Copilot 编码智能体 的相关概念。
简介
作为存储库管理员,可以将 MCP 服务器配置为在存储库中使用。 使用 JSON 格式的配置完成此操作,该配置指定要使用的 MCP 服务器的详细信息。 直接在 GitHub.com 上的存储库的设置中输入 JSON 配置。
警告
配置 MCP 服务器后,Copilot 将能够自主使用服务器提供的工具且在使用之前不请求批准。
将 MCP 配置添加到存储库
存储库管理员可以按照以下步骤配置 MCP 服务器:
-
在 GitHub 上,导航到存储库的主页面。
-
在存储库名称下,单击 “设置”。 如果看不到“设置”选项卡,请选择“”下拉菜单,然后单击“设置”。
-
在边栏的“Code & automation”部分,单击“Copilot”,然后单击“Coding agent”********。
-
**** 在“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”,然后单击“Coding agent”********。
-
**** 在“MCP configuration”部分中添加配置。
-
单击“ 保存”。
-
在左侧边栏中,单击“环境”。
-
单击
copilot
环境。 -
**** 在“Environment secrets”下,单击“Add environment secret”。
-
**** 调用机密
COPILOT_MCP_GITHUB_PERSONAL_ACCESS_TOKEN
,在“Value”字段中输入 personal access token,然后单击“Add secret”。
有关如何在其他环境中配置 GitHub MCP 服务器的信息,请参阅“使用 GitHub MCP 服务器”。