AI ENGINEERING: DEEP DIVE · MODULE 06 — AGENTS & ORCHESTRATION INTERNALS · 18 A hands-on series · math + code

Module 6.3

A schema, not a shared language

Agents don't communicate in prose, and they don't share some special "agent language." They exchange JSON, validated against a schema, over a plain protocol — MCP (Model Context Protocol) is the current standard for exactly this. Step through a real exchange.

MCP EXCHANGE — NIMBUS ORCHESTRATOR ↔ NIMBUS TOOLS SERVER
Step 1 of 4

The math

A schema is just a type contract

JSON-RPC envelope
{jsonrpc, id, method, params}
every message, both directions, same shape
id links a request to its eventual response
Input schema
{type, properties, required}
JSON Schema — the same format OpenAPI uses
arguments are validated before the tool ever runs
Discovery
tools/list → tools/call
the client learns what's available at runtime
no hardcoded tool list on the client side

This is deliberately unglamorous — MCP's entire contribution is agreeing on this shape so any client can talk to any server without custom integration code.

The code

A minimal MCP tool, server-side

nimbus_mcp_server.py
from mcp.server import Server

server = Server("nimbus-tools")

@server.tool(
    name="get_export_log",
    description="Look up the most recent export attempt for an account",
    input_schema={
        "type": "object",
        "properties": {"account_id": {"type": "string"}},
        "required": ["account_id"]
    }
)
async def get_export_log(account_id: str):
    return lookup_export_status(account_id)   # your real implementation

Everything the orchestrator saw in tools/list — the name, the description, the schema — came straight from this decorator. Nothing was written twice.

The Nimbus thread

The same pattern, agent to agent

A Nimbus "billing agent" and a "support orchestrator" agent talk to each other the exact same way: the orchestrator doesn't need to understand how billing computes a refund — it sends a schema-validated request ({"amount": 12.50, "reason": "quota_overage_credit"}) and gets back a schema-validated response. "Multi-agent" doesn't introduce a new communication mechanism — it's Module 2.1's model-output-boundary and this page's schema-validated message, applied between two agents instead of one agent and one tool.

So what

Agents don't need to "understand" each other — they need a schema both sides agree to validate against.