From 6dc3535774d2899c8e145c126c79419aac6fd792 Mon Sep 17 00:00:00 2001 From: Jules <19994093+jules-p@users.noreply.github.com> Date: Thu, 12 Jun 2025 18:21:46 +0200 Subject: [PATCH] Remote GitHub MCP server (#55768) Co-authored-by: Jules Porter Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Adam Holt Co-authored-by: Sarita Iyer <66540150+saritai@users.noreply.github.com> Co-authored-by: Sam Morrow --- .vscode/settings.json | 4 - .../help/copilot/vsc-mcp-server-restart.png | Bin 0 -> 40601 bytes content/copilot/customizing-copilot/index.md | 3 +- .../extending-copilot-chat-with-mcp.md | 14 +- ...extending-copilot-coding-agent-with-mcp.md | 3 + .../using-model-context-protocol/index.md | 13 ++ .../using-the-github-mcp-server.md | 199 ++++++++++++++++++ .../copilot/mcp/about-github-mcp-server.md | 30 +++ .../copilot/mcp/mcp-configuration-location.md | 2 + .../copilot/mcp/troubleshooting-mcp-server.md | 28 +++ data/reusables/copilot/open-chat-vs-code.md | 2 +- data/reusables/copilot/select-agent.md | 1 + 12 files changed, 286 insertions(+), 13 deletions(-) delete mode 100644 .vscode/settings.json create mode 100644 assets/images/help/copilot/vsc-mcp-server-restart.png rename content/copilot/customizing-copilot/{ => using-model-context-protocol}/extending-copilot-chat-with-mcp.md (91%) rename content/copilot/customizing-copilot/{ => using-model-context-protocol}/extending-copilot-coding-agent-with-mcp.md (98%) create mode 100644 content/copilot/customizing-copilot/using-model-context-protocol/index.md create mode 100644 content/copilot/customizing-copilot/using-model-context-protocol/using-the-github-mcp-server.md create mode 100644 data/reusables/copilot/mcp/about-github-mcp-server.md create mode 100644 data/reusables/copilot/mcp/mcp-configuration-location.md create mode 100644 data/reusables/copilot/mcp/troubleshooting-mcp-server.md create mode 100644 data/reusables/copilot/select-agent.md diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index ab59a4f37f..0000000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "workbench.editor.enablePreview": false, - "workbench.editor.enablePreviewFromQuickOpen": false -} diff --git a/assets/images/help/copilot/vsc-mcp-server-restart.png b/assets/images/help/copilot/vsc-mcp-server-restart.png new file mode 100644 index 0000000000000000000000000000000000000000..818744c4661e7c031a50402f9edce5045ff6b1fa GIT binary patch literal 40601 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[!NOTE] @@ -36,8 +38,7 @@ For information on some of the other currently available MCP servers, see [the M To configure MCP servers in {% data variables.product.prodname_vscode %}, you need to set up a configuration script that specifies the details of the MCP servers you want to use. You can configure MCP servers for either: -* **A specific repository**. This will share MCP servers with anyone who opens the project in {% data variables.product.prodname_vscode %}. To do this, create a `.vscode/mcp.json` file in the root of your repository. -* **Your personal instance of {% data variables.product.prodname_vscode %}**. You will be the only person who has access to configured MCP servers. To do this, add the configuration to your `settings.json` file in {% data variables.product.prodname_vscode %}. +{% data reusables.copilot.mcp.mcp-configuration-location %} >[!NOTE] We recommend you use only one location per server. Adding the same server to both locations may cause conflicts and unexpected behavior. @@ -45,6 +46,8 @@ The steps below show how to configure the Fetch MCP server in your `.vscode/mcp. You can use the same steps to configure MCP servers in your personal {% data variables.product.prodname_vscode %} settings. Details on how to configure other MCP servers are available in the [MCP servers repository](https://github.com/modelcontextprotocol/servers/tree/main). +For information on configuring the {% data variables.product.github %} MCP server, see [AUTOTITLE](/copilot/customizing-copilot/using-model-context-protocol/using-the-github-mcp-server). + 1. Add the following configuration to your `.vscode/mcp.json` file: ```json copy @@ -79,14 +82,12 @@ You can use the same steps to configure MCP servers in your personal {% data var For more information on configuring MCP servers in {% data variables.product.prodname_vscode %}, see [Use MCP servers in {% data variables.product.prodname_vscode %} (Preview)](https://aka.ms/vscode-add-mcp) in the {% data variables.product.prodname_vscode %} documentation. ->[!IMPORTANT] Beginning April 4, 2025, the {% data variables.product.github %} MCP server, and installation instructions, will be publicly available in the [github-mcp-server](https://github.com/github/github-mcp-server) repository. - ## Using MCP servers in {% data variables.copilot.copilot_chat_short %} Once you have configured your MCP servers, you can use them in {% data variables.copilot.copilot_chat_short %} to access a wide range of tools and services. In the example below, we will use the Fetch MCP server to fetch details about a web page. -1. Open {% data variables.copilot.copilot_chat_short %} by clicking the {% octicon "copilot" aria-hidden="true" aria-label="copilot" %} icon in the title bar of {% data variables.product.prodname_vscode %}. -1. In the {% data variables.copilot.copilot_chat_short %} box, select **Agent** from the popup menu. +{% data reusables.copilot.open-chat-vs-code %} +{% data reusables.copilot.select-agent %} 1. In the file with the MCP configuration, check that the MCP server is running. If it is not running, click the "Start" button to start the MCP server. ![Screenshot of the MCP server configuration in {% data variables.product.prodname_vscode %}. The "Running" status is outlined in dark orange.](/assets/images/help/copilot/vsc-mcp-server-running.png) @@ -200,3 +201,4 @@ For more information on creating and configuring your own MCP servers, see [the ## Further reading * [AUTOTITLE](/copilot/customizing-copilot/extending-copilot-coding-agent-with-mcp) +* [AUTOTITLE](/copilot/customizing-copilot/using-model-context-protocol/using-the-github-mcp-server) diff --git a/content/copilot/customizing-copilot/extending-copilot-coding-agent-with-mcp.md b/content/copilot/customizing-copilot/using-model-context-protocol/extending-copilot-coding-agent-with-mcp.md similarity index 98% rename from content/copilot/customizing-copilot/extending-copilot-coding-agent-with-mcp.md rename to content/copilot/customizing-copilot/using-model-context-protocol/extending-copilot-coding-agent-with-mcp.md index 546e7bdcd6..05736dbc48 100644 --- a/content/copilot/customizing-copilot/extending-copilot-coding-agent-with-mcp.md +++ b/content/copilot/customizing-copilot/using-model-context-protocol/extending-copilot-coding-agent-with-mcp.md @@ -9,6 +9,7 @@ topics: - Copilot type: how_to redirect_from: + - /copilot/customizing-copilot/extending-copilot-coding-agent-with-mcp - /early-access/copilot/coding-agent/extending-copilot-coding-agent-with-model-context-protocol --- @@ -276,6 +277,8 @@ If you want to allow {% data variables.product.prodname_copilot_short %} to acce 1. Under "Environment secrets", click **Add environment secret**. 1. Call the secret `COPILOT_MCP_GITHUB_PERSONAL_ACCESS_TOKEN`, enter your {% data variables.product.pat_generic %} in the "Value" field, then click **Add secret**. +For information on using the {% data variables.product.github %} MCP server in other environments, see [AUTOTITLE](/copilot/customizing-copilot/using-model-context-protocol/using-the-github-mcp-server). + ## Best practices * Enabling third-party MCP servers for use may impact the performance of the agent and the quality of the outputs. Review the third-party MCP server thoroughly and ensure that it meets your organization’s requirements. diff --git a/content/copilot/customizing-copilot/using-model-context-protocol/index.md b/content/copilot/customizing-copilot/using-model-context-protocol/index.md new file mode 100644 index 0000000000..e5479b6b83 --- /dev/null +++ b/content/copilot/customizing-copilot/using-model-context-protocol/index.md @@ -0,0 +1,13 @@ +--- +title: Using Model Context Protocol +shortTitle: Use MCP +intro: 'Model Context Protocol (MCP) is a protocol that allows you to extend the capabilities of {% data variables.product.prodname_copilot %} by integrating it with other systems.' +versions: + feature: copilot +topics: + - Copilot +children: + - /extending-copilot-chat-with-mcp + - /using-the-github-mcp-server + - /extending-copilot-coding-agent-with-mcp +--- diff --git a/content/copilot/customizing-copilot/using-model-context-protocol/using-the-github-mcp-server.md b/content/copilot/customizing-copilot/using-model-context-protocol/using-the-github-mcp-server.md new file mode 100644 index 0000000000..0263064bdd --- /dev/null +++ b/content/copilot/customizing-copilot/using-model-context-protocol/using-the-github-mcp-server.md @@ -0,0 +1,199 @@ +--- +title: Using the GitHub MCP Server +intro: "Learn how to use the GitHub Model Context Protocol (MCP) server to extend {% data variables.copilot.copilot_chat_short %}." +shortTitle: Use the GitHub MCP Server +versions: + feature: copilot +topics: + - Copilot +type: how_to +--- + +>[!NOTE] +> The {% data variables.product.github %} MCP server is currently in {% data variables.release-phases.public_preview %} and subject to change. + +{% data reusables.copilot.mcp.about-github-mcp-server %} + +## Setting up the {% data variables.product.github %} MCP server in {% data variables.product.prodname_vscode %} + +The instructions below guide you through setting up the {% data variables.product.github %} MCP server in {% data variables.product.prodname_vscode %}. Other MCP-compatible editors may have similar steps, but the exact process may vary. + +You can choose to set up the {% data variables.product.github %} MCP server either remotely or locally, depending on your needs and preferences. You can also configure your {% data variables.product.github %} MCP server for either: + +{% data reusables.copilot.mcp.mcp-configuration-location %} + +The remote {% data variables.product.github %} MCP server uses one-click OAuth authentication by default, but you can also manually configure it to use a {% data variables.product.pat_generic %} (PAT) for authentication. If you use OAuth, the MCP server will have the same access as your personal account. If you use a PAT, the MCP server will have access to the scopes granted by the PAT. + +> [!NOTE] +> If you are an {% data variables.product.prodname_emu %} with PAT restrictions, you won't be able to use PAT authentication. If you have OAuth access policy restrictions, you will need the OAuth apps for each client to be enabled (except {% data variables.product.prodname_vscode %} and {% data variables.product.prodname_vs %}). + +* [Remote MCP server configuration with OAuth](#remote-mcp-server-configuration-with-oauth) +* [Remote MCP server configuration with PAT](#remote-mcp-server-configuration-with-pat) +* [Local MCP server setup](#local-mcp-server-setup) + +### Remote MCP server configuration with OAuth + +> [!NOTE] +> The remote {% data variables.product.github %} MCP server is not available to {% data variables.product.prodname_ghe_server %} users. If you are using {% data variables.product.prodname_ghe_server %}, you can install the {% data variables.product.github %} MCP server locally. See [Local MCP server setup](#local-mcp-server-setup). + +You do not need to create a PAT or install any additional software to use the remote {% data variables.product.github %} MCP server with OAuth. You can set it up directly in {% data variables.product.prodname_vscode %}. You can also install individual toolsets, either in read-only mode or with full read/write access, allowing you to tailor the server's capabilities to your specific needs. For more information, see [Tool configuration](#tool-configuration). + +1. In {% data variables.product.prodname_vscode %}, open the command palette by pressing Ctrl+Shift+P (Windows/Linux) / Command+Shift+P (Mac). +1. Type: `mcp: add server` and then press **Enter**. +1. From the list, select **HTTP (HTTP or Server-Sent Events)**. +1. In the **Server URL** field, enter `https://api.githubcopilot.com/mcp/`, and press **Enter**. +1. Under **Enter Server ID**, press **Enter** to use the default server ID, or enter a custom server ID. +1. Under **Choose where to save the configuration**, select where you want to save the MCP server configuration. + + * {% data variables.product.prodname_vscode %} will open and add the configuration to the selected file in the editor, or create a new file if it doesn't exist. + +1. In the **{% data variables.product.prodname_vscode %}** popup, to authorize the MCP server with OAuth, click **Allow** and select your personal account from the list. + +### Remote MCP server configuration with PAT + +To configure the remote {% data variables.product.github %} MCP server with a PAT, ensure you have created a PAT with the necessary scopes for the access you want to grant to the MCP server. For more information, see [AUTOTITLE](/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token). + +You will need to manually configure the MCP server in {% data variables.product.prodname_vscode %} to use the PAT for authorization. + +1. In {% data variables.product.prodname_vscode %}, open the command palette by pressing Ctrl+Shift+P (Windows/Linux) / Command+Shift+P (Mac). +1. Type: `mcp: add server` and then press **Enter**. +1. From the list, select **HTTP (HTTP or Server-Sent Events)**. +1. In the **Server URL** field, enter `https://api.githubcopilot.com/mcp/`, and press **Enter**. +1. Under **Enter Server ID**, press **Enter** to use the default server ID, or enter a custom server ID. +1. Under **Choose where to save the configuration**, select where you want to save the MCP server configuration. + + * {% data variables.product.prodname_vscode %} will open and add the configuration to the selected file in the editor, or create a new file if it doesn't exist. + +1. In the **{% data variables.product.prodname_vscode %}** popup, to decline OAuth authorization, click **Cancel**. +1. You will need to manually edit the configuration file to use a PAT. In the configuration file, at the end of the `url` line, add the following: + + ```json copy + , + "headers": { + "Authorization": "Bearer ${input:github_token}" + } + }, + }, + "inputs": [ + { + "id": "github_token", + "type": "promptString", + "description": "{% data variables.product.github %} {% data variables.product.pat_generic_title_case %}", + "password": true + } + ] + } + ``` + +1. A "Restart" button will appear in the file. Click "Restart" to restart the MCP server with the new configuration. + + ![Screenshot of the MCP server restart button in the configuration file. The "Restart" button is outlined in dark orange.](/assets/images/help/copilot/vsc-mcp-server-restart.png) + +1. In the command palette, you will see a prompt to enter your GitHub token. Enter the PAT you created earlier, and press **Enter**. + * The MCP server will now be configured to use the PAT for authorization. + +### Local MCP server setup + +>[!NOTE] +> If you are a {% data variables.product.prodname_ghe_server %} user, and your enterprise has PAT restrictions enabled, you can only use API endpoints for scopes that are allowed by your enterprise's PAT policy. If all API endpoints are restricted, you will not be able to use the MCP server. If you are unsure about your enterprise's PAT policy, contact your enterprise administrator for more information. + +Using the {% data variables.product.github %} MCP server locally requires you to have Docker installed and running on your machine. Additionally, you can only authenticate with a PAT, as OAuth is not supported for local MCP servers. + +1. Ensure you have Docker installed and running on your machine. See [Docker installation instructions](https://docs.docker.com/get-docker/). +1. Create a PAT with (at least) the `read:packages` and `repo` scopes. For more information, see [AUTOTITLE](/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token). +1. Decide whether you want to configure the MCP server for a specific repository or for your personal instance of {% data variables.product.prodname_vscode %}. + + * If you are using a specific repository, open the `.vscode/mcp.json` file in {% data variables.product.prodname_vscode %}, and add the following configuration: + + ```json copy + { + "inputs": [ + { + "type": "promptString", + "id": "github_token", + "description": "{% data variables.product.github %} {% data variables.product.pat_generic_title_case %}", + "password": true + } + ], + "servers": { + "github": { + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "GITHUB_PERSONAL_ACCESS_TOKEN", + "ghcr.io/github/github-mcp-server" + ], + "env": { + "GITHUB_PERSONAL_ACCESS_TOKEN": "${input:github_token}" + } + } + } + } + ``` + + * If you are using your personal instance of {% data variables.product.prodname_vscode %}, open your `settings.json` file in {% data variables.product.prodname_vscode %}: + * Press Ctrl+Shift+P (Windows/Linux) or Cmd+Shift+P (macOS). + * Type **Preferences: Open Settings (JSON)** and select it. + * Add the following configuration: + + ```json copy + { + "mcp": { + "inputs": [ + { + "type": "promptString", + "id": "github_token", + "description": "{% data variables.product.github %} {% data variables.product.pat_generic_title_case %}", + "password": true + } + ], + "servers": { + "github": { + "command": "docker", + "args": [ + "run", + "-i", + "--rm", + "-e", + "GITHUB_PERSONAL_ACCESS_TOKEN", + "ghcr.io/github/github-mcp-server" + ], + "env": { + "GITHUB_PERSONAL_ACCESS_TOKEN": "${input:github_token}" + } + } + } + } + } + ``` + +1. Save the file. +1. In the command palette, you will see a prompt to enter your {% data variables.product.github %} token. Enter the PAT you created earlier, and press **Enter**. + * The MCP server will now be configured to run locally with the PAT for authorization. + +## Tool configuration + +The {% data variables.product.github %} MCP server supports installing individual toolsets, either in read-only mode or with full read/write access, allowing you to tailor the server's capabilities to your specific needs. For one-click installation options of each toolset, see the [GitHub MCP server repository](https://github.com/github/github-mcp-server/blob/main/docs/remote-server.md). + +## Using the {% data variables.product.github %} MCP server in {% data variables.product.prodname_vscode %} + +The {% data variables.product.github %} MCP server enables you to perform a wide range of actions on {% data variables.product.github %}, via {% data variables.copilot.copilot_chat_short %} in {% data variables.product.prodname_vscode %}. + +{% data reusables.copilot.open-chat-vs-code %} +{% data reusables.copilot.select-agent %} +1. To see the available actions, in the {% data variables.copilot.copilot_chat_short %} box, click the **Select tools** icon. + * In the **Tools** dropdown, under **MCP Server:{% data variables.product.github %}**, you will see a list of available actions. +1. In the {% data variables.copilot.copilot_chat_short %} box, type a command or question related to the action you want to perform, and press **Enter**. + * For example, you can ask the {% data variables.product.github %} MCP server to create a new issue, list pull requests, or retrieve repository information. +1. The {% data variables.product.github %} MCP server will process your request and provide a response in the chat interface. + * In the {% data variables.copilot.copilot_chat_short %} box, you may be asked to give additional permissions or provide more information to complete the action. +1. Follow the prompts to complete the action. + +{% data reusables.copilot.mcp.troubleshooting-mcp-server %} + +## Further reading + +* [AUTOTITLE](/copilot/customizing-copilot/using-model-context-protocol/extending-copilot-coding-agent-with-mcp) diff --git a/data/reusables/copilot/mcp/about-github-mcp-server.md b/data/reusables/copilot/mcp/about-github-mcp-server.md new file mode 100644 index 0000000000..d6a7d2632e --- /dev/null +++ b/data/reusables/copilot/mcp/about-github-mcp-server.md @@ -0,0 +1,30 @@ +## About the {% data variables.product.github %} MCP server + +The {% data variables.product.github %} MCP server is a Model Context Protocol (MCP) server provided and maintained by {% data variables.product.github %}. MCP allows you to integrate AI capabilities with other tools and services, enhancing your development experience by providing context-aware AI assistance. + +For more information on MCP, see [the official MCP documentation](https://modelcontextprotocol.io/introduction). + +You can access the {% data variables.product.github %} MCP server remotely through {% data variables.product.prodname_vscode %}, or other editors that support remote MCP; or you can run it locally in any MCP-compatible editor, allowing you to choose between the convenience of a hosted solution or the customizability of a self-hosted setup. + +If you want to utilize the remote {% data variables.product.github %} MCP server, you can do so in a few steps, without any local setup. This is particularly useful for users who want to quickly leverage {% data variables.product.github %}’s AI capabilities without the overhead of managing a local MCP server. + +Running the {% data variables.product.github %} MCP server locally requires a bit more setup, but it allows for greater customization and control over your AI interactions. + +{% data variables.product.github %} MCP server can be used to: + +* Automate and streamline code-related tasks. +* Connect third-party tools (like Cursor, Windsurf, or future integrations) to leverage {% data variables.product.github %}’s context and AI capabilities. +* Enable cloud-based workflows that work from any device, without local setup. + +## Availability + +There is currently broad support for local MCP servers in clients such as {% data variables.product.prodname_vscode %}, JetBrains IDEs, XCode, and others. + +Support for remote MCP servers is growing, with editors like {% data variables.product.prodname_vscode %} (with OAuth or PAT), {% data variables.product.prodname_vs %} (PAT only), Windsurf (PAT only), and Cursor (PAT only) already providing this functionality. + +To find out if your preferred editor supports remote MCP servers, check the documentation for your specific editor. + +## Prerequisites + +* A {% data variables.product.github %} account. +* {% data variables.product.prodname_vscode %}, or another MCP-compatible editor. diff --git a/data/reusables/copilot/mcp/mcp-configuration-location.md b/data/reusables/copilot/mcp/mcp-configuration-location.md new file mode 100644 index 0000000000..9aba158220 --- /dev/null +++ b/data/reusables/copilot/mcp/mcp-configuration-location.md @@ -0,0 +1,2 @@ +* **A specific repository**. This enables you to share MCP servers with anyone who opens the project in {% data variables.product.prodname_vscode %}. To do this, create a `.vscode/mcp.json` file in the root of your repository. +* **Your personal instance of {% data variables.product.prodname_vscode %}**. You will be the only person who has access to configured MCP servers. To do this, add the configuration to your `settings.json` file in {% data variables.product.prodname_vscode %}. MCP servers configured this way will be available in all workspaces. diff --git a/data/reusables/copilot/mcp/troubleshooting-mcp-server.md b/data/reusables/copilot/mcp/troubleshooting-mcp-server.md new file mode 100644 index 0000000000..d2babb3b52 --- /dev/null +++ b/data/reusables/copilot/mcp/troubleshooting-mcp-server.md @@ -0,0 +1,28 @@ +## Troubleshooting + +If you encounter issues while using the {% data variables.product.github %} MCP server, there are a few common troubleshooting steps you can take. + +### Authorization issues + +If you are having trouble authorizing the MCP server, ensure that: + +* You are signed in to {% data variables.product.github %} in your choice of IDE. + +If you are authenticating with a {% data variables.product.pat_generic %} (PAT), ensure that: +* Your GitHub PAT is valid and has the necessary scopes for the actions you want to perform. +* You have entered the correct PAT when prompted in {% data variables.product.prodname_vscode %}. + +### Copilot agent mode problems + +If you are having trouble with the {% data variables.copilot.copilot_chat_short %} agent mode, ensure that: +* You have selected the correct agent in the {% data variables.copilot.copilot_chat_short %} box. +* You have configured the MCP server correctly in {% data variables.product.prodname_vscode %}. +* You have the necessary permissions to perform the actions you are trying to execute. + +### General tips + +If you are experiencing other issues with the {% data variables.product.github %} MCP server, here are some general tips to help you troubleshoot: + +* Check the output logs of the MCP server for any error messages. +* If you are running the MCP server locally, ensure that your local environment is set up correctly for running Docker containers. +* Try restarting the MCP server or your IDE. diff --git a/data/reusables/copilot/open-chat-vs-code.md b/data/reusables/copilot/open-chat-vs-code.md index e7072263f8..13b233ada0 100644 --- a/data/reusables/copilot/open-chat-vs-code.md +++ b/data/reusables/copilot/open-chat-vs-code.md @@ -1 +1 @@ -1. To open the chat view, click the chat icon in the activity bar or press Control+Command+i (Mac) / Ctrl+Alt+i (Windows/Linux). +1. Open {% data variables.copilot.copilot_chat_short %} by clicking the {% octicon "copilot" aria-hidden="true" aria-label="copilot" %} icon in the title bar of {% data variables.product.prodname_vscode %}. diff --git a/data/reusables/copilot/select-agent.md b/data/reusables/copilot/select-agent.md new file mode 100644 index 0000000000..8042627be0 --- /dev/null +++ b/data/reusables/copilot/select-agent.md @@ -0,0 +1 @@ +1. In the {% data variables.copilot.copilot_chat_short %} box, select **Agent** from the popup menu.