When an agent needs help from another service, there is an architectural question to answer first: should that service be exposed as a tool, or should the agent delegate work to another agent?

The distinction matters when the service on the other side is itself autonomous.

A diagnostic agent, for example, may need to request missing context, investigate across several systems, maintain state across multiple exchanges, and eventually return a report. Exposing that agent as a function such as run_diagnostics() can flatten those behaviors into a tool-shaped interface.

MCP and A2A provide a cleaner separation.

MCP standardizes how models and agents interact with tools, APIs, data sources, and other capabilities. A2A standardizes communication between independent agents that need to discover one another, exchange context, delegate work, and manage stateful tasks.