A single agent is easy to reason about. You send a prompt and get an answer. Then the work grows. One agent classifies, one searches, one writes. Now agent #3 needs a result from agent #1, and you cannot see where it went.
That is the real cost of multi-agent systems. The models are rarely the problem. Coordination is. This article covers how teams built these systems before 2026, what changed this year, and where DNotifier fits.
Why One Agent Stops Working
One agent breaks down when a single prompt carries too many jobs. Roles blur, tools pile up, and failures hide inside one large call. Splitting the work across named agents gives each step one job and one output.
Before 2026, most teams wired this by hand. Agent code called other agent code directly. State lived in variables, queues, or a table added late. That works in a demo. In production, nobody can say which agent ran, in what order, or with what input.
What Changed in 2026
Two open standards matured this year. Agent2Agent (A2A) defines how agents talk to each other. The Model Context Protocol (MCP) defines how agents reach tools. Neither runs your workflow, but both reduce custom glue code in multi-agent systems.
A2A reached a stable release. Before, every team invented its own handoff format. According to the Agentic AI Foundation, A2A v1.0, the first stable specification, shipped in March 2026. The A2A project’s “What’s New in v1.0” guide says requests now carry a tenant field and each interface declares its own protocol version. Agent cards can also be cryptographically signed, as described in the A2A team’s v1.0 post on DEV Community. An agent publishes a card describing what it can do, and other agents use it to delegate work. The Agentic AI Foundation announced on August 17, 2026 that A2A is joining it, beside MCP.
The limit is scope. A2A is a contract between agents. It does not run your steps or store your state.
MCP dropped sessions. MCP itself predates 2026. The change is the July revision. The MCP GitHub release marks the 2026-07-28 revision as stable. Its official changelog says protocol-level sessions are removed from the Streamable HTTP transport, so each request carries its own version and capabilities. The same changelog says experimental tasks moved into an official extension, and a new policy sets a minimum twelve-month deprecation window.
My reading: servers should be easier to scale and restart. The trade-off is migration work, because older tutorials teach the session model.
A Workflow Example
This is a hypothetical example. A support app receives “My order arrived broken.” Four steps follow:
- An intake agent classifies the request.
- Two agents run in parallel. One searches refund policy. One checks order details.
- A resolution agent drafts a decision from both results.
- A human approves before any refund moves.
Four layers work together here. Orchestration decides order and branching. Messaging moves requests between services. Model execution happens at a provider. Application state holds orders and approvals. Most design mistakes come from blurring these layers.
Where DNotifier Fits
DNotifier supports the orchestration layer, plus the model calls and messaging around it. It provides one SDK and one API with multi-model support. Here is how that maps to the example, based on the official DNotifier product docs.
- A workflow’s entry function acts as the orchestrator. Named agents register on it.
runAgentruns one agent.runAgentsruns several in parallel.ctx.stateshares data during the run. The policy and order checks fit here.- Agents can search a knowledge base with semantic search, which suits the policy lookup.
- Each agent can pick its own provider and model. Classification and drafting can use different models.
- Remote agents register by receiver ID and need a WebSocket connection. An agent can pause with
waitForMessageuntil a reply arrives. That covers the human approval. - With
observability: true, agent runs, model calls, and searches appear in the dashboard under one execution ID.
Some responsibilities stay with you. Model providers run the models. Your application owns durable data, permissions, retry rules, and the approval screen. The docs say DNotifier’s messaging is directed to receiver IDs, not topic subscriptions, and offline receivers miss live delivery. I found no documented replay, automatic retries, or checkpoints, so plan those yourself. I also found no A2A or MCP support in the docs, so treat those as a separate layer.
Mistakes to Avoid in Multi-Agent Systems
Most failures come from design, not models. Watch for these:
- Too many agents. Add one only when a job needs its own prompt, tools, or model.
- State as storage.
ctx.stateis shared for a run. Save anything important in your own database. - No tracing. Turn on observability before the first incident, not after.
- Assumed delivery. Decide what happens when a receiver is offline.
- Ignoring protocol churn. MCP changed its transport model this year. Budget time for upgrades.
FAQs
What are multi-agent systems?
They are applications where several specialized agents, each with one job, work together on a task. A coordinator decides order and passes results between them.
Do I need A2A or MCP?
Not always. Use A2A when agents from different teams or vendors must delegate to each other. Use MCP when agents need standard access to tools and data.
How do I see what each agent did?
Record every step under one execution ID. In DNotifier, enabling workflow observability does this for agent runs, model calls, and searches.
Closing Thought
Multi-agent systems fail where handoffs are invisible. Give each agent one job, keep the layers separate, and make every step traceable. To see how DNotifier handles workflows, agents, and observability, explore dnotifier.com.