Skip to main content

Restrict MCP server access when using Github Copilot -

As GitHub Copilot expands its capabilities through the Model Context Protocol (MCP), it introduces an extra security challenge: how to give developers access to powerful AI tools while maintaining control over what external services those tools can access. This post walks you through setting up a curated MCP registry and enforcing access controls across your organization or enterprise when using Github Copilot.

Why restrict access?

MCP servers extend Copilot's capabilities by connecting it to external tools, databases, APIs, and services. While this opens up incredible possibilities for developer productivity, it also introduces potential security risks. Without proper controls, developers could:

  • Connect Copilot to unauthorized external services
  • Expose sensitive data to third-party MCP servers
  • Use tools that don't meet your organization's security or compliance requirements
  • Bypass established security policies through AI-assisted workflows

A way is needed to provide a curated catalog of approved MCP servers while preventing access to unapproved ones.

Understanding MCP registries

An MCP registry serves as a catalog of approved MCP servers, similar to a curated vendor list. Each registry entry points to a server's manifest, which describes the tools, resources, and prompts that server exposes.

The registry serves two key purposes:

  1. Discovery: Makes approved MCP servers visible and easily installable in MCP-compatible environments
  2. Enforcement: When combined with the "Registry only" policy, prevents usage of any MCP servers not defined in your internal registry

Think of the registry as your recommended vendor list, while the enforcement policy determines whether that list is merely suggested or strictly required.

Configuring MCP registry access

To manage the MCP registry access, go to the Organization settings in Github:

  • Click your profile picture, then Organizations
  • Next to your organization, click Settings
  • In the sidebar under "Code, planning, and automation," click CopilotPolicies

  • Under "Features," ensure MCP servers in Copilot is set to Enabled

  • In the MCP Registry URL (optional) field, enter your registry URL

 

  • Click Save

When you also select the "Registry only" enforcement option, the user experience changes significantly:

  • In IDEs: Blocked servers appear greyed out with a clear warning message
  • In configuration files: Blocked servers show "run": "blocked" in the mcp.json file
  • For developers: They can only install and use MCP servers from your approved registry

Remark: MCP registry and allowlist controls are still rolling out across Copilot environments, so it could be that this option doesn’t work yet in your IDE.

Important limitations

The current "Registry only" enforcement has some limitations you should be aware of:

  1. Name-based matching: Enforcement is based only on server name/ID matching, which can be bypassed by editing configuration files
  2. No strict installation prevention: The system doesn't yet prevent installation of non-registry servers at the filesystem level
  3. Recommended security posture: For maximum security, consider disabling MCP servers entirely until strict enforcement becomes available

GitHub is actively working on enhanced enforcement with stricter configuration matching that will verify command paths, arguments, and environment variables.

More information

Managing policies and features for GitHub Copilot in your enterprise - GitHub Enterprise Cloud Docs

Internal MCP registry and allowlist controls for VS Code Insiders - GitHub Changelog

Meet the GitHub MCP Registry: The fastest way to discover MCP Servers - The GitHub Blog

Popular posts from this blog

Azure DevOps/ GitHub emoji

I’m really bad at remembering emoji’s. So here is cheat sheet with all emoji’s that can be used in tools that support the github emoji markdown markup: All credits go to rcaviers who created this list.

.NET 8–Keyed/Named Services

A feature that a lot of IoC container libraries support but that was missing in the default DI container provided by Microsoft is the support for Keyed or Named Services. This feature allows you to register the same type multiple times using different names, allowing you to resolve a specific instance based on the circumstances. Although there is some controversy if supporting this feature is a good idea or not, it certainly can be handy. To support this feature a new interface IKeyedServiceProvider got introduced in .NET 8 providing 2 new methods on our ServiceProvider instance: object? GetKeyedService(Type serviceType, object? serviceKey); object GetRequiredKeyedService(Type serviceType, object? serviceKey); To use it, we need to register our service using one of the new extension methods: Resolving the service can be done either through the FromKeyedServices attribute: or by injecting the IKeyedServiceProvider interface and calling the GetRequiredKeyedServic...

Kubernetes–Limit your environmental impact

Reducing the carbon footprint and CO2 emission of our (cloud) workloads, is a responsibility of all of us. If you are running a Kubernetes cluster, have a look at Kube-Green . kube-green is a simple Kubernetes operator that automatically shuts down (some of) your pods when you don't need them. A single pod produces about 11 Kg CO2eq per year( here the calculation). Reason enough to give it a try! Installing kube-green in your cluster The easiest way to install the operator in your cluster is through kubectl. We first need to install a cert-manager: kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.5/cert-manager.yaml Remark: Wait a minute before you continue as it can take some time before the cert-manager is up & running inside your cluster. Now we can install the kube-green operator: kubectl apply -f https://github.com/kube-green/kube-green/releases/latest/download/kube-green.yaml Now in the namespace where we want t...