Solution Architecture7 November 20269 min read

Building an Enterprise Agent Platform Without Buying Everything — Part 2 of 4

LangGraph and MCP solve different problems

Architecture reviews keep asking whether a team should use LangGraph or MCP, as if the two were alternatives. Part 2 of Building an Enterprise Agent Platform Without Buying Everything separates orchestration from the tool protocol, follows one insurance claim through both, and shows the controls that neither of them supplies.

#AI Agents#MCP#Solution Architecture#AI Architecture#AI Governance
Five trays of different precision components arranged in an arc around a compact assembled machine that uses only a few of the parts, with one amber control key.

At the architecture review for Sneeuberg Insurance's claims-triage agent, two teams arrived with what they believed were competing proposals. The claims engineering team wanted to build the agent on LangGraph. The integration team wanted to build it on MCP. The review chair, reasonably, asked which one the insurer should standardise on. Sneeuberg Insurance is fictional, and its systems and figures are illustrative.

The honest answer was both, or neither, depending on the question. LangGraph and the Model Context Protocol do different jobs. One decides how a piece of work moves from step to step and what it remembers along the way. The other standardises how an application discovers and calls tools and data sources. A design can use either without the other, and many good designs use both.

The more important point came later in the review. Even with both in place, the design still had no answer to the questions an insurer's risk committee asks first: whose authority is the agent acting under, who approved the payment recommendation, and where is the record kept? Neither component answers those, and neither claims to.

Two different jobs

Part 1 put LangGraph in the orchestration family and the MCP SDKs in the integration space beside the development SDKs. The distinction is worth making precise, using each project's own description, checked on 7 November 2026.

LangGraph's overview calls it "a low-level orchestration framework and runtime for long-running, stateful agents". Work is a graph of nodes and edges over shared state. Checkpoints let a run resume after a failure or a pause, and an interrupt lets a person inspect or edit state before the run continues.

The MCP specification (revision 2026-07-28) describes "an open protocol that enables seamless integration between LLM applications and external data sources and tools". Hosts run clients, clients connect to servers, and servers offer three kinds of feature: resources (context and data), prompts (templates) and tools (functions the model can call). Since December 2025 the protocol has been hosted by the Linux Foundation's Agentic AI Foundation.

Orchestration and tool protocol are two layers with two jobsTWO LAYERS, TWO JOBSWHAT HAPPENS NEXTOrchestration: LangGraphgraph, state, checkpoints, interruptsa node calls a toolWHAT CAN I REACHTool protocol: MCPdiscover and call tools, resourcesPolicy adminClaims systemDocument storeSupplied by neitherEnterprise identityBusiness authorityApproval recordAudit evidenceRisk ownership
LangGraph decides what happens next and what the run knows so far, through a graph, shared state, checkpoints and interrupts. MCP standardises how a host discovers and calls tools, resources and prompts on servers in front of Sneeuberg Insurance's systems. Either can be used without the other. The controls on the right are supplied by neither and belong to the platform.

Put simply, LangGraph answers "what happens next, and what do we know so far?" MCP answers "what can I reach, and how do I call it?" The first is about control flow and state. The second is about connection and discovery. CloudNala's earlier article API, function calling and MCP are different layers separated MCP from the APIs beneath it. This article separates it from the orchestration above it.

One claim, followed through both

Sneeuberg's triage agent handles first notification of loss for household claims. A policyholder reports a burst geyser. The agent must gather the details, check that the policy was in force, retrieve the relevant wording, estimate whether the claim falls inside the excess, and route it: fast-track, assessor visit, or referral to the special investigations unit.

Here is what each component does along that path.

The graph owns the sequence. LangGraph holds a state object for the claim: the policy number, the reported cause, the documents received, the cover decision so far and the route chosen. Each node reads and updates that state. Some nodes are plain code, such as the check that the policy was active on the date of loss. Some call a model, such as the step that classifies the cause from the policyholder's description. Edges decide what runs next. A referral edge fires when fraud indicators are present, and nothing else can reach the referral node.

MCP owns the connections. The policy administration system, the claims system and the document store each sit behind an MCP server. When a node needs the policy wording, it calls a tool on the document server. The integration team writes each server once, and any MCP-capable host at Sneeuberg can use it, not only this agent. LangChain's documentation describes an MCPAdapter for connecting LangChain agents to MCP servers, checked on 7 November 2026, so the graph and the protocol meet at a well-defined seam.

The graph owns the pause. When the route is "fast-track payment", the graph reaches an interrupt. The run stops, its state is checkpointed, and a claims handler sees the recommendation with its evidence. The handler approves, edits or rejects, and the run resumes from the checkpoint. MCP has no concept of this step. It is a property of the workflow.

MCP owns the discovery. If the document team adds a tool for retrieving endorsements, any client connected to that server can list it. The graph does not change until someone decides a node should use it. That decision is deliberate, and it should be: a new tool appearing in a list is not the same as a new step being approved in a process.

One household claim through the graph and the protocolLANGGRAPH STATE GRAPHCODEIntakeCODECheck coverMODELClassifycauseGRAPH EDGERoute claimINTERRUPTHandlerapprovalCODERecord inclaims systemMCP SERVERSDocumentserverPolicyserverClaimsserverThe claims server checks delegation limits on every write, whatever the graph says
Sneeuberg Insurance's triage graph owns the sequence, the state and the pause. Plain-code nodes check that the policy was in force, a model node classifies the cause, and an edge chooses the route. For a fast-track payment the run stops at an interrupt, is checkpointed, and resumes only after a claims handler decides. MCP servers supply the connections. The claims server checks the handler's delegation limit on every write, so authority does not depend on the graph behaving.

What each one leaves out

The value of separating the two is that it shows what each leaves to the platform.

ConcernLangGraphMCPWho supplies it at Sneeuberg
Sequence and branchingYesNoThe graph
State across steps and restartsYes, through checkpointsNoThe graph, with a durable checkpoint store
Pause for a personYes, through interruptsNoThe graph, with the claims workbench
Tool and resource discoveryNoYesMCP servers
Transport-level authorisation to a serverNoOptional, specified for HTTP transportsAn identity provider and the MCP servers
Business authority to actNoNoPolicy rules and delegation limits
Audit record of a decisionPartly, through state history and tracesNoA case record owned by claims
Risk ownershipNoNoA named business owner

Two rows deserve a closer look.

Authorisation is not authority. The MCP authorisation specification is optional and applies to HTTP-based transports. When used, it treats the MCP server as an OAuth 2.1 resource server and requires tokens issued for that specific server. That is valuable: it stops a client from reaching a server it should not. It does not tell the claims server whether this agent, acting for this handler, may recommend a payment of this size on this policy. That rule belongs to Sneeuberg's delegation-of-authority matrix, and it has to be enforced somewhere the agent cannot talk its way around. Agent capability is not agent authority sets out the distinction.

The protocol says so itself. The specification's security section states that "MCP itself cannot enforce these security principles at the protocol level" and asks implementers to build consent and authorisation flows into their applications. That is a candid statement of scope, not a weakness. It means the platform has to supply the enforcement.

Where the controls go

Sneeuberg's final design placed each control where it could actually be enforced.

  • Identity. The agent runs under a workload identity, and each run carries the identity of the handler or channel it acts for. MCP servers receive tokens scoped to that server and that purpose, as the specification requires for HTTP transports.
  • Authority. The claims server checks every write against the delegation matrix, not against the agent's request. A fast-track recommendation above the handler's limit is refused by the server, whatever the graph says.
  • Approval. The interrupt is in the graph, but the decision is recorded in the claims system, against the handler's identity, with the evidence the agent showed.
  • Gateway. Calls to MCP servers pass through a gateway that logs them and enforces an allow-list per agent. As The gateway is a control point, not a trust boundary warns, the gateway helps, but each server still checks its own permissions.
  • Audit. The case record, not the trace, is the evidence. The trace explains how the agent reached its recommendation. The case record shows who decided, under which rule.

None of this depends on LangGraph or MCP specifically. Swap the graph for another orchestration framework and the controls stay where they are. Swap MCP for direct API calls and the controls still stay where they are. That portability is a good test of whether the controls are really in the platform or only in the framework.

When you need one, the other or both

Not every agent needs both components.

  • Orchestration without MCP suits a single agent with a few tools that only it will use. Direct function calls to well-defined internal APIs are simpler, and nothing is lost if there is no second consumer.
  • MCP without heavy orchestration suits an assistant inside a host application, such as an IDE or a chat client, where the host already runs the loop and the question is only which tools and data it can reach.
  • Both suits Sneeuberg's case: a long-running, multi-step process with a human pause, calling systems that other agents and hosts will also need.

The wrong reason to adopt either is that it appeared on a list. The right reason is that a named requirement, such as a resumable pause or a tool that several hosts must share, is met by it and not by something simpler.

Questions for the architecture review

QuestionIf the answer is no
Does the process have multiple steps, branches or a pause for a person?You may not need an orchestration framework
Must the run survive a restart mid-process?Durable checkpoints are optional
Will more than one host or agent use the same tools?Direct function calls may be enough
Is every MCP server's identity and token scope defined?Do not connect it yet
Is business authority enforced by the system of record, not the agent?The design relies on the model behaving
Is the approval recorded outside the trace, against a named person?You have a log, not evidence
Can you swap the framework without moving the controls?The controls are in the wrong place

Key points

  • LangGraph manages workflow, state and transitions. MCP standardises how hosts discover and call tools, resources and prompts.
  • They are complementary. A design can use either alone, and many good designs use both.
  • MCP's authorisation, where used, controls access to a server. It does not decide business authority.
  • Neither supplies enterprise identity, authority rules, an audit record or a risk owner. Those belong to the platform.
  • Place controls where they survive a change of framework or protocol.

This is part 2 of Building an Enterprise Agent Platform Without Buying Everything. Previous: Twenty agent repositories, five capability families. Next: Framework, SDK, workflow tool or agent platform?.

How CloudNala can help

CloudNala reviews agent designs that combine an orchestration framework with MCP. We map which component owns sequence, state, pause and discovery, then trace identity, authority, approval and audit to the place each is actually enforced. The output is a control placement that survives a change of framework, and a short list of MCP servers that are ready to connect and those that are not.

Background reading: the LangGraph overview, the MCP specification and its authorisation section, all checked on 7 November 2026. For MCP in depth, see MCP in plain language and The enterprise MCP gateway.


Work with CloudNala

CloudNala helps organisations move from technology ambition to practical execution across cloud, AI, data, platform engineering and digital services.

Whether you are exploring AI, modernising your cloud environment, building a public-sector digital service, or turning an idea into a working MVP, we can help you shape the roadmap and deliver the next step.

Book an Agent Platform Review or write to us at consult@cloudnala.co.za