TLDR
Agent authentication and authorization is a stack of controls, not one setting: which identity the process runs as, what credentials each tool call carries, and which actions need a human in the loop. The exam trap is assuming MCP is secure by default - MCP authorization is optional by spec and transport-scoped (HTTP transports SHOULD use OAuth 2.0; STDIO pulls credentials from the local environment), so an unaudited server can legally expose tools with zero auth. MCP authorization spec
What it is
For an architect, agent auth is not one control but a stack: the identity the agent process runs as, the credentials each tool call carries to reach external systems, and what a human must approve versus what runs unattended. Traditional RBAC assumes a mostly-static permission set; agentic systems break that assumption because an LLM can chain tool calls at machine speed, across systems, without a human in every loop - so access analysis has to reason about the agent's full reachable capability surface, not just its nominal role.
That stack spans multiple platform layers, and none of them alone secures a multi-tool agent: MCP's authorization spec governs server-to-server auth, the Claude Agent SDK's permission rules govern what a coding/agentic harness is allowed to invoke, and the Managed Agents API's per-tool policies govern server-executed tools specifically. These are separate control mechanisms for separate deployment models, not layers of one combined stack you configure together on a single tool call - an architect has to know which runtime a given agent actually runs on before reaching for either one. An architect who audits only one layer, or who assumes they compose freely, has not closed the gap this objective tests.
How it works
MCP authorization is transport-scoped, not universal. HTTP-based MCP transports SHOULD implement OAuth-based authorization - MCP servers MUST expose OAuth 2.0 Protected Resource Metadata per RFC 9728 - while STDIO transports SHOULD NOT; they instead pull credentials from the local environment. Critically, MCP authorization is OPTIONAL by spec, so a server can legally expose tools with zero auth. Treat auth requirements differently per transport choice, and audit which servers actually enforce it rather than assuming the spec guarantees it.
The Claude Agent SDK enforces tool access via layered permission rules: allowedTools/disallowedTools, permission modes, and a canUseTool runtime callback. Deny rules from disallowedTools and settings.json always block, even in `bypassPermissions` mode - this is a hard floor, not a default that a looser mode can override. These rules apply when you are running an Agent SDK / Claude Code-based harness that you orchestrate yourself.
Managed Agents API governs tools by execution type, not uniformly, via a separate mechanism. Per-tool permission policies (always_allow, always_ask) apply to server-executed pre-built and MCP tools on a Managed Agents session - a declarative policy set at agent-configuration time, evaluated server-side, not a runtime callback in your own code. Custom, application-executed tools are not policy-governed by the platform - their access control is the integrator's own responsibility. Do not conflate the two mechanisms: PreToolUse hooks and canUseTool are Agent SDK constructs for a self-orchestrated harness; always_allow/always_ask policies are Managed Agents constructs for a server-hosted session - a given tool call is governed by whichever one matches the runtime it actually executes on, not both at once.
Non-human identity is the emerging failure class. Agents holding long-lived API keys, chaining across systems, and acting outside business hours break assumptions baked into human-oriented IAM. The shift is toward short-lived, scoped, auditable credentials per agent/tool pair rather than one shared service-account key, often behind a dedicated agent-governance layer (a policy/identity/audit plane between the agent and every downstream system) so every tool call passes the same check regardless of agent or model.
Secrets and credential lifecycle management spans dev and prod separately (CCDVF-D7-O4). An architect must maintain distinct credential sets per environment - a dev-scoped API key must never be valid against a prod resource, and vice versa - stored in a secrets manager (not committed to source or baked into an agent's system prompt), rotated on a defined cadence, and scoped to the narrowest permission the tool actually needs. Promotion from dev to prod should re-issue credentials rather than copy them forward, so a leaked dev key has no prod blast radius. Identity validation and access-level verification happen at issuance (who/what is this credential for, and what is it allowed to touch) and again at every use.
Authorized-access monitoring is the other half of CCDVF-D7-O4, not an optional add-on. Every credential use should be logged with enough context to answer "which agent, which tool, which environment, when" after the fact - and that log should feed alerting on anomalies (a dev key used against a prod endpoint, a refund tool invoked outside business hours, a spike in denied-permission attempts) rather than sitting unread until an incident forces a manual audit. This is the same non-human-identity monitoring problem as above, applied specifically to the dev/prod boundary this objective names.
Worked example (Agent SDK / self-orchestrated harness). An enterprise support agent runs as a Claude Agent SDK harness that reads a CRM, issues refunds in a billing system, and calls an internal MCP server for order lookups. The architect should NOT grant one shared API key with billing-write scope to the whole agent: CRM/order-lookup MCP tools get read-only, short-lived tokens; the refund tool is gated by a PreToolUse hook that pauses for human approval above a threshold; STDIO-local tools (file/shell access) inherit environment credentials scoped to a sandboxed execution user, never the agent's own broad identity. If the same agent instead ran as a Managed Agents session, the refund gate would be an always_ask per-tool policy configured on the agent, not a PreToolUse hook - the mechanism changes with the runtime, the least-privilege goal does not.

Where you'll see it
Enterprise support agent (Agent SDK)
CRM/order-lookup MCP tools get read-only short-lived tokens; the refund tool is gated by a PreToolUse hook so a human approves above a threshold.
Same agent as a Managed Agents session
The refund gate becomes an always_ask per-tool policy configured on the agent instead of a PreToolUse hook - same least-privilege goal, different mechanism because the runtime differs.
Regulated dev-to-prod pipeline
CCDVF-D7-O4's Security & Safety domain: distinct, re-issued credentials per environment (never copy a dev key into prod), scoped to least privilege, with access-use logging that alerts on anomalies like an off-hours spike in approvals or a dev-issued key touching a prod resource.
Decision tree
Is this MCP tool served over HTTP or STDIO?
Is the agent a self-orchestrated Agent SDK harness, or a Managed Agents session?
allowedTools/disallowedTools, permission modes, and canUseTool/PreToolUse hooks in your own code.always_allow/always_ask policies set at agent configuration time - a different, server-side mechanism, not a hook you write.Is the tool platform-executed (pre-built or MCP) or custom/application-executed?
always_allow / always_ask) if running as a Managed Agents session.canUseTool/PreToolUse hooks, whereas a Managed Agents session must authorize the agent.custom_tool_use event before your app returns the result.Does the action cross a risk threshold (e.g. refund amount, data write)?
PreToolUse hook on an Agent SDK harness, or an always_ask policy on a Managed Agents session - so a human approves before execution.Does the credential or tool cross a dev/prod environment boundary?
How each cert tests this
CCA-P
Architect - Professional (D3 · Integration): tests identifying auth/authz GAPS across an agent's integration surface - which transport requires OAuth, which tools are policy-governed by the platform, and where a shared broad credential violates least privilege.
CCD-F
Developer - Foundations (D7 · Security & Safety): tests concrete implementation - managing secrets, credentials, and API keys across dev and prod environments, identity validation and authentication, access approval and level verification, and authorized-access monitoring.
Question patterns

An enterprise agent connects to an internal MCP server over STDIO for local file operations, and the architect assumes it's protected because 'MCP supports OAuth.' What's the actual security posture?
"the server enforces OAuth 2.0 Protected Resource Metadata by default" is wrong: that's an HTTP-transport SHOULD, and even there it isn't guaranteed - an unaudited server can expose tools with zero auth.A support agent uses one shared, long-lived API key with billing-write scope across CRM lookup, order lookup, and refund tools. Security review flags this. Why?
"rotate the key more frequently" treats the symptom; the fix is short-lived, per-tool, scoped credentials, not faster rotation of one broad key.Which control ensures a `disallowedTools` rule blocks a tool call even when the session is running in `bypassPermissions` mode?
disallowedTools/settings.json always block regardless of permission mode - a hard floor, not a default that bypass can override. The distractor "canUseTool always overrides disallowedTools" inverts the precedence; deny rules win.An architect wraps a refund tool in a Managed Agents policy but forgets the invoice-lookup tool is a custom, application-executed function. What's the access-control gap?
always_allow/always_ask) govern server-executed pre-built and MCP tools; a custom application-executed tool is not policy-governed by the platform - its access control is the integrator's own responsibility. The distractor "the platform applies the same always_ask default to custom tools" is wrong - custom tools fall outside that governance layer entirely.A staging (dev) API key with elevated read/write scope is found still active and reachable from the production Managed Agents deployment three months after launch, because dev and prod shared one credential from day one. What went wrong, and what's the fix?
"rotate the shared key on a schedule" treats the symptom (an old key) without fixing the root cause (one key spans two environments); CCDVF-D7-O4 specifically tests separate dev/prod credential lifecycle, not just rotation cadence.A refund tool's `always_ask` approvals are logged, but nobody reviews them and no alert fires when approvals spike outside business hours. Is the access-control design for this tool complete?
"logging every call is sufficient for authorized-access monitoring" mistakes passive logging for active monitoring - the objective expects alerting on anomalies (off-hours spikes, unexpected environment/key combinations), not just a queryable log.Frequently asked
Is MCP secure by default?
Does a shared API key across tools satisfy least privilege?
Are Agent SDK PreToolUse hooks and Managed Agents always_ask policies the same control?
What does CCDVF-D7-O4 actually expect beyond 'use short-lived credentials'?
Work this with your AI
Work this concept hands-on with Claude Code, Codex, or claude.ai. Copy a prompt, paste it into your assistant, and practise in tandem. Each one keeps you active (explain it back, get drilled, or build) rather than just reading.
- Drill it like the exam (scenario MCQs)Practice in the exam's scenario-MCQ format with trap awareness.
- Explain it back (Feynman)Build durable, transferable understanding of a concept you can half-state.
- Test me, adapting the difficultyActive recall practice on a concept you think you know.
- Check my prerequisites firstBefore studying a concept that keeps not sticking.
- Find the high-leverage 20%When a domain feels too big and you are short on time.
