Unsanctioned MCP servers surface only at runtime and inherit real access inside your connected apps, so catching them means watching what an agent actually reaches, not what a config page claims.
Unsanctioned MCP servers are Model Context Protocol endpoints a developer or business user stood up without review, usually to hand an agent new tool access. - Configuration scans miss them. The tools inside an MCP server exist only at runtime, at the moment an agent calls them. - Presence is not risk. Rank each server by blast radius: which service account it runs as, and which tables, objects, and actions it can actually reach inside connected apps. - The dangerous pattern is a fixed-credential setup where any invoker inherits the creator's access, turning a low-privilege user into a machine insider. - Sanctioned and unsanctioned servers belong in one view, next to the agents and the non-human identities that call them. - Discovery and governance are available today; autonomous blocking is live for Microsoft Copilot and Claude, and on the roadmap for other platforms.
To catch unsanctioned MCP servers, you first have to agree on what makes one unsanctioned, and the answer is not technical. An MCP server is unsanctioned when it runs in your environment without security review, without an approval record, and without a named owner. It might sit on a developer laptop, inside Cursor, attached to a Copilot Studio agent, or wired into an n8n workflow. The binary is identical either way. What changes is the governance state around it.
Three practical signals put a server on the wrong side of the line:
Two byte-for-byte identical servers can land on opposite sides of that line, one because a human reviewed it and one because nobody did. So detection has to be tied to your approval record, not a signature list.
A sanctioned server has an owner, an approval record, a known tool set, a documented data scope, and a place in your inventory. An unsanctioned one has some or none of that.
| Attribute | Sanctioned | Unsanctioned |
|---|---|---|
| Owner | Named, accountable | Unknown or orphaned |
| Approval | Documented review | None |
| Tool inventory | Enumerated and versioned | Discovered at runtime, if at all |
| Credential scope | Least privilege, reviewed | Whatever the creator set |
| Data access | Mapped to policy | Unmapped |
| Change control | Version controlled | Ad hoc |
The same server can read as sanctioned in one platform and unsanctioned in another. Governance state is per environment, not per binary. That is why a static allowlist of "approved" servers falls apart the moment the same tool shows up in a tenant you do not manage.
Developers add MCP servers the way they used to add packages. It takes minutes. Approval takes weeks. That gap is the whole story.
The volume behind the gap is real. Agents move roughly 16 times more data than the humans they work alongside, and studies of agent estates put around 90 percent of them in an over-permissioned state. Every new agent needs tools, every tool needs a connector, and MCP is the standard developers reach for. Counts climb quietly, per team, without a central record.
Each new server is a new bearer-token holder, a new set of embedded credentials, and a new potential path from an agent to sensitive data. Change control assumes weeks of lead time. Agent teams ship in an afternoon. Review as a gate has already lost that race. Detection at runtime is what replaces it.
Usually a developer or a business user adds a server to give an agent one more capability. Inside most agent builders it is a few clicks, and no admin approval is required by default. The person adding it is solving a delivery problem, not making a security decision, which is exactly why the server never reaches a reviewer.
Discovery has to be cross-platform, or you are grading your own homework. A server registered in Copilot Studio, another in Cursor, and a third in a Bedrock agent are three separate problems unless one place sees all of them.
A working discovery process:
The output is not a list. It is a graph that connects agents, identities, servers, tools, and the downstream app reach behind each one.
Security teams often ask how to detect unauthorized MCP servers on the network. You do not. Network detection fails for concrete reasons:
Runtime truth comes from the platforms themselves, through native APIs and webhooks, not from a packet capture.
Two servers can sit next to each other in inventory and carry completely different exposure. Rank by effective access, not theoretical configuration. Effective access is what the server can actually do once every entitlement resolves inside the apps it touches: which service account it runs as, and which specific tables, objects, and actions that account can read or write. Theoretical configuration is what the setup file claims. The two disagree constantly, and only the runtime view catches the difference. That correlation, from an agent's activity to its real reach inside the third-party app, is the moat. A vendor's config page cannot tell you a low-privilege agent is one tool call away from your entire customer object.
A useful ranking signal set:
The point of ranking is triage. Security teams do not need 500 tickets. They need the three servers that could move customer records this afternoon.
Yes. By definition it holds tokens or credentials nobody in security has reviewed. If those credentials touch production data, the server can move that data anywhere its tool calls allow. Realistic paths look mundane: a developer wires a server to a CRM with their own admin session, and every invoker inherits admin reach; a community-shared server quietly forwards prompts and results to an outside endpoint; an orphaned server keeps running after its creator leaves, credentials still valid. None of these need a novel exploit. The 2025 UNC6395 campaign against the Salesloft Drift integration reached roughly 700 organizations by abusing exactly this class of connected access, not a zero-day. The missing controls are an inventory and runtime observation, and both are common gaps.
Split dashboards create split accountability. Every server, sanctioned or not, needs to appear in one inventory next to the agents that use it and the identities behind those agents.
One view here means a single screen shows:
Without that, servers live in the seam between teams: IT owns the platforms, security owns the risk, developers own the servers, and the unsanctioned ones fall through the middle. A unified inventory is what lets an owner answer "what would this reach if it went rogue" in one look instead of a week of correlation.
Discovery without enforcement is expensive logging. The operational goal is stopping an unauthorized tool call before it completes, and doing it without inserting an inline proxy that adds latency and a new failure mode in the traffic path.
Obsidian works as a decision engine, an Intel Inside model rather than a hop in the network. Runtime signals feed a policy engine; when a call violates policy, the decision fires back through the platform's own native hook, which cancels the action. No packet interception, no new choke point.
Here is the honest state of that capability today. Discovery, inventory, and blast-radius ranking are available now across the platforms listed above. Autonomous blocking is live today for Microsoft Copilot and Claude. For Agentforce, Snowflake Cortex, ServiceNow and Now Assist, Moveworks, Bedrock, Vertex, and n8n, the same enforcement is on the roadmap, delivered as each platform's hooks mature. Until then, those platforms are covered by discovery and governance, and enforcement is where the roadmap is headed, not where it is today.
Act in order:
Any organization running AI agents on platforms like Copilot Studio, Agentforce, Bedrock, Vertex, ServiceNow, Snowflake Cortex, or n8n. If your developers use Cursor or Claude Desktop, add those environments too. The larger the agent footprint, the higher the shadow server count.
A developer or business user adds one to give an agent a new capability. It takes minutes inside most agent builders, and no admin approval is required by default, so the server never reaches a reviewer.
No. An inline proxy adds latency and a new failure mode. Runtime observation through native platform hooks sees the same activity without sitting in the traffic path, and feeds enforcement decisions back to the platform rather than intercepting calls itself.
No listed owner, no approval record, a connection to production apps without change control, fixed-credential authentication, an orphaned creator account, or presence in a tenant that security does not manage.
Connector-based tools inspect one platform's configuration in isolation. The gap they leave is runtime correlation between what an agent is configured to do and the effective access it actually resolves to inside connected apps, across every platform at once. That correlation is what ranks servers by real blast radius instead of presence.
Local and on-device agents are not covered at the runtime layer. Browser telemetry covers enterprise application contexts. On-prem and local agents remain a separate problem to solve.