⟨ INCOMING TRANSMISSION ⟩ 200,000 MCP instances exposed by April 2026 security disclosure (OX Security) · 97M monthly MCP SDK downloads, up from ~2M at launch (Anthropic, Mar 2026) · RSAC 2026: $392M raised in agentic security in one week · EU AI Act fully applicable August 2026 · Microsoft (Apr 2026): MCP tool execution needs a control plane · sources: sentnelops.com/research/mcp-landscape · ⟨ INCOMING TRANSMISSION ⟩ 200,000 MCP instances exposed by April 2026 security disclosure (OX Security) · 97M monthly MCP SDK downloads, up from ~2M at launch (Anthropic, Mar 2026) · RSAC 2026: $392M raised in agentic security in one week · EU AI Act fully applicable August 2026 · Microsoft (Apr 2026): MCP tool execution needs a control plane · sources: sentnelops.com/research/mcp-landscape ·

[ COMPARISON BRIEF ]

Agent identity vs service accounts: same credential slot, different subject.

A service account identifies deterministic code — a program whose behavior was fixed at deploy time, doing the same thing every run. Agent identity names an actor that improvises: an AI agent whose next action is chosen by a model at runtime. Both occupy the credential slot in your architecture, but they identify fundamentally different kinds of subject — and the assumptions that make service accounts work quietly fail when the thing behind the credential can decide for itself.

[ WHAT SERVICE ACCOUNTS ASSUME ]

Service accounts are not a mistake. For the workloads they were designed for, every one of these assumptions holds — which is exactly why the model has worked for decades.

Call patterns are enumerable up front

A deterministic service makes the same calls every run. Whoever integrates it can list exactly which APIs it will touch, grant precisely that, and be done — the privilege question is answered once and stays answered.

Authorization is scopes, decided once

Because the behavior is fixed, a set of scopes attached at deploy time is a complete authorization model. There is no per-call question to ask — the code will only ever do what it was written to do.

Sharing one account is harmless

Ten replicas of the same binary behave identically, so putting them behind one service account loses nothing. Any instance's action is every instance's action, by construction.

Account-level attribution is enough

If the log says the billing-sync account made a call, you know what happened: the billing-sync code ran. The account name and the behavior are the same fact, so attributing to the account attributes to the actor.

[ WHERE AGENTS BREAK THE MODEL ]

An agent's needs are task-dependent, not fixed. The same agent may legitimately need read file this minute and merge pull request the next, because the task was chosen by a model at runtime — so the call pattern cannot be enumerated at integration time, and scopes end up sized for the worst task the agent might ever attempt. Those worst-case scopes then become standing permissions for every task, including the ones that needed almost nothing. (This is the same failure explored in why agents break classic least privilege.)

Sharing breaks next. Put five agents behind one service account and attribution is destroyed permanently — not degraded, destroyed. When something drops a table at 3am, the upstream log shows one anonymous credential, and no amount of after-the-fact forensics can recover which agent made the call, because the information was never recorded.

Prompt injection completes the failure. Injection does not mint new permissions — it converts existing ones. Every scope the account holds is capability a successful injection can exercise, which means a service account sized "to be safe" is precisely the account an attacker most wants an agent to hold.

[ WHAT AGENT IDENTITY ADDS ]

Agent identity is the identity model of AI agent runtime governance: instead of a credential that stands for a fixed behavior, each agent gets a named identity whose permissions are decided per call. SentnelOps enforces this at its proxy in your VPC — every MCP tool call is intercepted, attributed to a named agent, evaluated against that agent's grants, and logged with the decision and the rule matched, in under 15ms p99 with zero data egress.

One identity per agent

Each agent — a Claude Code session, a Cursor workspace, a custom pipeline bot — gets its own identity in the registry. Grants attach to that identity and nothing else, and retiring an agent revokes exactly its access.

Zero permissions, explicit grants

Every agent starts with nothing. Access is added as explicit grants — per agent, per server, per condition — in version-controlled YAML, and any rule can require a human approval instead of standing permission.

A governed lifecycle

An agent identity moves through explicit states — register → approve → activate → suspend → decommission — rather than being a credential you create, rotate, and eventually forget. Suspension cuts access instantly; decommissioning removes exactly one agent's grants.

[ SIDE BY SIDE ]

DIMENSIONSERVICE ACCOUNTSAGENT IDENTITY
Subject it namesDeterministic code, fixed at deploy timeAn actor that improvises per task
Permission modelScopes decided once, at integration timeZero by default; per-call policy against explicit grants
AttributionAccount-level — one credential, many callersPer-agent — every logged action names one agent
Sharing across instancesAssumed harmless — behavior is identicalNever shared — one identity per agent
LifecycleCreate, rotate keys, eventually forgetRegister → approve → activate → suspend → decommission
Blast radius under prompt injectionThe account's full standing scopeCurrent grants only, capped by conditions and approvals
Audit answer to “which automation did this?”Dead-ends at the accountNames the agent

Two identity models for two kinds of subject — fixed code and improvising actors.

[ MIGRATION NOTE: THEY COMPOSE ]

This is not a rip-and-replace. The agent identity layer sits on top of your existing IAM: the systems downstream still see credentials they already understand, while the layer in between attributes each call to a named agent and decides it against that agent's grants before anything downstream is touched. Your service accounts stay exactly where they are for the workloads they fit — deterministic services with fixed call patterns lose nothing by keeping the model that was designed for them.

The migration is scoped to one class of caller: wherever an AI agent currently borrows a service account, give it an identity of its own. Route it through an enforcement point that knows which agent is calling, and the same credential slot starts producing per-agent answers instead of account-shaped dead ends.

Give every agent an identity of its own

Deploy the SentnelOps proxy in your VPC and get your first identified, logged, policy-checked MCP call in under 10 minutes. Scout is free; paid tiers start with a 14-day trial.