← Back to all free security checks
NEWSJACK — OCT 21, 2026 · CLAUDE CODE v2.1.305 MCP FIX

AI Governance: Which MCP Server Actually Wins in Your Setup?

Published · by Ingenious AI · interactive explainer and checker

AI governance sounds like policy documents. Sometimes it is a name collision: on October 21, 2026, Claude Code v2.1.305 fixed a bug where a cloud/SDK-set MCP server was silently replaced by a same-named server from user settings — the managed definition lost, and nothing told anyone. Paste up to three config blobs below — user config, project .mcp.json, runtime-set servers — and this page resolves, name by name, which definition actually wins in your setup.

Privacy: everything runs locally in your browser; nothing is uploaded. Environment values are never displayed anywhere on this page — only key names are shown, so you can paste real configs without printing your secrets.

Short answer: the one the precedence rules say — when the client obeys them. The resolution order in this model is managed > runtime > project-local > project > user: the most controlled scope that defines a name wins it. The v2.1.305 bug broke exactly that: with a name defined in both runtime and user scopes, the user copy — the least controlled one — silently took over, so 100% of calls to that server name went to an implementation the operator never approved.

AI governance news: what happened on October 21, 2026?

On October 21, 2026, Claude Code v2.1.305 shipped a fix for an MCP configuration bug, per the release notes: a server set by the cloud or SDK layer could be silently replaced by a same-named server defined in the user's own settings. No error, no warning, no log line most users would see — the session simply talked to a different server than the one the deploying layer intended.

Consider what that means in a governed environment. An organization sets an MCP server at the runtime layer precisely so that its implementation — its logging, its restrictions, its data handling — is the one employees' tools use. A stale or hand-edited entry in a user settings file, written months earlier for an experiment, carried the same name. From the fix's description, the user copy won. Every call to that server name went to the unapproved implementation for as long as both definitions existed.

This is a governance failure with no villain: nobody hacked anything, and no prompt was injected. It is configuration physics — multiple scopes, one namespace, and a resolution order that did the opposite of what the scopes' trust levels imply. The checker below implements the intended order (managed > runtime > project-local > project > user) so you can see your own collisions before a client resolves them for you, and it flags the specific trust-inversion shape — user and runtime defining the same name differently — that v2.1.305 was shipped to fix.

What is MCP server shadowing?

MCP server shadowing is what happens when two configuration scopes define a server under the same name with different definitions. The client must pick one; the one it picks is the one that actually runs, and the other becomes a shadow — present in a file someone trusts, describing a server that is not the one answering. Shadowing is dangerous precisely because every individual file looks correct: the user config is a valid definition, the runtime config is a valid definition, and only the resolution across scopes reveals that they have been fighting over one name.

Paste your scopes — get the winner table

Paste any combination of the three blobs (each is a JSON object with an mcpServers map, or a bare name-to-server map). The resolver applies the precedence model locally and renders the winner per server name, the scopes it shadows, and trust-inversion warnings. Environment values are never displayed — keys only. Leave a scope empty if you do not use it, or load the samples to see the v2.1.305 shape reproduced.

Honest scope note: this resolver implements the stated precedence model — managed > runtime > project-local > project > user — for the three paste-able scopes. Individual clients have historically resolved differently (that is the entire lesson of v2.1.305), project-local files are folded into the project blob here, and managed policy delivered out-of-band cannot be pasted. Treat the table as the intended resolution, then verify your client's actual behaviour. The full tool is the open-source mcp-server-shadow-auditor repo by Ingenious AI, which scans config files on disk across scopes.

The precedence model this page implements

RankScopeWhy it ranks there
1 (wins)Managed policySet by the organization, not the user or the project. Governance means this layer cannot be overridden by anything below it.
2Runtime-set (cloud / SDK)Injected by the deploying layer for this session — the layer that knows the environment it is running in.
3Project-localChecked into or generated for one workspace; narrower than the project file shared with a team.
4Project (.mcp.json)Shared by the project; should beat personal settings for project work, and lose to anything the deployer set.
5User configPersonal defaults. The broadest and least controlled scope — which is why a user entry silently winning over a runtime entry is a trust inversion, not a preference.

Shadowed servers? Do this now

If the winner table shows collisions — and especially a trust-inversion risk — work this list in order:

  1. Rename to disambiguate. The permanent fix for shadowing is unique names per scope: a personal filesystem server and a managed one should never share a name in the first place.
  2. Delete stale user entries. Most user-config collisions are experiments that outlived their purpose. If a server is now provided by the runtime or project layer, remove the user copy entirely.
  3. Verify the client's real resolution. The October 21, 2026 fix exists because one major client's behaviour differed from the model. After cleaning up, start the client and confirm from its own server list which definition is live for each name.
  4. Pin managed names in policy. Where your tooling allows managed policy, reserve the names of governed servers there, so lower scopes cannot redefine them at all.
  5. Audit env keys, not values. For each winning server, list the environment keys it receives (this page shows keys only, never values) and confirm each is one the winning implementation is supposed to hold.
  6. Re-run on every config change. Shadowing is created one paste at a time. The resolver takes a minute; run it whenever a scope gains a server.
FROM INGENIOUS AI
BreachHunter hunts the breaches behind stories like this — exposed data, leaked credentials and supply-chain fallout — before they become your incident.
All 11 platforms: DisclosureGuard  ·  ModelMinder  ·  TermsWatch  ·  Vibe-Code Audit  ·  Rogue-Agent Defense  ·  BreachHunter  ·  ChatBreaker  ·  Agent Flight Recorder  ·  Agent Auth Gateway  ·  DomainGuard  ·  ContentCraft AI
Our platforms are being upgraded — get early access now:
Get early access on WhatsApp →
Share this check: XLinkedIn

Frequently asked questions

What did Claude Code v2.1.305 fix about MCP servers?

Per the October 21, 2026 release notes, v2.1.305 fixed a configuration bug in which an MCP server set by the cloud or SDK layer could be silently replaced by a same-named server from the user's own settings. The managed definition stopped being the one that ran, with no visible error — the session simply used the user-configured implementation instead.

What is the correct precedence order for MCP server configs?

The model this page implements is managed policy first, then runtime-set servers, then project-local, then the project .mcp.json, then user config. The principle is that more controlled scopes override less controlled ones. The v2.1.305 incident mattered because the effective order inverted that principle for one name: the least controlled scope won.

How do I check which of my MCP servers is shadowed?

Collect every scope that can define servers — user config, project .mcp.json, any runtime or SDK-injected set — and compare the names. A name defined in two scopes with different commands is a collision; the resolver on this page renders the winner per the precedence model and flags user-versus-runtime differences as trust-inversion risks, showing environment key names only, never values.

Why is a shadowed server a governance problem if both definitions are mine?

Because governance is about which definition actually runs. A runtime-set server usually exists to guarantee logging, restrictions or data handling; a stale user entry with the same name can quietly replace it, as in the v2.1.305 case, so the controls everyone believes are active are not the controls in the session. Intent does not matter to the resolution algorithm.

What does the full auditor check that this page cannot?

This page resolves the blobs you paste under the stated model. The full mcp-server-shadow-auditor scans the actual config files on a machine — every scope a client reads, including ones you forgot exist — and reports the client's effective resolution per name. Use it to find scopes you did not know were in play.

Built by Ingenious AI — reporting on third-party product changes. The Claude Code v2.1.305 fix is summarized from the October 21, 2026 release notes.
This page is general information, not legal advice. This page never displays, stores, or transmits your environment values or pasted text. Full tool: mcp-server-shadow-auditor on GitLab — part of the Ingenious AI toolkit.