Dyer InnovationStart a project

How-To Guides · Certification Study Guide · 2026-07-10

Linux Foundation · AI & ML Track · Beginner

MCPA Exam Prep

Model Context Protocol Associate — a visual-first study guide

Everything on the official blueprint, sized to the exam weights, verified against the live MCP specification — stable 2025-11-25 as the exam baseline, with the incoming 2026-07-28 revision flagged throughout.

Spec currency check — read this first. The current stable protocol revision is 2025-11-25 — treat this as your exam baseline (it's what the exam tests today). The remote transport you must know is Streamable HTTP (2025-03-26); the old HTTP+SSE (2024-11-05) is deprecated; authorization is OAuth 2.1.

A big revision is imminent. 2026-07-28 is a locked Release Candidate (final 28 Jul 2026) — the largest change since launch. It makes MCP stateless: the initialize handshake and Mcp-Session-Id are removed; Tasks & MCP Apps become extensions; Roots/Sampling/Logging are deprecated; resource-not-found moves -32002 → -32602. Throughout this guide, an 2026-07-28 RC flag marks each baseline answer that flips in the new revision. See Spec Watch.

Format
Online, proctored
Multiple-choice, remote proctoring
Duration
120 minutes
Beginner level, no lab
Validity
2 years
12-month eligibility window to sit
Retake
1 included
One free retake with purchase
Prereqs
None required
Knowledge recommended (see primer)
5 domains
Weighted MCQ
Interactions + Security = half the exam

Where the exam weight lives — study time should mirror this

Interactions & Execution Security & Governance Use Cases & Ecosystem MCP Fundamentals Architecture & Components
3 · Interactions & Execution
26%
4 · Security & Governance
24%
5 · Use Cases & Ecosystem
20%
1 · MCP Fundamentals
16%
2 · Architecture & Components
14%
Bars scaled to the heaviest domain (26% = full track). Domains 3 and 4 together are 50% of the exam — this guide gives them the deepest treatment and the most practice questions.

Contents

! · Spec Watch — the 2026-07-28 revision

A major new revision was about to land when this guide was written. Here's exactly where things stood as of 11 Jul 2026, and what to do about it. Update: 2026-07-28 shipped as a final release on 28 July 2026. The MCP Goes Stateless guide covers the final delta.

Current stable
2025-11-25
The exam baseline — study this as authoritative
Release candidate
2026-07-28
Locked (21 May 2026); final publication 28 Jul 2026
Scale
Largest since launch
Headline theme: MCP goes stateless
Exam strategy
Learn both
Answer for stable; know what flips in the RC

How to use this on the exam. The MCPA blueprint is written against the current stable spec (2025-11-25), so if a question turns on the handshake, sessions, or the -32002 code, answer per the baseline. But the 2026-07-28 RC is public and finalizes in weeks — a refreshed exam could adopt it. When a question's wording sounds "stateless / _meta / server/discover / extension," it's testing the new revision. The flags below tell you which is which.

Exam-relevant deltas: 2025-11-25 → 2026-07-28 RC

What changes (and where it hits this guide)
Area2025-11-25 (baseline)2026-07-28 RC
Handshakeinitialize → result → initializedRemoved. Stateless: version + clientInfo + capabilities ride in _meta on every request; new server/discover RPC advertises capabilities
SessionsMcp-Session-Id headerRemoved. Any request lands on any instance; carry state via server-minted handles passed as tool args
Server→client callsServer-initiated sampling/createMessage, elicitation/create, roots/listReplaced by Multi Round-Trip Requests: server returns InputRequiredResult (resultType:"input_required"); client retries with inputResponses
DeprecationsRoots, Sampling, Logging all activeAll three deprecated (SEP-2577). Roots→tool params/URIs; Sampling→direct LLM APIs; Logging→stderr / OpenTelemetry
TasksExperimental core featureGraduated to an official extension (tasks/get polling, tasks/update; tasks/list removed)
Extensions—New extensions framework (reverse-DNS IDs, extensions capability map). Official: MCP Apps (sandboxed HTML UIs), Tasks
Change noticesGET SSE stream; resources/subscribeSingle subscriptions/listen stream + cache hints (ttlMs, cacheScope) on list/read results
Routing headers—Required Mcp-Method + Mcp-Name headers (route without body inspection)
Error codeResource not found = -32002Changes to -32602 (Invalid Params). MCP reserves -32020…-32099
Tool schemas2020-12; structuredContent = objectFull 2020-12 (oneOf/anyOf/$ref); structuredContent = any JSON value
AuthOAuth 2.1 + DCR / Client ID Metadata DocsSame base, hardened: validate iss (RFC 9207), issuer-bound creds; DCR now deprecated in favor of Client ID Metadata Documents

Unchanged and safe to over-learn: the host/client/server model, the three server primitives and their control model, tool-invocation flow, OAuth 2.1 fundamentals (PKCE, resource indicators, audience validation, no token passthrough), and the whole security threat model. The RC re-plumbs transport & lifecycle, not MCP's core value or its trust model.

0 · Prerequisite Primer

No prerequisites are required, but the blueprint recommends this foundation. Every item below shows up indirectly on the exam. Skim if you know it; drill the JSON-RPC and OAuth pieces if you don't.

JSON-RPC 2.0 — the wire format MCP speaks

MCP is JSON-RPC 2.0 over a transport. Every message is one of three shapes. All must be UTF-8.

Request

Has id + method (+ optional params). Expects a matching response.

Response

Has the same id and either a result or an error — never both.

Notification

Has method but no id → fire-and-forget, no response expected (e.g. notifications/initialized).

// Request
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call",
  "params": { "name": "get_weather", "arguments": { "location": "NYC" } } }

// Success response          // Error response
{ "jsonrpc":"2.0","id":1,     { "jsonrpc":"2.0","id":1,
  "result": { ... } }           "error": { "code":-32602, "message":"..." } }

// Notification (no id → no reply)
{ "jsonrpc": "2.0", "method": "notifications/initialized" }

Remember: id present ⇒ a response is owed. id absent ⇒ it's a notification, no response. A response carries either result or error.

LLM API interaction & agentic patterns

Tool use
An LLM emits a structured request to call a named function; the host executes it and feeds the result back into context. MCP standardizes where those tools come from.
ReAct
Reason + Act loop: the model interleaves reasoning ("thought") with actions (tool calls) and observations (results), iterating until it can answer.
Agent loop
Perceive → decide → act → observe, repeated. MCP tools are the "act" surface; resources/prompts feed the "perceive" surface.

Security basics you must recognize

API keys
Static shared secrets. Simple but coarse — no per-request scoping, hard to rotate. Used for stdio servers via environment variables.
OAuth 2.1
Delegated authorization. Issues scoped, expiring access tokens instead of sharing a password. MCP's HTTP auth is built on it. Mandates PKCE.
Bearer tokens
Sent as Authorization: Bearer <token> on every request. Never in a URL query string.
PKCE
Proof Key for Code Exchange — a verifier/challenge pair that stops an intercepted authorization code from being redeemed by an attacker.

Reading a server manifest / capability definition

An MCP server advertises what it can do during the initialize handshake and via */list calls. Being able to read a tool definition — name, description, inputSchema (JSON Schema), optional outputSchema and annotations — is an explicit exam skill.

1 · MCP Fundamentals

16%

Purpose & scope · core concepts · interoperability & value

What MCP is (and isn't)

The Model Context Protocol is an open standard that gives AI applications a uniform way to connect models to external tools, data, and context. Anthropic introduced it in November 2024; it is now community-governed. The canonical framing:

The "USB-C for AI" analogy. Before MCP, every model-to-tool connection was a bespoke integration — an M × N problem (M apps × N tools). MCP turns it into M + N: build a server once, and any MCP-compatible client can use it. One standard port, many peripherals.

It IS
A transport-agnostic, JSON-RPC-based protocol for exposing tools, resources, and prompts to AI hosts.
It is NOT
A model, an agent framework, a runtime, or a replacement for HTTP/REST. It standardizes the context layer, not the model.

Core value: interoperability & portability

Write once, reuse everywhere Swap models without rewriting integrations Composable — many servers per host Open standard, no vendor lock-in

What they'll test. The M×N → M+N reframing; that MCP is an open protocol not a product; that its job is standardizing context/tool access; and the vocabulary of hosts/clients/servers and the three primitives. Expect "which of these is a benefit of MCP?" and "what problem does MCP solve?" style items.

2 · Architecture & Components

14%

Schemas & structured data · hosts / clients / servers · model interaction flow

The three roles

Host / Client / Server — the participant model

HOST the AI application

The user-facing app that contains the LLM (e.g. Claude Desktop, an IDE, an agent). Owns the model, the UI, user consent, and the security policy. Spawns one client per server connection.

Client A ↔ Server 1
Client B ↔ Server 2
Client C ↔ Server 3
▲ one dedicated client per server · 1:1 · isolated ▲

SERVER 1 capability provider

Exposes tools, resources, and prompts. Runs locally (stdio) or remotely (Streamable HTTP). Holds its own credentials to the systems behind it.

EXTERNAL SYSTEMS outside the trust boundary

Databases, SaaS APIs, filesystems, the web. The server brokers access to these — the client/model never touches them directly.

Host = the app + model. Client = the connector inside the host (one per server, isolated). Server = the thing exposing capabilities. A host runs many clients; each client speaks to exactly one server.

Schemas & structured data

JSON Schema
Tool inputs (inputSchema) and optional outputs (outputSchema) are described with JSON Schema. As of 2025-11-25 the default dialect is JSON Schema 2020-12.
Structured content
Tools may return a typed structuredContent object (validated against outputSchema) in addition to human-readable content blocks.
Capabilities
What each side supports is negotiated as a structured capabilities object at initialize time (see Domain 3).

What they'll test. Which role does what — especially that the host holds the model and consent, the client is 1:1 with a server and isolated, and the server exposes capabilities. Also: schemas are JSON Schema; a server can be local or remote.

3 · Interactions & Execution

26% — heaviest

interaction patterns & response handling · error handling · tool invocation lifecycle · protocol primitives

3.1 The connection lifecycle — three phases

Initialize handshake & capability negotiation

  1. Client → Server  initialize request — sends its protocolVersion, capabilities (roots, sampling, elicitation), and clientInfo.
  2. Server → Client  initialize result — echoes an agreed protocolVersion, its own capabilities (tools, resources, prompts, logging, completions), serverInfo, optional instructions.
  3. Client → Server  notifications/initialized — a notification (no id). Only now may normal operations begin.
Version rule: server returns the same version if it supports it, else its latest; the client disconnects if it can't accept that. Before the handshake completes, only ping (and server logging) may be sent.

2026-07-28 RC The handshake is removed — MCP becomes stateless. There is no initialize/initialized exchange; every request instead carries its protocol version, clientInfo, and capabilities in _meta (keys like io.modelcontextprotocol/protocolVersion). Servers must implement server/discover to advertise versions & capabilities; a version mismatch returns UnsupportedProtocolVersionError. Baseline answer for the exam today: the handshake still exists.

Lifecycle phases
PhasePurposeKey messages
InitializationAgree protocol version; negotiate capabilities; exchange identityinitialize req/resp, then notifications/initialized
OperationNormal work using only negotiated capabilitiestools/*, resources/*, prompts/*, notifications
ShutdownClean close — no MCP message, done at transport levelstdio: close stdin → SIGTERM → SIGKILL · HTTP: close connection

3.2 Tool invocation lifecycle

Discovery → selection → invocation → result

  1. Discovery Client sends tools/list; server returns tool definitions (name, description, inputSchema). Supports pagination via cursor.
  2. Selection The model chooses a tool based on the user's intent (tools are model-controlled). A human-in-the-loop should be able to approve/deny.
  3. Invocation Client sends tools/call with name + arguments (validated against the schema).
  4. Result Server returns a result: content[] (text/image/audio/resource_link/embedded resource) and/or structuredContent, plus isError.
  5. Feed back Client passes the result to the model to continue reasoning. Loop may repeat (ReAct).
  6. Live updates If the server declared listChanged, it can emit notifications/tools/list_changed; the client re-lists.
Same discovery → use → list-changed shape applies to resources and prompts, with their own methods.

3.3 Protocol primitives — the core of the exam

Three server primitives, distinguished by who controls them. This "who controls what" mental model is the single most-tested idea in this domain.

Server primitives — control model
PrimitiveControlled byDiscover / usePurposeAnalogy
ToolsModel (AI decides)tools/list → tools/callTake actions / cause effectsFunction call · POST
ResourcesApplication (host decides)resources/list → resources/readSupply read-only context/dataFile / GET
PromptsUser (person selects)prompts/list → prompts/getReusable templated workflowsSlash command

MCP also defines client primitives — capabilities a server can call back into the client (declared by the client at initialize):

Client primitives (server → client callbacks)
CapabilityWhat it doesHuman in loop?
RootsClient tells the server which filesystem/URI boundaries it may operate withinConfigured by host
SamplingServer asks the client's LLM to generate a completion (2025-11-25 adds tool-calling to sampling)Yes — user approves
ElicitationServer asks the user for structured input mid-flow (2025-11-25 adds URL-mode + richer enums)Yes — user provides

2026-07-28 RC Roots and Sampling are deprecated (along with Logging). And server-initiated callbacks disappear: instead of the server calling the client (sampling/createMessage, elicitation/create, roots/list), the server returns an InputRequiredResult and the client retries the original request with inputResponses — the Multi Round-Trip Request (MRTR) pattern, which keeps everything stateless. Baseline exam answer: these are still live server→client requests.

3.4 Error handling — two distinct mechanisms

The #1 gotcha in this domain. MCP separates protocol errors from tool execution errors. They live in different parts of the message and behave differently.

Protocol error → JSON-RPC error object

Transport/protocol-level failures: unknown method, malformed request, unknown tool name, server crash. Returned as { "error": { "code": -32602, ... } }. The model does not see this as a tool result.

Tool execution error → result with isError: true

The tool ran but failed its job: API rate-limited, bad business data, etc. Returned inside a normal result so the model can see it and self-correct. As of 2025-11-25, input-validation errors should also be returned this way (not as protocol errors) to let the model retry.

// Protocol error — unknown tool
{ "jsonrpc":"2.0","id":3, "error":{ "code":-32602, "message":"Unknown tool: foo" } }

// Tool execution error — tool ran, but failed (model sees this)
{ "jsonrpc":"2.0","id":4, "result":{
    "content":[{ "type":"text","text":"API rate limit exceeded" }],
    "isError": true } }

2026-07-28 RC The protocol-error vs isError split is unchanged, but two details move: resource-not-found changes from -32002 to -32602 (Invalid Params), and MCP now reserves the -32020…-32099 band for spec-defined codes. The isError:true convention for tool-execution failures stays exactly the same.

What they'll test (heavily). The initialize handshake order (init → result → initialized notification); who controls tools vs resources vs prompts; the tool-call lifecycle; and protocol-error vs isError tool-execution-error. Know the standard error codes (see cheat sheet) and that unknown-tool = -32602 protocol error, while a failed tool run = isError:true.

4 · Security & Governance

24% — second heaviest

trust boundaries · permissions & consent · risk & safety controls · auditability & observability

4.1 Trust boundaries

Where trust changes hands — each boundary is a control point

① User ↔ Host

The host must obtain informed consent and present clear UI: which tools are exposed, visual indicators when a tool runs, confirmation prompts for sensitive actions.

— consent boundary —

② Host/Client ↔ Server

Each server is isolated behind its own client. The client must treat server-supplied content (descriptions, tool annotations) as untrusted unless the server is trusted. Capabilities gate what's even possible.

— protocol / auth boundary (OAuth 2.1) —

③ Server ↔ External API

The server uses its own credentials/token for downstream systems. It must not pass the client's token through to the API (see confused deputy / token passthrough).

Because tools are model-controlled, the model can be steered by prompt injection in untrusted content — so a human-in-the-loop able to deny invocations is the backstop across boundary ①.

4.2 Permissions & consent — the guiding principles

Explicit user consent before actions Human in the loop can deny tools Show tool inputs before calling Least-privilege scopes

The spec's trust-&-safety principles: user consent and control, data privacy, tool safety (treat descriptions as untrusted; confirm before running), and LLM sampling controls (user approves what the model is asked to generate).

4.3 Authorization — OAuth 2.1 (HTTP transports)

Authorization is optional and applies to HTTP-based transports. stdio servers use environment credentials instead. When present, the MCP server is an OAuth 2.1 Resource Server; a separate Authorization Server issues tokens.

Discovery & token flow (abridged)

  1. Client → Server Request with no token → 401 Unauthorized + WWW-Authenticate header pointing at resource metadata.
  2. Discovery Client reads Protected Resource Metadata (RFC 9728) → finds the Authorization Server → reads AS Metadata (RFC 8414; OIDC Discovery added 2025-11-25).
  3. Registration Dynamic Client Registration (RFC 7591) or, new in 2025-11-25, Client ID Metadata Documents.
  4. Authorize Browser flow with PKCE (mandatory) + resource indicator (RFC 8707) naming the target server.
  5. Token AS issues a short-lived access token bound to that server's audience.
  6. Use Authorization: Bearer <token> on every request — never in the query string. Server validates the audience before acting.
2025-11-25 also adds incremental scope consent via WWW-Authenticate — the client starts least-privilege and elevates only when a privileged op is attempted.

2026-07-28 RC Still OAuth 2.1 — the fundamentals below don't change — but hardened: clients must validate the iss parameter (RFC 9207) before redeeming a code, credentials are bound to their issuing authorization server, and clients declare an application_type at registration. Note Dynamic Client Registration is now deprecated in favor of Client ID Metadata Documents.

4.4 Risk & safety controls — threats you must recognize

MCP threat model — attack → mitigation
ThreatWhat happensMitigation
Token passthroughServer forwards the client's token to a downstream API unchangedForbidden. Server validates token audience = itself; uses its own token downstream
Confused deputyProxy with static client ID + DCR + consent cookie lets an attacker skip consentPer-client consent before forwarding to 3rd-party auth; validate exact redirect_uri
Session hijackingGuessable/reused Mcp-Session-Id lets an attacker impersonateNon-deterministic IDs; bind to user (user:session); never use sessions for auth
SSRFMalicious server's metadata URLs point at internal / cloud-metadata endpointsHTTPS only; block private IP ranges; validate redirects; egress proxy
Prompt injectionUntrusted content steers the model into unwanted tool callsHuman-in-loop deny; show tool inputs; annotations untrusted unless server trusted
Malicious local serverPoisoned startup command runs arbitrary code with client privilegesShow exact command + consent before run; sandbox; prefer stdio isolation
Malicious OAuth URLjavascript:/data: scheme in an auth URL → XSS/RCEAllowlist http(s) only; no shell execution to open URLs

4.5 Auditability & observability

Audit logging
Clients should log tool usage for audit purposes; server-side logs support incident investigation.
Logging capability
Servers can emit structured log messages (notifications/message) at standard severity levels.
Progress & cancellation
Long operations report progress; either side can send a CancelledNotification.
Visible indicators
The host should surface when tools run and what was sent — observability is a user-facing safety control, not just backend telemetry.

2026-07-28 RC The logging capability is deprecated — servers log to stderr (stdio) or emit OpenTelemetry instead, with W3C trace context (traceparent/tracestate/baggage) carried in _meta. The consent, audit-logging, and human-in-the-loop principles are unchanged; only the built-in logging mechanism moves.

What they'll test (heavily). Token passthrough is forbidden and why (breaks audience/audit/trust). OAuth 2.1 = mandatory PKCE + resource indicators + audience validation; bearer token in header not query string; stdio uses env creds. The consent/human-in-loop principles. Session IDs must not be used for auth. Match each named attack to its mitigation.

5 · Use Cases & Ecosystem

20%

roles / responsibilities / adoption · operational use cases · ecosystem & portability

Who does what (adoption roles)

Server author
Builds & publishes a server exposing tools/resources/prompts; owns its downstream credentials and input validation.
Host / client developer
Integrates the model, enforces consent UI, isolates each server, handles auth & sandboxing.
End user
Grants consent, selects prompts, approves sensitive tool calls and sampling.
Operator
Deploys/monitors remote servers, manages tokens, egress policy, and audit logs.

Operational use cases

IDE / coding agents (files, git, terminals) Enterprise data access (DBs, warehouses) SaaS workflow automation (tickets, docs) Knowledge / RAG over resources Desktop assistants & agents

Ecosystem & portability

SDKs
Official SDKs across languages (Python, TypeScript, others), now under an SDK tiering system (2025-11-25 governance).
Registry
A community registry / server.json format helps discovery and distribution of servers.
Portability
Because capabilities are negotiated and transport-agnostic, the same server works across compliant hosts and swappable models — the core adoption argument.
Governance
Community-governed with formal Working/Interest Groups; date-versioned spec (YYYY-MM-DD), incremented only on backwards-incompatible change.

What they'll test. Matching responsibilities to roles; recognizing realistic MCP use cases vs things MCP doesn't do; and the portability/interop value proposition (one server → many hosts/models). Light on trivia, heavy on "which scenario fits MCP."

Q · Quick-Reference Tables

JSON-RPC / MCP error codes
CodeNameWhen
-32700Parse errorInvalid JSON received
-32600Invalid RequestNot a valid JSON-RPC envelope
-32601Method not foundUnknown/unsupported method
-32602Invalid paramsBad args, missing required, unknown tool name
-32603Internal errorGeneric server-side failure
-32002Resource not foundMCP-specific: resources/read on missing URI
-32000
to -32099
Server errorReserved for implementation-defined errors

Remember: a tool that runs but fails is not a code above — it's a normal result with isError:true.

2026-07-28 RC Resource-not-found moves from -32002 to -32602; the MCP spec reserves -32020…-32099 for its own codes (-32000…-32019 stays implementation-defined). The generic JSON-RPC codes above are unchanged.

Transport comparison
 stdioStreamable HTTPHTTP+SSE
StatusCurrentCurrent (remote)Deprecated
IntroducedOriginal2025-03-262024-11-05
TopologyLocal subprocessRemote, multi-clientRemote
Channelstdin / stdout (newline-delimited)One endpoint: POST + optional GET/SSETwo endpoints
SessionProcess lifetimeMcp-Session-Id header—
AuthEnv variablesOAuth 2.1 + Bearer—
Version hdrn/aMCP-Protocol-Versionn/a

Streamable HTTP security must-knows: validate Origin (return 403 if bad, per 2025-11-25), bind to localhost when local, use HTTPS — to stop DNS-rebinding.

2026-07-28 RC Streamable HTTP goes stateless: the Mcp-Session-Id header and SSE resumability (Last-Event-ID) are removed; POSTs must carry Mcp-Method + Mcp-Name routing headers; list/read results gain ttlMs + cacheScope cache hints; and change notices use one subscriptions/listen stream. HTTP+SSE is now formally reclassified Deprecated under the lifecycle policy.

Primitive control matrix (memorize this)
PrimitiveWho controlsMethods
ToolsModeltools/list, tools/call
ResourcesApplicationresources/list, resources/read, resources/subscribe
PromptsUserprompts/list, prompts/get
RootsClientdeclared capability; roots/list
SamplingClient (user-approved)sampling/createMessage
ElicitationClient (user-provided)elicitation/create

P · Practice Questions

22 items, deliberately over-weighted to Domains 3 (26%) and 4 (24%), with two on the incoming 2026-07-28 revision. Tap Show answer to reveal the explanation. Try to answer before revealing.

Q1Interactions

A client calls a tool that doesn't exist on the server. How does the server respond?

  1. A result with isError: true
  2. A JSON-RPC error with code -32602
  3. An HTTP 404
  4. A notifications/tools/list_changed
Show answer

B. An unknown tool name is a protocol error → JSON-RPC error, code -32602 (Invalid params). It is not a tool execution error, because the tool never ran. isError:true is only for a tool that ran and failed.

Q2Interactions

Which message correctly ends the initialization phase and permits normal operations?

  1. The server's initialize result
  2. The client's initialize request
  3. The client's notifications/initialized
  4. A ping from either side
Show answer

C. Order is: client initialize request → server initialize result → client notifications/initialized (a notification, no id). Only after that notification may non-ping operations begin.

Q3Interactions

Tools, resources, and prompts differ chiefly by who controls them. Match correctly.

  1. Tools = user, Resources = model, Prompts = app
  2. Tools = model, Resources = application, Prompts = user
  3. Tools = app, Resources = user, Prompts = model
  4. All three are model-controlled
Show answer

B. Tools = model-controlled (AI decides to call), Resources = application-controlled (host decides what context to include), Prompts = user-controlled (person selects, e.g. a slash command).

Q4Interactions

A tool executes but the downstream API is rate-limited. The best-practice response is:

  1. error with code -32603
  2. result with content describing the failure and isError: true
  3. Close the transport
  4. Silently return empty content
Show answer

B. The tool ran but failed its job → a tool execution error reported in the result with isError:true, so the model can see it and self-correct/retry.

Q5Interactions

Which is a client primitive (a capability a server can invoke on the client)?

  1. Tools
  2. Resources
  3. Prompts
  4. Sampling
Show answer

D. Sampling (plus roots and elicitation) is a client primitive — the server asks the client's LLM to generate, subject to user approval. Tools/resources/prompts are server primitives.

Q6Interactions

A message has a method but no id. It is a:

  1. Request
  2. Response
  3. Notification
  4. Malformed message
Show answer

C. No id ⇒ notification (fire-and-forget, no response expected), e.g. notifications/initialized or list_changed.

Q7Interactions

How does a server tell clients that its available tools have changed at runtime?

  1. Reconnects the transport
  2. Sends notifications/tools/list_changed (if it declared listChanged)
  3. Returns isError:true
  4. Bumps the protocol version
Show answer

B. If the server declared the listChanged capability, it emits notifications/tools/list_changed; the client then re-issues tools/list.

Q8Interactions

Which best describes structured tool output in the current spec?

  1. Tools can only return plain text
  2. Tools may return structuredContent validated against an outputSchema
  3. Output must be XML
  4. Structured output replaces content entirely
Show answer

B. A tool may declare an outputSchema and return a typed structuredContent object; for backwards compatibility it should also mirror it as serialized JSON text in a content block.

Q9Security

An MCP server receives a client token and forwards it unchanged to a downstream API. This is:

  1. Recommended for performance
  2. Token passthrough — explicitly forbidden
  3. Required by OAuth 2.1
  4. Only allowed over stdio
Show answer

B. Token passthrough is forbidden. It breaks audience validation, corrupts the audit trail, and violates trust boundaries. The server must validate the token's audience is itself, and obtain its own token for the downstream API.

Q10Security

MCP authorization is based on which standard, and where does it apply?

  1. OAuth 1.0a, all transports
  2. SAML, stdio only
  3. OAuth 2.1, HTTP-based transports
  4. API keys only
Show answer

C. OAuth 2.1, for HTTP-based transports. stdio servers should not use this flow — they take credentials from the environment.

Q11Security

Which is mandatory for MCP OAuth clients to prevent authorization-code interception?

  1. PKCE
  2. Client secrets in the URL
  3. Long-lived tokens
  4. Passing tokens in query strings
Show answer

A. PKCE is mandatory (OAuth 2.1). Tokens go in the Authorization header, never the query string; access tokens should be short-lived.

Q12Security

What does the resource parameter (RFC 8707) accomplish in MCP auth?

  1. Compresses the token
  2. Binds the token to the specific MCP server as its audience
  3. Selects the transport
  4. Disables consent
Show answer

B. Resource indicators name the target server so the issued token is audience-bound — it can't be replayed against a different service. Servers must validate they are the intended audience.

Q13Security

Because tools are model-controlled, the primary safety backstop against prompt-injection-driven tool calls is:

  1. Bigger models
  2. A human-in-the-loop able to deny invocations
  3. Disabling logging
  4. Removing capability negotiation
Show answer

B. The spec says there should always be a human in the loop with the ability to deny tool invocations, plus clear UI showing which tools are exposed and what inputs are sent.

Q14Security

A confused-deputy attack on an MCP proxy is prevented primarily by:

  1. Using a single static client ID for everyone
  2. Skipping consent to reduce friction
  3. Per-client consent before forwarding to the third-party auth server
  4. Wildcard redirect URIs
Show answer

C. The proxy must obtain per-client consent and validate the exact redirect_uri before initiating the third-party flow — so a leftover consent cookie can't be abused.

Q15Security

Which statement about MCP session IDs is correct?

  1. Sessions may be used as the authentication mechanism
  2. Session IDs should be sequential for debuggability
  3. Session IDs must be non-deterministic and must not be used for auth
  4. Sessions are required by stdio
Show answer

C. Use secure, non-deterministic IDs; bind them to the user (user:session); and never use sessions for authentication — verify every inbound request.

Q16Security

A malicious server returns metadata URLs pointing at http://169.254.169.254/. This targets:

  1. A confused deputy
  2. SSRF against a cloud metadata endpoint
  3. Token passthrough
  4. A parse error
Show answer

B. That's the link-local cloud metadata address — a classic SSRF target. Mitigate by requiring HTTPS, blocking private/reserved IP ranges, and validating redirects.

Q17Security

Why must clients treat tool annotations (like readOnlyHint) with caution?

  1. They are encrypted
  2. They are untrusted unless the server is trusted
  3. They are always accurate
  4. They replace consent
Show answer

B. Annotations are server-supplied hints; a malicious server could lie. Clients must consider them untrusted unless they come from a trusted server — never let a hint bypass consent.

Q18Fundamentals

The clearest statement of MCP's core value is:

  1. It makes models faster
  2. It converts an M×N integration problem into M+N
  3. It replaces HTTP
  4. It is a specific AI model
Show answer

B. One standard connection layer means a server built once works with any compliant host/model — M×N → M+N. It's a protocol, not a model or an HTTP replacement.

Q19Architecture

In MCP's participant model, the relationship between clients and servers is:

  1. One client multiplexes all servers
  2. One dedicated, isolated client per server
  3. Servers connect directly to the model
  4. Clients and servers are the same component
Show answer

B. The host spawns one client per server, each isolated (1:1). This isolation is a security boundary as well as an architectural one.

Q20Ecosystem

Which scenario is the best fit for MCP?

  1. Training a foundation model from scratch
  2. Giving an AI host standardized, consented access to a company's database and ticketing tools
  3. Serving a static marketing website
  4. Encrypting disk volumes
Show answer

B. MCP standardizes how a host/model reaches external tools and data with negotiated capabilities and consent — exactly the DB + ticketing integration case. It doesn't train models or serve websites.

Q212026-07-28 RC

In the 2026-07-28 revision, how does a client learn a server's protocol version and capabilities, given the initialize handshake was removed?

  1. It guesses from the port number
  2. Each request carries them in _meta, and the server implements a server/discover RPC
  3. Via the Mcp-Session-Id header
  4. Capabilities are no longer negotiated
Show answer

B. The RC makes MCP stateless: version, clientInfo, and capabilities travel in _meta on every request, and servers must implement server/discover for up-front capability/version discovery. There is no handshake and no Mcp-Session-Id. (On today's stable exam, the answer would instead be the initialize handshake.)

Q222026-07-28 RC

Which set of features does the 2026-07-28 revision deprecate?

  1. Tools, Resources, Prompts
  2. Roots, Sampling, Logging
  3. OAuth 2.1, PKCE, resource indicators
  4. stdio and Streamable HTTP
Show answer

B. Roots, Sampling, and Logging are deprecated (SEP-2577) — migrate to tool params/resource URIs, direct LLM-provider APIs, and stderr/OpenTelemetry respectively. They remain functional for 12+ months. The core primitives and the OAuth 2.1 mechanics are not deprecated.

S · Study Plan & Checklist

A focused 7-day pass, front-loading the two heavy domains. Adjust to your pace; the ordering (weight-first) is the point.

7-day plan (weight-first)
DayFocusDo
1Fundamentals + Architecture (30%)Read the spec overview + architecture; draw the host/client/server diagram from memory
2–3Interactions & Execution (26%)Lifecycle, primitives control matrix, error handling; hand-trace an initialize + tools/call
4–5Security & Governance (24%)OAuth 2.1 flow, trust boundaries, the threat→mitigation table; explain token passthrough out loud
6Use Cases & Ecosystem (20%)Roles, use cases, portability; skim SDKs + registry + governance
7Review + drillRedo all 20 practice Qs cold; re-read every "What they'll test" box; memorize error codes + transports

Mastery checklist

X · Exam-Day Logistics

Delivery
Online + proctored
Remote proctoring; quiet room, webcam, ID check
Questions
Multiple choice
No hands-on lab (this is an Associate exam)
Time
120 minutes
Budget ~1 min/question; flag & return
Eligibility
12 months
Window from purchase to sit the exam
Retake
1 free
Included with the exam purchase
Cert validity
2 years
From the date you pass

Before you sit: run the proctor's system check ahead of time, clear your desk, have government ID ready, and confirm a stable connection. Verify current price, question count, and passing score on the official LF exam page (they can change and aren't always published).

R · References & Sources

All links verified against live pages on 2026-07-10. The specification is the authoritative source; study it directly.

Certification (Linux Foundation)

Incoming revision — 2026-07-28 (Release Candidate)

Official MCP specification (stable / exam baseline — 2025-11-25)

Foundational standards

Community

MCPA Exam Prep Study Guide · built 2026-07-10, spec-checked 2026-07-11 · baseline MCP spec 2025-11-25, with the 2026-07-28 release candidate flagged throughout. Confirm exam price, question count, passing score & which spec revision the exam currently targets on the official LF page before booking.

Study weight-first: Domains 3 & 4 are half the exam. Know the primitives control matrix, the error split, and the OAuth 2.1 flow cold — then skim Spec Watch so the stateless 2026-07-28 changes can't surprise you.

How-To Guides · Published 10 July 2026

Built from public sources. Plans, prices and versions change: check the linked sources before you rely on them.

Get new guides by emailOne short note when a new How-To Guide lands. Free.

Get new guides by emailBrowse all guides