This project demonstrates two different approaches to agent communication:
- Master Control Program (MCP) - A centralized server-based approach where agents communicate through a central server
- Agent-to-Agent (A2A) - A decentralized peer-to-peer approach where agents communicate directly with each other
- Create and activate a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install dependencies:
pip install -r requirements.txt- Start the MCP server:
python cli.py run-mcp-server- In separate terminals, start one or more MCP agents:
python cli.py run-mcp-agent --agent-id agent1
python cli.py run-mcp-agent --agent-id agent2The MCP server will track all connected agents and their status. You can view the status by opening http://localhost:5000 in your browser.
- Start the first A2A agent:
python cli.py run-a2a-agent --agent-id a2a1 --port 5001- Start additional A2A agents, connecting them to existing agents:
python cli.py run-a2a-agent --agent-id a2a2 --port 5002 --peer localhost:5001
python cli.py run-a2a-agent --agent-id a2a3 --port 5003 --peer localhost:5001 --peer localhost:5002A2A agents will automatically discover other agents through their initial peers. You can type messages in any agent's terminal to broadcast them to all connected agents.
- Centralized server that tracks all agents
- Agents register with the server and maintain connection through heartbeats
- Server provides a web interface to monitor agent status
- Simple and reliable but has a single point of failure
- Decentralized peer-to-peer network
- Agents connect directly to each other
- Messages are flooded through the network
- More resilient but requires more complex coordination
- No single point of failure
a2a_mcp/
├── agents/ # Agent implementations
│ ├── mcp_agent.py # MCP-based agent
│ └── a2a_agent.py # Peer-to-peer agent
├── mcp/ # MCP server implementation
│ └── server.py # Flask-based MCP server
├── cli.py # Command-line interface
└── requirements.txt # Python dependencies
Feel free to submit issues and pull requests to improve the demonstration.