Start Debugging

Listas de permissão de MCP chegam às configurações gerenciadas de empresa do Copilot

O changelog do GitHub de 6 de agosto de 2026 adiciona allowedMcpServers e deniedMcpServers ao copilot/managed-settings.json. Matchers por URL e argv, precedência da negação e um padrão que falha fechado, algo que o registro baseado em nomes nunca teve.

Em 2026-08-06 o GitHub lançou MCP allowlists in enterprise managed settings. Duas chaves, allowedMcpServers e deniedMcpServers, agora decidem quais servidores Model Context Protocol um cliente do Copilot pode iniciar. Está em disponibilidade geral e vale para o app do GitHub Copilot, para o Copilot CLI e para o VS Code.

Isso fecha uma lacuna que estava aberta desde que o suporte a MCP se espalhou. A resposta anterior no nível de empresa era o registro MCP personalizado, ainda em versão prévia pública, que identifica servidores por nome ou ID. Nomes são rótulos definidos pelo usuário, então quem quiser um servidor bloqueado apenas o renomeia na própria máquina. A documentação do GitHub é direta sobre a consequência: os usuários podem contornar a restrição editando arquivos de configuração.

Os matchers são a história inteira

O arquivo fica no repositório .github-private da empresa, em copilot/managed-settings.json, na branch padrão. Cada entrada identifica um servidor por exatamente um matcher.

{
  "allowedMcpServers": [
    { "serverUrl": "https://api.githubcopilot.com/*" },
    { "serverCommand": ["npx", "@playwright/mcp@latest"] },
    { "serverCommand": ["cmd", "/c", "uvx", "markitdown-mcp"] }
  ],
  "deniedMcpServers": [
    { "serverUrl": "https://learn.microsoft.com/*" }
  ]
}

Repare que serverCommand é um array argv, não uma string de shell, e a correspondência é exata. serverUrl aceita curingas * e a URL é canonicalizada antes da comparação, então truques de codificação ou de barra final não compram um veredito diferente. serverName continua existindo, mas só como alternativa: para um servidor remoto a correspondência precisa vir de uma entrada serverUrl, e serverName só conta quando não existe nenhuma entrada serverUrl. A mesma relação vale entre servidores stdio e serverCommand. Trate isso como conveniência, não como fronteira de segurança.

Os padrões falham fechados

A distinção entre vazio e não definido é onde os times vão tropeçar:

Além disso, uma configuração malformada ou não verificável é bloqueada em vez de permitida, e quando as políticas vêm de mais de uma camada o servidor precisa passar por todas elas. Esse é o modo de falha inverso ao do registro, e é a razão real para migrar.

Para times que precisam da própria lista, envolva os objetos matcher sob overridable no nível da empresa e depois use a sintaxe simples no arquivo de cada time. Onde houver conflito, a decisão da plataforma vence.

Combine com controle de saída, não substitua por ele

Uma lista de permissão governa quais processos de servidor sobem e com quais endpoints MCP se conversa. Ela não diz nada sobre para onde uma ferramenta se conecta depois que já está rodando, que é uma superfície de controle separada e está coberta em como restringir a saída de rede de um agente de código. Duas camadas, dois modos de falha.

A sintaxe completa dos matchers está na Enterprise managed settings reference.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Voltar