PrepGenAICerts
Courses/Claude Certified Architect – Professional (CCAR-P) Full Course/3.4 Connection Protocols: MCP vs. Direct API/CLI vs. Agent-to-Agent
Domain 3: IntegrationLesson 13 of 28

3.4 Connection Protocols: MCP vs. Direct API/CLI vs. Agent-to-Agent

3.4.1 The Question Underneath "How Do I Connect This?"

You've right-sized an agent's tools (3.1), scoped access to real identities (3.2), and designed how it retrieves data (3.3). Now a very practical question remains: HOW does Claude actually reach a given capability, mechanically? You could write a direct API call. You could shell out to a command-line tool. You could stand up a standards-based server. You could hand the whole request off to another autonomous agent. All four are legitimate — the exam isn't testing whether you know these options exist, it's testing whether you can pick the RIGHT one for a given situation, because picking the wrong one has real costs either way.

Here's the question that actually decides it, and it has nothing to do with which protocol feels most modern: who else is going to reuse this capability, and who is responsible for maintaining it? A capability built for exactly one app, that no one else will ever call, doesn't need the ceremony of a shared standard. A capability meant to be used by many different Claude applications, evolved and versioned on its own schedule, benefits enormously from exactly that ceremony. Get this backwards — over-engineer the one-off, under-engineer the shared capability — and you'll feel it later, either as wasted setup effort or as five different apps each hand-rolling their own slightly-different integration to the same underlying service.

ℹ️

The one idea to hold onto

The deciding question for protocol choice is always: who else will reuse this, and who maintains it? Match the mechanism to the capability's reuse and maintenance profile — not to habit, familiarity, or which option sounds most sophisticated.

3.4.2 MCP: Build Once, Reuse Everywhere

The Model Context Protocol (MCP) is an open standard for exposing capabilities to any MCP client. Its defining value proposition is build-once, reuse-everywhere: an MCP server authored once is usable by many different Claude applications and clients, and — this is the part people miss — it's maintained on its OWN release cycle, independent of any single app that consumes it. Compare that to a direct API integration, where the integration code is embedded in, and tightly coupled to, one specific application. If the underlying service changes, every app with its own hand-rolled integration has to update separately; an MCP server updates once, and every client benefits.

MCP exposes three kinds of primitives to a connecting client, and it's worth knowing all three by name because questions will test whether you can tell them apart:

PrimitiveWhat it is
ToolsActions the model can invoke
ResourcesReadable data/context the model can pull in
PromptsReusable prompt templates

MCP isn't only about tools — it standardizes readable resources and reusable prompt templates too, all exposed the same way to any connecting client.

Once a client connects to one or more MCP servers, the tools from ALL of them become available simultaneously, alongside any of the client's own built-in or directly-defined tools. This is exactly why capability bloat (3.1) matters even more once MCP is in the picture: connecting to a general-purpose MCP server can hand your agent a much larger tool surface than it needs, and the least-privilege discipline from 3.1 applies just as much to MCP-sourced tools as to hand-written ones.

Build once, reuse everywhereMCP servertools · resources · promptsApp A (Claude Code)App B (a custom agent)App C (another client)one server, maintained on its own release cycle, serving many clients

One MCP server, authored once, serves many Claude applications and is versioned independently of any of them — the opposite of each app maintaining its own copy of the same integration.

3.4.2 — Key Concept

MCP is an open standard exposing tools, resources, and prompts to any connecting client. Its value is build-once, reuse-everywhere — authored once, consumed by many apps, maintained on its own release cycle, independent of any single consumer.

3.4.3 Transports: stdio vs. Streamable HTTP

An MCP server has to physically run somewhere and communicate somehow, and MCP supports two transport models depending on where that server lives relative to its client.

  • stdio — for a local subprocess. The client launches the server as a child process on the same machine and talks to it over standard input/output. Simple, fast, and appropriate when there's exactly one client on the same box as the server — think a developer's local tool integration.
  • Streamable HTTP / sockets — for a remote, multi-client server. The server runs independently, reachable over a network, and many different clients can connect to it at once. This is the shape you want when the server genuinely serves multiple consumers, potentially from different machines entirely.

The choice mirrors the same reuse question from 3.4.1, one level down: a stdio server is inherently single-client and local, which is fine for a personal or single-app integration, but doesn't scale to "many apps reuse this server" the way the build-once-reuse-everywhere pitch implies. If you genuinely want multiple applications sharing one server instance, Streamable HTTP is the transport that makes that real, and it opens up a production concern advanced MCP topics cover in more depth: a remote server serving many clients has to decide whether it's STATEFUL (tracking per-client session state across requests) or STATELESS (treating each request independently, which scales more simply behind a load balancer).

3.4.3 — Key Concept

stdio transport suits a local subprocess with one client on the same machine; Streamable HTTP/sockets suit a remote server reachable by many clients. Scaling a remote MCP server raises a stateful-vs-stateless design question — stateless scales more simply, stateful tracks per-client session data.

3.4.4 MCP at Scale: Stateful vs. Stateless Servers

3.4.3 raised the stateful-vs-stateless question as a forward-reference — worth naming, but not yet worked through. It deserves a full pass, because it's the difference between an MCP server that quietly falls over under real load and one that doesn't, and the exam expects you to reason about WHY, not just recite the two labels.

Start with what "stateful" actually means for a server process. A stateful MCP server holds session state — in-progress operation state, conversation-scoped context, per-client cached data — in its own memory, tied to a specific client connection. That's a completely ordinary thing for a server to do, and for a single client it costs nothing: the server remembers what it needs to remember, and there's no ambiguity about which memory belongs to which caller, because there's only one caller. The trouble starts the moment you try to run more than one instance of that server behind a load balancer to handle more traffic. If client A's session state lives only in server instance #2's memory, then every subsequent request from client A has to be routed back to that exact instance — a load balancer has to implement "sticky sessions," pinning each client to the server that already knows about it. That's a real operational constraint: it complicates deployment, complicates failover (if instance #2 dies, client A's state is just gone), and it caps how simply you can scale horizontally, because adding capacity means adding instances that can't actually share the work of an existing client's session.

A stateless server sidesteps the whole problem by design: every request is self-contained. The server doesn't need to remember anything about the caller between requests, because whatever it needs is either included in the request itself or fetched fresh from an external, shared store. Any instance behind the load balancer can handle any request from any client, because no instance is privileged with memory the others lack. This is what "scales more simply" actually means in concrete terms — not that stateless servers are magically faster, but that you can add capacity by adding identical, interchangeable instances with no coordination problem between them.

DesignWhere session state livesScaling implication
StatefulIn the server process's own memory, tied to one connectionNeeds sticky-session routing; a lost instance loses that client's state; horizontal scaling requires coordinating which instance owns which client
StatelessNowhere per-instance — either in the request itself, or externalized to a shared store (e.g., Redis)Any instance handles any request; scales horizontally behind a standard, non-sticky load balancer with no coordination problem

The distinction isn't about which design is 'better' in the abstract — it's about which one survives having more than one server instance in play.

Now connect this to a concrete integration decision, because that's where the exam will actually test it. An MCP server backing a single-user local dev tool — a developer's own machine, one client, stdio transport or a lone Streamable HTTP connection — can be built stateful without a second thought. There's exactly one caller. There's no other server instance to route to. The entire sticky-session problem doesn't exist, because the condition that creates it (multiple instances, multiple clients, ambiguity about which instance knows what) never arises. Building it stateless anyway wouldn't be wrong, but it also wouldn't buy anything — you'd be paying design complexity for a scaling property you don't need.

Flip the scenario: the same MCP server is now the backend for a multi-tenant SaaS product serving thousands of concurrent agent sessions, one process fronted by many load-balanced instances to handle that volume. If it's stateful in the naive sense — session state sitting in whichever instance happened to handle the first request — you're now forced into sticky routing for every single tenant, your failover story is broken (an instance restart silently drops every session it was holding), and your ability to add capacity is hobbled by the coordination problem described above. The fix is one of two shapes: either redesign the server to be genuinely stateless (each request carries everything needed, or reconstructs its state from a shared source), or keep a stateful design but externalize the session state to something every instance can read and write — a shared cache like Redis is the canonical choice. Either path decouples "which instance handles this request" from "which instance remembers this client," which is exactly the coupling that broke the naive stateful design at scale.

⚠️

3.4.4 — Exam Trap

Don't treat "stateful" as simply the worse design. It's the right, simplest choice for a single-client local tool — no sticky-session problem exists when there's only one client and no scaling need. The failure mode is specifically about running MULTIPLE server instances for MULTIPLE concurrent clients; that's the condition that turns statefulness from a convenience into a scaling liability, and it's also the condition that decides whether a stateless redesign or externalized session state (e.g., Redis) is the fix.

3.4.4 — Key Concept

A stateful MCP server holds per-client session state in its own process memory and needs sticky-session routing to scale across multiple instances. A stateless MCP server treats every request as self-contained and scales horizontally behind a standard load balancer with no coordination problem. A single-user local dev tool can safely be stateful; a multi-tenant SaaS product serving thousands of concurrent sessions needs either a stateless design or a stateful design with session state externalized to a shared store like Redis.

3.4.5 When Direct API/CLI Beats a Standard Protocol

It's tempting, once you've learned how good MCP is, to reach for it everywhere. Resist that instinct. A direct API or CLI integration — calling a service's REST API or command-line tool straight from your code, with no protocol layer in between — is the RIGHT choice, not a lesser fallback, when the integration is a one-off, app-specific need where a standard protocol adds no leverage. If exactly one application will ever call this capability, and no one is asking for it to be shared, wrapping it in MCP's server/client machinery adds ceremony that buys you nothing: no other app to share the maintenance burden with, no independent release cycle anyone benefits from, just extra moving parts.

Think of it like the difference between publishing a library on a package registry and writing a private helper function in your own codebase. If nobody else will ever import it, publishing it as a versioned package is pure overhead — you'll spend more time maintaining the packaging than you saved by having it. The helper function, kept local, is the right level of engineering for a need that stops at your app's boundary.

⚠️

3.4.5 — Exam Trap

Reaching for MCP for a single app-specific call is just as wrong as hand-rolling a direct integration for a capability many apps will share. The exam tests BOTH directions of this mismatch — don't assume "more standardized" is always the safer answer.

3.4.6 Agent-to-Agent: When the Other End Is a Mind, Not a Function

The third mechanism is qualitatively different from the first two, and the distinction matters more than it might first appear. MCP and direct API/CLI both connect Claude to a deterministic-ish CAPABILITY — call this function, get that data back. Agent-to-agent delegation is for when the thing on the other end is itself an autonomous AGENT — something that reasons, makes its own choices about how to proceed, and might itself use tools, retrieve data, or call further agents to get the job done.

The deciding question here isn't reuse — it's autonomy. If you're delegating "go figure out the best flight itinerary for this trip, using whatever research you need to do," you're handing off a GOAL to something that will reason its own way through it, not invoking a single well-defined operation with a fixed input/output contract. That's agent-to-agent delegation: one agent treats another as a unit of delegated reasoning, not as a function call with a predictable shape. Choosing agent-to-agent when the remote side is actually a simple deterministic function is over-engineering in the opposite direction from the MCP trap in 3.4.4 — you don't need to hand off a goal to something that only ever does one predictable thing.

MechanismWhat it isChoose when
MCPOpen standard exposing tools, resources, and prompts to any clientA capability is reused across apps/clients and maintained independently
Direct API / CLICall a service's REST API or CLI directly from your codeA one-off, app-specific integration where a standard protocol adds no leverage
Agent-to-agentOne agent delegates to another agent as a unitThe remote capability is itself an autonomous agent, not a single function

Three different questions decide three different mechanisms: reuse profile (MCP), scope of need (direct API/CLI), and whether the other side reasons or just executes (agent-to-agent).

3.4.6 — Key Concept

Agent-to-agent delegation fits when the remote capability is itself an autonomous agent — reasoning about a goal, not executing a fixed operation. Choosing it for a simple deterministic function is over-engineering, just as choosing MCP for a one-off call is.

3.4.7 Delivery Routes: Entry Points, Build-Time Interfaces & CSP Wrappers

Everything in this lesson so far has answered one question: mechanically, how does Claude reach a given CAPABILITY — MCP, direct API/CLI, or agent-to-agent? There's a second, related, but genuinely distinct question the exam expects you to be able to answer, and it's easy to miss precisely because it sounds similar: mechanically, how does a request reach CLAUDE at all — and once it does, which vendor relationship actually serves the model call underneath it? Conflating these two questions is a real and costly mistake, because the constraints deciding the second question are frequently organizational and contractual rather than technical, and they can override an otherwise-correct answer to the first. You can pick MCP for exactly the right reasons — a shared, independently-maintained capability — and still ship the wrong integration if you never asked which cloud relationship the client actually needs underneath it.

The clean way to hold all of this is as three distinct layers stacked on top of each other, each answering a different question about how a human or system actually ends up talking to a model.

LayerWhat it answersNamed options
Entry pointHow does a human or system actually reach Claude?Claude.ai (web/mobile/desktop), Claude Code, a custom application built on the API
Build-time interfaceWhat does a developer code against to build that entry point?Direct API, SDKs, MCP, Agent SDK
Delivery route (CSP wrapper)Which cloud/vendor relationship actually serves the model calls, and what constraints does that choice inherit?Anthropic direct, AWS Bedrock, GCP Vertex AI (Model Garden), Microsoft Foundry (Azure)

Three layers, three different questions. This lesson has already covered the connection mechanisms that live inside the build-time-interface layer (MCP, direct API/CLI, agent-to-agent) — delivery route is the layer above them, and it's a separate decision.

The first two layers are the ones you've already built intuition for across this course. An entry point like Claude Code is itself built on a build-time interface — the Agent SDK, specifically, in Claude Code's case — while a custom application might be built on the direct API, one of the language SDKs, or MCP, depending on the reuse-and-maintenance calculus from earlier in this lesson. What hasn't been named explicitly until now is the third layer, and it answers something the first two don't: which company's infrastructure, compliance boundary, and billing relationship does the request actually run through once it leaves the client? Two organizations can build the IDENTICAL entry point on the IDENTICAL build-time interface — same Claude Code setup, same SDK calls, same MCP servers — and still need to land on entirely different delivery routes, because the delivery-route decision is inherited from commitments the client made long before this integration existed. For some clients, this is the single most consequential decision in the whole engagement, and it has nothing to do with which model tier they picked.

Delivery routeBest fit when…Compliance inheritanceRegion / residencyIdentity / IAM integration
Anthropic direct (first-party API)No existing cloud commitment constrains the choice; the client wants newest features fastest and the simplest billing relationshipAnthropic's own enterprise agreements (BAA availability, DPA, ZDR options) apply directlyAnthropic-controlled regions/optionsAnthropic API keys or OAuth; no native tie-in to a client's existing cloud IAM
AWS BedrockThe client already runs production workloads on AWS and has existing AWS compliance paper (e.g., an AWS BAA) it wants to extend to Claude rather than negotiate separatelyInherits the client's existing AWS BAA and compliance posture — frequently the deciding factor, not model capabilityRuns within the client's chosen AWS region(s), subject to AWS's regional footprintNative AWS IAM roles/policies — Claude calls gated by the same IAM the client already uses for every other AWS service
GCP Vertex AI (Model Garden)The client is GCP-standardized — existing data pipelines, IAM, and billing all live in GCPInherits the client's existing GCP compliance posture and contractsRuns within the client's chosen GCP region(s)Native GCP IAM — service accounts and roles the client already manages
Microsoft Foundry (Azure)The client has significant existing Azure and Microsoft 365 investment, with identity already centralized in Azure AD (Entra ID)Inherits the client's existing Microsoft/Azure compliance posture, contracts, and procurement relationshipRuns within the client's chosen Azure region(s)Native Azure AD (Entra ID) integration — the same identities, conditional-access policies, and MFA rules already governing the client's other Microsoft 365/Azure workloads apply automatically

The model itself — Haiku, Sonnet, Opus — is identical in raw capability across every one of these routes. The differentiator is always compliance inheritance, identity integration, and billing/procurement, never model quality.

That last point is worth sitting with, because it's exactly why this layer is easy for an architect to underweight: the deciding question is never "which delivery route gives us the smartest model," because the answer to that question is always "they're identical." An architect focused only on model tier and build-time interface can get every other part of the design right and still hand a client an unusable answer, because the delivery-route decision never got made explicit as its own step. The deciding question here has the same shape as the reuse-and-maintenance question that decided MCP vs. direct API/CLI earlier in this lesson, just aimed one layer up: which cloud/vendor relationship does this client already have compliance, billing, and identity commitments to — and does routing through that existing relationship save more than it costs to set up something new?

ℹ️

Microsoft Foundry deserves first-class treatment, not a footnote

It's tempting to think in AWS/GCP terms by default and treat Microsoft Foundry as a niche third option. That's a mistake for any architect working with clients who are deep in the Microsoft ecosystem — which is a very large share of enterprise, healthcare, insurance, financial-services, and government clients. Foundry gets the same comparison-table depth as Bedrock and Vertex AI above for a reason: for the right client, it is not a fallback option, it is the CORRECT one, for reasons that have nothing to do with the model.

Here's a full worked scenario to make that concrete. Consider a mid-size regional insurance carrier — call it Meridian Mutual — with roughly 4,000 employees, all of them already on Microsoft 365 E5 licensing, with every employee identity, group membership, and conditional-access policy managed in Azure AD (Entra ID), and an existing enterprise agreement with Microsoft covering the bulk of the company's cloud spend. Meridian wants to build an internal claims-adjuster assistant: an application built on top of Claude that helps adjusters draft coverage determinations by pulling policy documents and prior claim history. On pure model capability, calling Anthropic directly and calling Claude through Microsoft Foundry produce identical answers from identical models — there is no capability difference to adjudicate between the two routes. But three non-model factors make Foundry the right delivery route for Meridian specifically, and none of them would surface if the architect only asked “which model tier do we need.”

  • Identity integration. Meridian's IT security team requires every application touching claims data to authenticate through the company's existing Azure AD conditional-access policies — MFA enforcement, device-compliance checks, and the same group-based access rules already gating every other internal tool. Building on Foundry means the claims-adjuster assistant inherits that identity fabric automatically. Building against the Anthropic direct API instead means standing up a parallel authentication path with its own key management, its own audit trail, and its own gap in the conditional-access net IT already trusts — a new attack surface security has to separately review and approve.
  • Procurement and billing consolidation. Meridian's enterprise agreement with Microsoft already routes cloud spend through a single consolidated invoice that finance reconciles monthly against a pre-negotiated committed-spend discount. Routing Claude usage through Foundry lands it on that same invoice, under that same discount structure, with no new vendor contract for procurement to negotiate from scratch. Calling Anthropic directly instead means a brand-new vendor relationship, a new invoice finance has never seen, and a new set of terms legal has to review — real friction with a real dollar cost and a real timeline cost, even though the underlying model is unchanged.
  • Compliance boundary inheritance. Meridian's existing Microsoft enterprise agreement already covers the data-handling, audit, and retention commitments its compliance team negotiated for the rest of its Azure footprint — including the specific commitments that satisfy its state insurance regulators. Routing claims data through Foundry keeps that data inside a compliance boundary regulators have already reviewed and approved. Routing it to a different vendor means asking compliance to re-review a materially different data-handling arrangement before the assistant can go live, which can add months to a launch timeline for reasons that have nothing to do with the quality of the underlying model.

Checkpoint: Meridian Mutual

Notice what's absent from all three reasons above: nothing about Claude's accuracy, reasoning quality, or feature set. That's the point. For Meridian, Foundry isn't the technically superior delivery route — it's the ORGANIZATIONALLY correct one, because the deciding factors are identity integration, procurement/billing consolidation, and compliance boundary inheritance, not model quality. An architect who recommends the Anthropic direct API here because “it's simpler” or “it gets new features first” has optimized the wrong variable — solving a problem Meridian didn't have (model capability) while creating three the client does have (a new auth path to secure, a new vendor contract to negotiate, and a compliance re-review that stalls launch).

One more piece of vocabulary rounds out the picture, and it belongs here because it's a contractual data-handling concern that can directly gate which delivery route a client is even permitted to use. You've already seen BAA, HIPAA, GDPR, FedRAMP, and data residency elsewhere in this course as the regulatory vocabulary an architect needs. Two more terms complete that list: a DPA (Data Processing Agreement) is the contract governing how a data processor handles and protects personal data on a controller's behalf — typically required alongside GDPR compliance whenever a vendor processes EU personal data for a client. ZDR (Zero Data Retention) is a configuration or contractual option where the vendor does not retain input/output data beyond the immediate processing window — relevant for the most data-sensitive delivery-route decisions, since not every delivery route or model configuration supports it. Both terms matter here specifically because they're data-handling commitments, not model-capability features: a client whose regulatory posture requires ZDR, or a specific DPA covering a specific processing arrangement, may find that requirement easier to satisfy through one delivery route than another — if the client's existing AWS or Azure contract already includes a DPA covering that CSP's services, extending coverage to Claude via Bedrock or Foundry can be simpler than negotiating a new DPA directly with Anthropic, and the reverse holds if the client's most mature data-processing terms already sit with Anthropic.

⚠️

3.4.7 — Exam Trap

The most common mistake is collapsing entry point, build-time interface, and delivery route into a single decision — treating “just use the API” as a complete answer without ever asking which CSP relationship the client actually needs underneath it. This is the same shape of error as reaching for MCP on a one-off, single-app call or hand-rolling a direct integration for a capability many apps will share (3.4.4 above, one layer down): reflexively reaching for the most familiar or most technically elegant option without first asking what the client's existing constraints — regulatory, organizational, or contractual — actually require. “Use the direct API” can be exactly right for a startup with no existing cloud commitments and exactly wrong for an enterprise whose compliance, billing, and identity are already deeply entangled with one specific cloud provider. The exam tests whether you ask the delivery-route question explicitly, as its own step, rather than assuming build-time interface and delivery route are the same choice.

3.4.7 — Key Concept

The connection path has three layers: entry point (Claude.ai, Claude Code, a custom app), build-time interface (direct API, SDKs, MCP, Agent SDK), and delivery route (Anthropic direct, AWS Bedrock, GCP Vertex AI, Microsoft Foundry). Delivery route is a separate decision from build-time interface, decided by which CSP relationship the client already has compliance, billing, and identity commitments to — not by model capability, which is identical across every route.

3.4.8 Put It Together: Classify Five Integrations

You now have the full decision framework: reuse-and-maintenance profile decides MCP vs. direct API/CLI, and autonomy on the other end decides whether agent-to-agent is warranted at all. The fastest way to make this stick is to practice classifying real-sounding integrations against the framework rather than just memorizing the table.

3.4.8 — Build Exercise (25 min)

For each of these five integrations, write one sentence naming the mechanism (MCP, direct API/CLI, or agent-to-agent) and the transport if MCP: (1) a company-wide internal search capability meant to be used by a dozen different internal Claude tools, evolved independently by a platform team; (2) a one-off script that calls a single weather API for a single demo app; (3) a customer-service agent that hands off complex billing disputes to a separate, autonomous billing-investigation agent that does its own multi-step research; (4) a local developer CLI tool wrapped for a single Claude Code workflow on one machine; (5) a shared document-retrieval service used by both a support bot and an internal analyst tool, accessed by many machines across the company.

Choosing the right protocol solves HOW Claude connects. The final lesson of this domain turns to what happens once everything is wired up and running in production: how do you observe it, and how do you justify the accuracy-latency-cost knobs you turn?

ℹ️

Where this shows up on the exam

3.4/3.5 questions describe an integration and ask which mechanism fits. Anchor on two questions: who else reuses this and who maintains it (MCP vs. direct API/CLI), and is the remote side reasoning about a goal or executing a fixed operation (agent-to-agent vs. either of the others).

Key Takeaways

  • The deciding question for protocol choice is always reuse and maintenance profile: who else will use this capability, and who maintains it independently?
  • MCP is build-once, reuse-everywhere: an MCP server authored once serves many Claude apps/clients and is maintained on its own release cycle.
  • MCP exposes three primitives — tools (actions), resources (readable data/context), and prompts (reusable templates) — all available simultaneously once a client connects.
  • stdio transport suits a local, single-client subprocess; Streamable HTTP/sockets suit a remote server reachable by many clients, which then raises a stateful-vs-stateless scaling question.
  • Direct API/CLI fits a one-off, app-specific integration where a standard protocol adds no leverage — wrapping a single-use capability in MCP is ceremony without benefit.
  • Agent-to-agent delegation fits when the remote capability is itself an autonomous agent reasoning about a goal, not a deterministic function with a fixed input/output contract.
  • The exam tests BOTH mismatches: reaching for MCP on a one-off call, and hand-rolling a direct integration for something many apps will share.
  • A stateful MCP server holds per-client session state in memory and needs sticky-session routing to scale across instances; a stateless server treats each request as self-contained and scales horizontally behind a standard load balancer. A single-user local dev tool can be stateful without issue; a multi-tenant SaaS product serving thousands of concurrent sessions needs a stateless design or externalized session state (e.g., Redis).
  • The connection path has three layers: entry point (Claude.ai, Claude Code, a custom app), build-time interface (direct API, SDKs, MCP, Agent SDK), and delivery route (Anthropic direct, AWS Bedrock, GCP Vertex AI, Microsoft Foundry) — delivery route is a separate decision from build-time interface, decided by the client's existing compliance, billing, and identity commitments, not by model capability.
  • Microsoft Foundry fits organizations with deep existing Azure/Microsoft 365 investment — it inherits Azure AD (Entra ID) identity integration, consolidates billing onto an existing Microsoft agreement, and keeps data inside an already-approved compliance boundary, none of which relates to model quality.
  • DPA (Data Processing Agreement) and ZDR (Zero Data Retention) are contractual data-handling terms that can gate which delivery route a client is legally permitted to use, alongside BAA, HIPAA, GDPR, FedRAMP, and data residency.

Check Your Understanding

Test what you learned in this lesson.

Q1.A platform team is building a document-search capability that will be consumed by five different internal Claude-based tools, each maintained by a different team, and the search service itself will be versioned and released on its own schedule. Which integration mechanism fits best?

Q2.A developer wraps a single local CLI tool for use in exactly one Claude Code workflow on their own machine, with no plan for anyone else to use it. What transport/mechanism fits, and why?

Q3.A customer-support agent needs to hand off complex billing disputes to a separate system that performs its own multi-step research, decides which records to pull, and produces a recommended resolution using its own judgment. What kind of connection is this?

Q4.Which pairing correctly matches an MCP transport to its intended deployment shape?

Q5.An MCP server is being redesigned to back a multi-tenant SaaS product serving thousands of concurrent agent sessions, running behind multiple load-balanced server instances. The current design holds each client's session state in the memory of whichever instance first handled that client. What is the architecturally correct fix?

Q6.A regional insurance carrier has 4,000 employees, all on Microsoft 365 E5 with identity centralized in Azure AD (Entra ID), and an existing Microsoft enterprise agreement covering its cloud spend and compliance posture. It wants to build a Claude-based claims-adjuster assistant. Model capability is identical whether it calls Anthropic directly or through Microsoft Foundry. Which delivery route is the architecturally correct recommendation, and why?

Practice This Lesson

PrepGenAICerts.com is an independent third-party exam-prep platform for the Claude Certified Architect (CCA-F) certification. We are not affiliated with, endorsed by, or acting on behalf of Anthropic PBC.

Note: New premium upgrades are temporarily paused while we resolve an issue with our payment provider. Existing premium members retain full access.