DevelopmentNew Release14 min readPublished August 10, 2026

Enterprise managed settings · 2 new keys · fail closed by design

GitHub Gives Admins an MCP Allowlist and an ROI Tab

On August 6, GitHub gave enterprise owners two new keys — allowedMcpServers and deniedMcpServers — that decide which MCP servers Copilot clients may run at all. A day later the impact dashboard gained a return-on-investment section and the usage-metrics API started breaking agent activity out by individual agent. Together they answer the two questions platform teams could not answer: what can this agent reach, and what did it give back.

DA
Digital Applied Team
Senior strategists · Published Aug 10, 2026
PublishedAug 10, 2026
Read time14 min
SourcesGitHub changelog & docs
New managed-settings keys
2
allowedMcpServers · deniedMcpServers
GA Aug 6, 2026
Matcher types
3
serverUrl · serverCommand · serverName
1 is not a security control
Clients enforcing it
3
Copilot app · Copilot CLI · VS Code
Kimi K3 on Business/Enterprise
Off
admin must enable the policy

GitHub shipped an MCP allowlist for enterprise Copilot on August 6, 2026, and it lands in the place governance features are supposed to land: the enterprise managed-settings file, not a per-developer preference. Enterprise owners can now name which Model Context Protocol servers Copilot clients are allowed to run — and, just as importantly, which ones they are not.

The mechanism is two new keys, allowedMcpServers and deniedMcpServers, added to copilot/managed-settings.json in the source organization’s .github-private repository and committed to the default branch. That is the whole control surface. It is deliberately unglamorous, and it answers “what can this coding agent reach?” with a file under review rather than a policy document.

This guide covers what the allowlist actually enforces and where it stops, the second and weaker MCP-restriction mechanism GitHub still runs alongside it, the impact dashboard’s new ROI section and the caveat GitHub attached to it, the usage-metrics API field that finally names individual agents, and the model launch the same week that shows why an admin-side control matters. Everything below comes from GitHub’s own changelog entries and documentation.

Key takeaways
  1. 01
    The allowlist lives in enterprise managed settings.Two new keys, allowedMcpServers and deniedMcpServers. They live in copilot/managed-settings.json inside the source organization's .github-private repo, committed to the default branch — an enterprise-tier control, not a self-serve toggle every Copilot user gets.
  2. 02
    Three matchers, and one of them is not a control.serverUrl matches remote HTTP/SSE servers with wildcards and URL canonicalization; serverCommand matches local stdio servers by exact command and arguments; serverName matches the user-assigned label and GitHub says it is a convenience, not a security control.
  3. 03
    Enforcement is narrower than the headline.GitHub states the allowlist is enforced on the Copilot app, Copilot CLI and VS Code. Other Copilot surfaces are not named in that entry, so treat them as uncovered until GitHub says otherwise. Policies fail closed when a configuration is malformed or unverifiable.
  4. 04
    The ROI section is a reporting surface, not proof.GitHub calls the cost figures estimates based on AI credit consumption, calls the salary selector a modeling input rather than actual payroll data, and tells admins to treat the metrics as directional. Read it as a conversation starter with finance, not evidence.
  5. 05
    Kimi K3 arriving off by default is the whole argument.A new third-party-hosted model became available across Copilot the same week and shipped switched off for Business and Enterprise until an admin enables the policy. Default-off plus an allowlist is what governance looks like in practice.

01What ShippedTwo keys, three matchers, and a fail-closed default.

GitHub’s changelog entry states it plainly: enterprise owners can now centrally control which Model Context Protocol servers GitHub Copilot clients are allowed to run, using the new allowedMcpServers and deniedMcpServers keys in enterprise managed settings. The configuration is added to copilot/managed-settings.json in the source organization’s .github-private repository and committed to the default branch — which means the allowlist is a reviewable, diffable artifact with an audit trail, not a setting somebody flipped in a console.

Three matcher types decide what a rule applies to, and the third one carries a warning in GitHub’s own copy.

Remote servers
serverUrl
HTTP / SSE endpoints

Matches remote servers, supports wildcards, and canonicalizes URLs to prevent evasion — so a rule cannot be sidestepped by a trailing slash or an equivalent-but-differently-written URL.

Wildcards supported
Local servers
serverCommand
stdio processes

Matches local servers by exact command and arguments. This is the matcher that covers the highest-risk case: a developer pointing Copilot at an arbitrary local process on their own machine.

Exact command + args
Labels only
serverName
user-assigned label

Matches the label a user assigned to a server. GitHub describes it as supplied as a convenience, not a security control — a name is chosen by the person you are trying to constrain, so do not build a policy on it.

Convenience, not a control

The failure mode matters as much as the matchers. GitHub says the policies fail closed, so a configuration that is malformed or cannot be verified blocks the connection rather than waving it through. That is the correct default for a security control and the opposite of how most developer-tooling config behaves, where a broken file usually means “ignore this and carry on.”

“Policies fail closed, meaning a malformed or unverifiable configuration is blocked rather than allowed.”— GitHub Changelog, MCP allowlists in enterprise managed settings, August 6, 2026

It is worth being clear about what this control is filling in. The Model Context Protocol specification is explicit that the protocol does not enforce security itself — session handling, consent, audience validation and server-trust decisions are left to implementers. The spec’s security guidance does list allowlists for trusted domains among the trust policies an authorization server can apply, though that passage is about client-side trust policy rather than an admin allowlisting servers, so it is a parallel rather than a precedent. GitHub is not duplicating a built-in protocol control here; it is closing a gap MCP deliberately leaves to the people deploying it. If you are building on the server side of that boundary, our MCP server security best practices guide covers the controls that sit underneath an allowlist.

02The Detail Nobody ReportedGitHub runs two MCP restriction mechanisms right now.

Read the changelog entry alone and you would conclude that “MCP allowlists” is one feature. Read GitHub’s documentation and a second, older mechanism appears: a restriction based on the MCP registry, exposed as a registry-only style restriction, which GitHub’s docs label public preview and describe as not the recommended method for restricting access to MCP servers. The docs are unambiguous about which one to use — the recommended method for creating an allowlist is the enterprise’s managed-settings.json file.

The difference is not cosmetic. The registry-based mechanism matches on server name or ID only, and GitHub’s own reference page states that this enforcement can be bypassed by editing configuration files, and that strict enforcement preventing installation of non-registry servers is not yet available. That is a speed bump, not a boundary. The managed-settings mechanism is the one with URL canonicalization, exact stdio command matching and fail-closed behavior.

Generally available
Enterprise managed-settings.json

Matches on canonicalized server URL, exact stdio command and arguments, or label. Fails closed on malformed or unverifiable configuration. Lives in a repo, so every change is a reviewable commit. GitHub's docs call this the recommended method.

Use this one
Public preview
MCP registry restriction

Restricts to servers present in the registry, matching on name or ID only. GitHub's docs state this can be bypassed by editing configuration files and that strict enforcement blocking non-registry servers is not yet available — and that it is not the recommended method.

Do not rely on it
Do not merge the two in your rollout doc
If your internal write-up says “GitHub MCP allowlists are now GA,” it is half right and dangerously imprecise. The managed-settings mechanism is generally available and is the one with real matching. The registry-based restriction is a separate, weaker, public-preview path that GitHub itself steers you away from. A platform team that configures the second one and reports the first to its security reviewers has documented a control it does not have.

03CoverageThe control is real. Its surface area is narrower than the headline.

GitHub names the covered clients explicitly: the allowlist is currently enforced on the GitHub Copilot app, Copilot CLI and VS Code. Copilot runs in considerably more places than that — JetBrains IDEs, Eclipse, Visual Studio, Xcode, and GitHub’s own cloud agent among them — and the August 6 entry does not name any of them as enforcing this policy. The honest reading is that MCP servers reachable from an unenforced client remain reachable, whatever the allowlist says.

The older registry-based mechanism has its own compatibility matrix with per-client version floors — Copilot CLI from v1.0.11 and VS Code from v1.109.3, among others, with the Copilot cloud agent supporting neither display nor enforcement. Those floors belong to the preview mechanism, not the managed-settings one, and mixing them up in a compliance write-up is an easy mistake to make when both features share the phrase “MCP allowlist.”

The practical consequence is a scoping decision, not a blocker. An allowlist that covers three of your surfaces is worth having; a control map that claims it covers all of them is worse than having nothing, because it retires a risk on paper that is still live in production. Pair the allowlist with the same checks you would run on any server you connect — our 75-point MCP server security checklist treats an enterprise allowlist as one control among many rather than the answer.

What to write down
Record three facts in your control register, not one: the mechanism (managed-settings.json, not the registry preview), the matcher you actually configured (serverUrl or serverCommand — never serverName alone), and the exact client list you believe is enforced. Re-verify the client list on each Copilot release rather than assuming coverage only grows.

04MeasurementThe ROI section, and the caveat GitHub attached to it.

A day after the allowlist, the Copilot impact dashboard gained a “Potential return on investment” section that connects what an organization spends on Copilot to the pull request output it gets back. The comparison it draws is the interesting design choice: it does not compare Copilot against no Copilot. It compares two adoption cohorts inside the same organization.

Card 1
Passive users · Phase 1
chat and code completions

Developers working primarily in chat and code completions. This is the baseline cohort — the people who have Copilot and use it the way it worked two years ago.

Baseline cohort
Card 2
Phase 2 · Phase 3
agent-first developers

The agent-first cohort. Each card surfaces cost per developer per month, that cost as a share of developer compensation, and average pull requests per developer per month.

Agent-first cohort

Three metrics appear on each card: cost per developer per month (the average monthly Copilot cost per developer in that group, derived from actual AI credit consumption), percentage of payroll per month (that cost expressed as a share of developer compensation), and pull requests per developer per month. A salary selector lets an admin pick a compensation band, and the cost-derived metrics recalculate instantly.

And then GitHub undercuts its own feature, in the same entry. The cost figures are described as estimates based on AI credit consumption; the salary selector is described as a modeling input rather than actual payroll data; and admins are told to treat the metrics as directional. That is a vendor shipping a spend-versus- output dashboard and simultaneously telling you not to over-trust it — which is unusually honest, and which means the dashboard is a reporting surface, not evidence of return.

Read the ROI tab correctly
The dashboard does not prove Copilot pays for itself. GitHub’s own copy calls the cost figures estimates, calls the salary input a modeling input rather than actual payroll data, and instructs admins to treat these metrics as directional. Pull requests per developer is also an output count, not a value measure — a cohort that ships more PRs may be shipping smaller ones. Use the tab to start a conversation with finance about where credits are going, and bring your own outcome data to finish it.

05AttributionThe usage API finally names individual agents.

The second August 7 change is smaller in the changelog and larger in practice: the Copilot usage metrics API now reports agent app activity, broken out by individual agent. Before this, third-party agent activity inside GitHub workflows was an aggregate. Now it has names.

The new field is totals_by_3rd_party_agent, an optional array with one entry per recognized agent app. Each entry carries a display name, a stable identifier, a count of agent-app job starts a user initiated, and — at aggregated report level only — a session count. GitHub explicitly recommends grouping on the stable identifier rather than the display name, because display names can change between periods and a report keyed on them will silently split one agent into two.

Report scopes
Where the field appears
4

Enterprise, organization, enterprise-user and organization-user reports all carry the new per-agent breakdown, so the same question can be asked at company level or per developer.

Same field shape
Time windows
1-day and 28-day
2

Both reporting windows include the agent breakdown, which means you can watch a spike the day it happens and still trend it over a month without stitching two sources together.

Both windows
Join key
Group on the agent ID
1

Each entry has a display name and a stable agent identifier. GitHub recommends grouping on the identifier, not the name — display names can change, and a name-keyed report quietly double-counts when they do.

Not the display name

One distinction is easy to get wrong and worth stating outright: “agent app activity” here means third-party coding agents integrated into GitHub workflows — the changelog names agents from partners like Claude and Codex as examples — not Copilot’s own native agent mode. The word “agent” is doing at least three jobs across this release wave, and a metrics dashboard that conflates them will produce a number nobody can defend in a budget review.

Access to both the ROI section and the usage metrics is gated the same way: enterprise owners and billing managers, organization owners, and anyone holding a custom organization or enterprise role that grants the view-Copilot-metrics permission. That is a narrower group than the people who will be asked about the numbers, so plan for someone to export and redistribute.

06Why It MattersA new model landed the same week — switched off.

On August 6, the same day as the allowlist, Kimi K3 became available in GitHub Copilot, hosted by GitHub on Fireworks AI and rolling out to Copilot Pro, Pro+, Max, Business and Enterprise across VS Code, Visual Studio, the Copilot CLI, the cloud agent, the Copilot app, github.com, GitHub Mobile, JetBrains, Xcode and Eclipse. That is close to every surface Copilot occupies.

The governance-relevant sentence is not about the model. GitHub states that Kimi K3 is off by default for Copilot Business and Copilot Enterprise, and that plan administrators must enable the Kimi K3 policy in Copilot settings before anyone in their organization can select it. A brand-new, third-party-hosted model arrived across an entire developer platform and organizations had to opt in rather than opt out.

The concrete case for an allowlist
Read the two August 6 entries together and the argument writes itself. A capable third-party model became one click away from every developer on the platform, and the only thing standing between an organization and that click was an admin-side default. MCP servers are the same shape of problem with a wider blast radius, because a server is not just a model choice — it is a tool with credentials, network reach and a file system. The allowlist is the default-off switch for that class of decision.

On price, GitHub lists Kimi K3 in Copilot at $3 per million input tokens, $15 per million output tokens and $0.30 per million cached input tokens, billed at provider list pricing under usage-based billing. Two ratios fall straight out of those published rates and are worth internalizing before you enable anything: output costs five times what fresh input costs ($15 ÷ $3), and cached input costs one tenth what fresh input costs ($0.30 ÷ $3.00). A verbose agent loop is not expensive because it reads a lot; it is expensive because it writes a lot. We are not reviewing the model itself here — our hands-on look at Kimi K3 covers that. The changelog’s own capability framing is unaccompanied marketing copy on that page, so treat it as such.

There is a mirror image in the same window worth one sentence: when GitHub Code Quality reached general availability in July it silently created a ruleset that auto-requested Copilot review on every pull request, and on August 7 GitHub reversed that after feedback that adding a reviewer should be the team’s choice, disabling the auto-request settings while leaving manual Copilot review available. One agent defaulted off, another defaulted on and then off again. The industry is still calibrating what should be opt-in.

07Release MapSeven changes in two days, and what each one does not do.

Most coverage of this window treats each change as a standalone item. Assembled under a governance lens they read as one release, and the useful column is the last one — what each change does not do. That column is where internal rollout docs go wrong, because a changelog headline is a capability claim and a control register needs a boundary. One row is not a change from this window: the older registry restriction sits in the table for comparison, because it is the mechanism the new allowlist is easiest to confuse with.

GitHub’s seven August 6–7, 2026 agent-governance changes plus the older MCP registry restriction they sit alongside, grouped by MCP restriction mechanisms, measurement surfaces and defaults, showing the date, status and the boundary of each row.
ChangeDateStatusWhat it does not do
MCP restriction — two mechanisms, not one
MCP allowlist via managed-settings.jsonAug 6, 2026Generally availableCover every Copilot client. GitHub names the Copilot app, Copilot CLI and VS Code as enforcing it; other surfaces are not named in that entry.
MCP restriction via the MCP registryAt the time of writingPublic preview — GitHub’s docs call it not the recommended methodHold a determined user. Matching is name/ID only, which GitHub’s docs say can be bypassed by editing configuration files; strict enforcement is not yet available.
Measurement surfaces
Copilot impact dashboard — ROI sectionAug 7, 2026ShippedProve a return. GitHub calls the cost figures estimates, the salary selector a modeling input rather than payroll data, and tells admins to treat the metrics as directional.
Usage metrics API — agent app activityAug 7, 2026ShippedReport Copilot’s own agent mode. The field covers third-party agent apps; the entry names partner agents such as Claude and Codex as the activity in scope.
Defaults, models and workflow
Kimi K3 in GitHub CopilotAug 6, 2026Rolling out to Pro, Pro+, Max, Business, EnterpriseTurn itself on for Business and Enterprise. Plan administrators must enable the Kimi K3 policy before anyone can select it.
Copilot code review effort levelsAug 7, 2026Generally available as Lite and BalancedChoose depth silently. Lite suits straightforward changes, Balanced invokes a higher-reasoning model, and orgs set a default that repositories inherit.
Organization-level pull request limitsAug 6, 2026ShippedCap contributors with write access. It limits how many open pull requests a user without write access can hold, now across all repositories in an org instead of per repository.
Code Quality auto-adding Copilot as reviewerAug 7, 2026ReversedStill auto-request review. Three ruleset settings were disabled after feedback; the ruleset remains in place and deletable, and manual Copilot review is unaffected.

Look at the grouping rather than the rows. In two days GitHub shipped a restriction mechanism, two measurement surfaces, a default-off model policy, an explicit effort setting for automated review, a cap on inbound contribution volume, and a reversal of an agent that had been switched on without asking. That is not a feature wave. That is a platform discovering that the interesting questions about coding agents are no longer about capability — they are about reach, cost attribution and defaults. The same pattern is visible one layer up the stack, where the same supply-chain logic applies to skill packs.

08RolloutFour decisions to make before you write the file.

The allowlist is a small file with large consequences, and the failure mode is not a broken build — it is a developer whose working setup stops working with no obvious explanation. Sequence it like any other fail-closed control.

Inventory first
Find out what is actually connected

You cannot allowlist what you have not enumerated. Collect the MCP servers developers are already running — remote URLs and local stdio commands both — before writing a single rule. A fail-closed policy applied to an unmapped estate is an outage.

Enumerate, then write rules
Pick the matcher
URL or command, never the label

Write rules against serverUrl for remote servers and serverCommand for local ones. GitHub says serverName is a convenience rather than a security control, because the label is chosen by the person the policy constrains.

serverUrl + serverCommand
Scope honestly
Name the clients you actually cover

Enforcement is stated for the Copilot app, Copilot CLI and VS Code. Record that list verbatim in your control register and re-check it each release rather than assuming every Copilot surface inherits the policy.

Document the gap
Pair with defaults
Review model and agent policies too

The allowlist governs what tools an agent can reach. Model policies govern which agent runs at all — and Kimi K3 shipping off by default for Business and Enterprise shows those two reviews belong on the same agenda, not in different quarters.

One review, both surfaces

The forward-looking read is straightforward. Enterprise controls for coding agents are converging on the same three primitives everywhere you look: an allowlist for what the agent can reach, a policy switch for which models are selectable, and a metrics surface that attributes spend to a named actor. GitHub now has all three; Cursor’s Organizations layer reached for the same shape from a different starting point. Expect the remaining Copilot clients to pick up allowlist enforcement, and expect the per-agent usage field to become the join key that finance teams use to allocate AI spend to teams the way they already allocate cloud spend.

The part that will not be solved by a vendor is the operating model around it — who owns the allowlist, how a developer requests an addition, what evidence a new server needs before it goes in, and how often the client-coverage list gets re-verified. That is governance design, not configuration, and it is the work we do with clients in our AI transformation engagements.

09ConclusionReach and return, in the same release window.

GitHub, August 2026

An allowlist you can review in a pull request beats a policy nobody enforces.

The MCP allowlist is the more durable of the two announcements. It puts the question “what can this agent reach?” into a file that lives in a repository, gets reviewed like code, matches on canonicalized URLs and exact commands, and fails closed when it cannot verify what it is looking at. Those are the properties a security control needs. The caveats — enterprise-tier only, three named clients, and a second weaker mechanism still wearing the same name — are scoping details to write down, not reasons to wait.

The ROI section is the more tempting and the more slippery. GitHub built a spend-versus-output view and then told admins in the same breath that the cost figures are estimates, the salary input is a model rather than payroll, and the whole thing is directional. Taking that at face value is the right move. It is a reporting surface that makes credit consumption legible per cohort — genuinely useful for the conversation with finance, and not a proof of return.

Read the week together and the through-line is defaults. A capable new model arrived across every Copilot surface switched off for Business and Enterprise. An automated reviewer that had been switched on without asking got switched back off after pushback. And the flagship governance feature blocks by default when it is unsure. The teams that get value from coding agents over the next year will be the ones who treat those defaults as a design decision they own, rather than a setting they inherit.

Govern coding agents without slowing developers down

An agent you cannot see the reach of is a control gap wearing a productivity story.

We help engineering and platform teams put real controls around coding agents — MCP server inventories, allowlist design, model policy reviews, and the spend attribution that makes the budget conversation defensible.

Free consultationExpert guidanceTailored solutions
What we work on

Agent governance engagements

  • MCP server inventory across every developer surface
  • Allowlist design — matcher choice and fail-closed testing
  • Model policy reviews before a new model is selectable
  • Per-agent spend attribution and cohort reporting
  • Operating model — who owns the file and the exception path
FAQ · GitHub MCP allowlists

The questions platform teams are asking this week.

GitHub added two new keys to enterprise managed settings — allowedMcpServers and deniedMcpServers — that let enterprise owners centrally control which Model Context Protocol servers GitHub Copilot clients are allowed to run. The configuration goes into copilot/managed-settings.json in the source organization's .github-private repository and is committed to the default branch, so every change is a reviewable commit rather than a console toggle. Rules can match three ways: serverUrl for remote HTTP or SSE servers, with wildcard support and URL canonicalization to prevent evasion; serverCommand for local stdio servers, matched by exact command and arguments; and serverName, which matches a user-assigned label and which GitHub describes as a convenience rather than a security control. The policies fail closed, so a malformed or unverifiable configuration blocks rather than allows.
Related dispatches

Continue exploring agent governance.

Development

Copilot SDK Agent Lands in Visual Studio: Public Preview

Visual Studio's July 2026 update ships an Agent (Preview) built on the GitHub Copilot SDK — the same SDK behind the Copilot CLI. What teams can build now.

July 30, 2026 · 10 minRead
Development

Cursor Organizations: Govern Enterprise AI Coding at Scale

Cursor's new Organizations layer adds per-team budgets, model-tier segmentation, and SCIM Groups. How it compares to GitHub Copilot Enterprise governance.

June 6, 2026 · 12 minRead
Development

Vercel's Skill Packs Make Agent Skills a Package Ecosystem

Vercel's skill packs bundle agent skills behind one install command and an update command, with no versioning, checksums or provenance documented.

August 10, 2026 · 14 minRead
Development

Inside Muse Code: Subagent Fan-Out, Skills, Event Logs

Muse Code fans work out to a git worktree per subagent — opt-in, in git repos — records every step in an append-only event log, and ships four built-in skills.

August 6, 2026 · 18 minRead
Development

API Error Handling and Resilience: 2026 Reference Guide

A 2026 engineering reference to API error handling: RFC 9457 problem details, retries with backoff and jitter, idempotency keys, and circuit breakers.

June 19, 2026 · 12 minRead
Development

Marketing Data Pipelines in 2026: An ETL-to-Activation Guide

The modern marketing data stack splits ingestion, transformation, and activation into composable layers. A 2026 build-vs-buy guide to ETL, dbt, and reverse ETL.

June 15, 2026 · 12 minRead