Module 6.3
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.
The math
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
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
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.