Skip to main content
Back to Blog

The Rise of Agentic AI: Understanding MCP and A2A Protocols

An exploration of the emerging protocols enabling AI agents to communicate and collaborate, including Model Context Protocol (MCP) and Agent-to-Agent (A2A) communication.

10 min read
Share:

The Paradigm Shift

We're witnessing a fundamental transformation in how AI systems are architected. The era of monolithic models—single endpoints that receive a prompt and return a response—is giving way to something far more powerful: ecosystems of specialized agents that perceive, reason, act, and collaborate.

This isn't just an incremental improvement. It's a paradigm shift that changes what AI systems can accomplish. A single LLM, no matter how capable, is fundamentally limited to generating text based on its training data and current context. An agentic system can browse the web, execute code, query databases, interact with APIs, coordinate with other agents, and iteratively refine its approach based on real-world feedback.

At Goji AI, we've built multi-agent systems that orchestrate dozens of specialized agents to accomplish complex tasks that would be impossible for any single model. This post explores the emerging standards that make such systems possible, with a focus on Anthropic's Model Context Protocol (MCP) and the broader challenge of agent-to-agent communication.

What Makes an Agent "Agentic"?

Before diving into protocols, let's establish what distinguishes an agentic system from a simple LLM application:

Autonomy: Agents can take actions without human intervention for each step. They decide what to do next based on their observations and goals.

Tool Use: Agents interact with external systems—databases, APIs, file systems, web browsers. They're not limited to generating text.

Planning and Reasoning: Agents break complex tasks into subtasks, maintain state across interactions, and adapt their plans based on intermediate results.

Persistence: Agents can run over extended periods, maintaining context and making progress toward long-term goals.

Collaboration: Agents can work together, delegating tasks to specialists and synthesizing results.

The challenge is that these capabilities require robust interfaces between the agent (the LLM making decisions) and the external world. That's where protocols like MCP come in.

Model Context Protocol (MCP): The Universal Adapter

MCP, introduced by Anthropic in November 2024, has become the de-facto standard for connecting AI models to external tools and data sources in just one year. In December 2025, Anthropic donated MCP to the Agentic AI Foundation (AAIF) under the Linux Foundation, co-founded by Anthropic, Block, and OpenAI, with support from Google, Microsoft, AWS, and Cloudflare.

2025 milestones:

  • March 2025: OpenAI officially adopted MCP across its products, including ChatGPT desktop
  • May 2025: Microsoft and GitHub joined MCP's steering committee; Windows 11 preview embraces MCP
  • November 2025: First anniversary spec release with asynchronous operations, statelessness, and server identity
  • December 2025: MCP SDK reaches 97 million monthly downloads with 10,000+ public servers

Think of MCP as a universal adapter that allows any LLM to work with any tool, without custom integration code for each combination.

The Problem MCP Solves

Before MCP, connecting an LLM to external tools required bespoke integration:

  • Define the tool's interface in the model's function-calling format
  • Write glue code to translate between the model's output and the tool's API
  • Handle authentication, error cases, and response formatting
  • Repeat for every model-tool combination

This doesn't scale. If you have M models and N tools, you need M×N integrations.

MCP introduces a standardized protocol layer. Tools implement the MCP server interface once, and any MCP-compatible model can use them. Models implement the MCP client interface once, and they can use any MCP server. Now you need only M+N implementations, not M×N.

MCP Architecture

An MCP system consists of three components:

MCP Hosts: The application environment where the model runs (Claude Desktop, an IDE, a custom application). Hosts manage the lifecycle of server connections.

MCP Clients: Protocol-level components within the host that handle communication with servers.

MCP Servers: Lightweight programs that expose tools, resources, and prompts to clients through the standardized protocol.

What MCP Servers Expose

MCP servers can provide three types of capabilities:

Tools: Executable functions the model can invoke. Each tool has a name, description, and JSON Schema for its parameters. Examples:

  • search_web(query: string) — Web search
  • read_file(path: string) — File system access
  • execute_sql(query: string, database: string) — Database queries
  • send_email(to: string, subject: string, body: string) — Email automation

Resources: Data sources the model can read. Resources are identified by URIs and can be static (files) or dynamic (database records, API responses). The protocol supports pagination and subscriptions for large or changing data.

Prompts: Pre-defined interaction templates that help models use tools effectively. A prompt might encode best practices for a particular workflow, like "When searching for academic papers, always check publication date and citation count."

Protocol Mechanics

MCP uses JSON-RPC 2.0 over standard I/O (for local servers) or HTTP with Server-Sent Events (for remote servers). The message flow:

  1. Initialization: Client connects and requests server capabilities
  2. Discovery: Client queries available tools, resources, and prompts
  3. Invocation: Client calls tools with parameters; server executes and returns results
  4. Streaming: Long-running operations stream progress updates
  5. Completion: Server returns final result or error

Here's what a tool invocation looks like:

Request:

Code
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "search_web",
    "arguments": {
      "query": "MCP protocol specification"
    }
  },
  "id": 1
}

Response:

Code
{
  "jsonrpc": "2.0",
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Found 15 results for 'MCP protocol specification'..."
      }
    ]
  },
  "id": 1
}

Security Model

MCP includes a capability-based security model:

  • Servers declare what permissions they need
  • Hosts can restrict which servers a client connects to
  • Users approve sensitive operations (file writes, network access, code execution)
  • Servers can implement their own authentication for external services

This is crucial for production deployments where agents need access to sensitive systems but that access must be controlled and auditable.

Building MCP Servers

Creating an MCP server is straightforward. Anthropic provides SDKs for Python and TypeScript. A minimal Python server:

Python
from mcp.server import Server
from mcp.types import Tool, TextContent

server = Server("my-server")

@server.tool()
async def calculate(expression: str) -> list[TextContent]:
    """Evaluate a mathematical expression."""
    result = eval(expression)  # Don't do this in production!
    return [TextContent(type="text", text=str(result))]

if __name__ == "__main__":
    server.run()

In practice, you'd add error handling, input validation, authentication, and proper sandboxing for code execution.

The MCP Ecosystem

The MCP ecosystem is growing rapidly. Notable servers include:

  • Filesystem: Read/write local files
  • GitHub: Repo operations, issues, PRs
  • Slack: Channel messaging, search
  • PostgreSQL/SQLite: Database queries
  • Puppeteer/Playwright: Browser automation
  • Google Drive: Document access
  • Memory: Persistent storage across conversations

The composability is powerful. An agent with access to filesystem, GitHub, and terminal servers can autonomously write code, test it, commit changes, and open pull requests.

Agent-to-Agent Communication: The Next Frontier

MCP solves agent-to-tool communication. But what about agent-to-agent communication? When you have multiple specialized agents that need to collaborate, how do they talk to each other?

This is an active area of development without a single dominant standard yet. Let me describe the key patterns and our approach at Goji AI.

Why Multi-Agent Systems?

Single-agent systems hit limits:

Specialization: Different tasks benefit from different model configurations, prompts, and tool access. A code review agent needs different capabilities than a documentation agent.

Parallelization: Complex tasks decompose into independent subtasks that can run concurrently. Waiting for a single agent to do everything sequentially is slow.

Isolation: Separating concerns limits blast radius when something goes wrong. A bug in your email agent shouldn't crash your code execution agent.

Scalability: You can scale specific agents independently based on demand.

Orchestration Patterns

Hierarchical (Coordinator-Worker): A central coordinator agent receives tasks, breaks them into subtasks, delegates to worker agents, and synthesizes results. This is the most common pattern.

Pros: Clear control flow, easy to debug, straightforward error handling. Cons: Coordinator is a bottleneck and single point of failure.

Peer-to-Peer: Agents communicate directly as needed without central coordination. Each agent knows about others and can request their services.

Pros: No bottleneck, more resilient. Cons: Complex to reason about, potential for circular dependencies, harder to monitor.

Blackboard: Agents share a common state (the "blackboard"). Each agent watches for relevant changes and acts when it can contribute. Results are written back to the blackboard.

Pros: Loose coupling, flexible workflows. Cons: Coordination through shared state is tricky, potential race conditions.

Event-Driven: Agents publish and subscribe to events. When an agent completes work, it publishes an event that triggers downstream agents.

Pros: Highly decoupled, natural for async workflows. Cons: Event storms, debugging distributed workflows.

Designing Agent Communication

Whatever pattern you choose, agents need to exchange structured information. Key design decisions:

Message Format: We use a standardized envelope with:

  • sender: Which agent sent this
  • recipient: Target agent(s)
  • message_type: Request, response, notification, error
  • correlation_id: Links requests to responses
  • payload: The actual content (task-specific)
  • metadata: Timestamps, priority, tracing IDs

Capability Discovery: Agents should be able to query what other agents can do. We maintain a registry where agents publish their capabilities:

Code
{
  "agent_id": "code-reviewer",
  "capabilities": ["code_review", "security_audit"],
  "input_schema": {...},
  "output_schema": {...}
}

Context Passing: When delegating to another agent, how much context do you pass?

  • Full conversation history (expensive, complete)
  • Summarized context (cheaper, may lose details)
  • Only task-relevant context (efficient, requires good extraction)

We typically pass a task description, relevant context (not full history), and expected output format.

Error Handling: Agents fail. Networks partition. LLMs hallucinate. You need:

  • Timeouts on all inter-agent calls
  • Retry with exponential backoff
  • Fallback strategies (try a different agent, fail gracefully)
  • Circuit breakers to prevent cascade failures

Our Multi-Agent Architecture

At Goji AI, we've evolved toward a pragmatic hybrid:

Coordinator Layer: A lightweight orchestrator that:

  • Receives high-level tasks
  • Maintains task state machine
  • Routes to appropriate specialist agents
  • Handles timeouts and retries
  • Aggregates results

The coordinator is NOT an LLM—it's deterministic routing logic. This keeps it fast and predictable.

Specialist Agents: Each specialist is an LLM with:

  • Focused system prompt
  • Relevant tool access via MCP
  • Specific input/output schemas

Examples from our system:

  • Research Agent: Web search, document retrieval, synthesis
  • Analysis Agent: Data processing, calculations, chart generation
  • Writing Agent: Content generation, editing, formatting
  • Code Agent: Generation, review, execution, debugging
  • Critic Agent: Evaluates other agents' outputs for quality

Communication Bus: Agents communicate through a message queue (Redis Streams in our case). This gives us:

  • Persistence (messages survive crashes)
  • Observability (we can inspect all inter-agent communication)
  • Replay (debugging by replaying message sequences)
  • Scaling (add more workers for busy agents)

Handling Agent Disagreement

When you have multiple agents, they sometimes disagree. Our approaches:

Confidence Scores: Agents output confidence with their responses. Low confidence triggers verification by another agent or escalation to human.

Ensemble Voting: For critical decisions, we query multiple agents and take consensus. Disagreement flags uncertainty.

Hierarchical Override: Some agents have authority over others. The critic agent can reject outputs from writing agents and request revision.

Human-in-the-Loop: For high-stakes or ambiguous situations, escalate to human judgment. The system should know its limits.

Looking Forward: The Agent Protocol Landscape

The space is evolving rapidly. Beyond MCP, watch for:

Google's A2A (Agent-to-Agent): Google is developing protocols for agent interoperability, focusing on enterprise use cases with strong identity and authorization.

LangChain/LangGraph: The LangChain ecosystem is building agent orchestration primitives, though more framework than protocol.

AutoGen: Microsoft's framework for multi-agent conversations, with interesting patterns for agent collaboration.

OpenAI Assistants API: While not a protocol, OpenAI's Assistants API provides built-in tools (code interpreter, retrieval) and thread management that simplify certain agentic patterns.

The industry would benefit from convergence on standards for:

  • Agent capability description
  • Inter-agent message formats
  • Distributed agent coordination
  • Agent identity and trust

We're still early. Expect consolidation over the next 1-2 years.

Practical Recommendations

If you're building agentic systems today:

  1. Adopt MCP for tool integration. It's well-designed, has momentum, and will save you integration work as the ecosystem grows.

  2. Start with hierarchical orchestration. It's the easiest pattern to reason about and debug. Add complexity only when you have evidence you need it.

  3. Invest in observability. Distributed agent systems are hard to debug. Log all inter-agent communication. Implement tracing. Build replay capabilities.

  4. Design for failure. Every agent call can fail. Every network call can timeout. Build resilience from day one.

  5. Keep humans in the loop. Fully autonomous agents are risky. Design checkpoints where humans can review, correct, and guide.

  6. Measure end-to-end. It's easy to optimize individual agents while overall system quality degrades. Track user outcomes, not just agent metrics.

Conclusion

Agentic AI represents the next major evolution in AI systems. Protocols like MCP are laying the foundation for interoperable, composable agent ecosystems. Multi-agent architectures unlock capabilities no single model can achieve.

We're still in the early chapters of this story. The teams building robust agent infrastructure today will have significant advantages as these patterns mature and scale.

Frequently Asked Questions

Enrico Piovano, PhD

Co-founder & CTO at Goji AI. Former Applied Scientist at Amazon (Alexa & AGI), focused on Agentic AI and LLMs. PhD in Electrical Engineering from Imperial College London. Gold Medalist at the National Mathematical Olympiad.

Related Articles