Module 4: Multi-Agent Systems з MCP та A2A
Production-ready multi-agent система що демонструє дві ключові інтеграції:
- News Analysis Pipeline — 5 агентів CrewAI + MCP Sequential Thinking
- A2A Filesystem Agent — Agent-to-Agent сервер з MCP Filesystem інструментами
Архітектура
Pipeline 1: News Analysis (5 агентів + MCP)
┌─────────────────┐
│ BBC Researcher │─┐ DuckDuckGo
└─────────────────┘ │ Search
├──► ┌──────────────────┐ ┌─────────────────┐
┌─────────────────┐ │ │ Senior Analyst │ │ MCP Sequential │
│ CNN Researcher │─┤ │ (з MCP tools) │◄──────┤ Thinking Server │
└─────────────────┘ │ └──────────────────┘ └─────────────────┘
│ ▼ (npx server)
┌─────────────────┐ │ ┌──────────────────┐
│Reuters Researcher│─┘ │ Report Synthesizer│
└─────────────────┘ └──────────────────┘Pipeline 2: A2A Filesystem Agent
┌────────────────┐ HTTP/JSON-RPC ┌──────────────────┐
│ A2A Client │◄═══════════════►│ A2A Server │
│ (a2a_test_ │ │ (port 10002) │
│ client.py) │ └────────┬─────────┘
└────────────────┘ │
┌────────▼─────────┐
│ AgentExecutor │
│ (CrewAI + LLM) │
└────────┬─────────┘
│ stdio
┌────────▼─────────┐
│ MCP Filesystem │
│ Server (14 tools) │
└──────────────────┘Структура проекту
module4/
├── config.py # Конфігурація (env vars, валідація)
├── parallel_agent_with_mcp.py # Pipeline 1: News Analysis (5 агентів + MCP Thinking)
├── mcp_examples.py # Інтерактивні приклади 5 MCP серверів
│
├── a2a_server.py # Pipeline 2: A2A Filesystem Agent (HTTP сервер)
├── a2a_agent_executor.py # AgentExecutor: міст A2A CrewAI + MCP Filesystem
├── a2a_test_client.py # Тестовий A2A клієнт
│
├── requirements.txt # Python залежності
├── .env.example # Шаблон конфігурації
└── a2a/a2a-samples/ # Git submodule: приклади A2A (reference)Встановлення
Крок 1: Node.js (для MCP серверів)
node --version # v18+ рекомендовано
npx --versionЯкщо немає Node.js:
Крок 2: Python virtual environment
Важливо: потрібен Python >=3.10, sync bridge await event_queue.enqueue_event(new_agent_text_message(result))
`asyncio.to_thread()` — міст між async A2A сервером і sync CrewAI.
## Офіційні MCP сервери
| Сервер | Пакет | Опис |
|--------|-------|------|
| Sequential Thinking (*) | `@modelcontextprotocol/server-sequential-thinking` | Покрокове мислення |
| Filesystem (*) | `@modelcontextprotocol/server-filesystem /path` | Робота з файлами (14 інструментів) |
| Fetch | `@modelcontextprotocol/server-fetch` | Завантаження веб-контенту |
| Git | `@modelcontextprotocol/server-git --repository /path` | Аналіз Git репозиторіїв |
| Memory | `@modelcontextprotocol/server-memory` | Knowledge graph пам'ять |
(*) — використовуються в цьому проекті
### Як додати інший MCP сервер
server_params = StdioServerParameters( command="npx", args=["-y", "@modelcontextprotocol/server-НАЗВА"] )
with MCPServerAdapter(server_params, connect_timeout=60) as mcp_tools: agent = Agent(role='Your Role', tools=mcp_tools, ...)
## Залежності
| Пакет | Версія | Призначення |
|-------|--------|-------------|
| `crewai` | >=0.80.0 | Multi-agent framework |
| `crewai-tools[mcp]` | >=1.3.0 | MCP адаптер для CrewAI |
| `mcp` | >=1.6.0 | Model Context Protocol |
| `ddgs` | >=9.0.0 | DuckDuckGo Search (без API ключа) |
| `a2a-sdk` | >=0.3.0 | Agent-to-Agent Protocol SDK |
| `uvicorn` | >=0.30.0 | ASGI HTTP сервер |
| `click` | >=8.0.0 | CLI інтерфейс |
| `httpx` | >=0.27.0 | Async HTTP клієнт |
| `langchain` | >=1.0.0 | LLM orchestration |
| `langchain-openai` | >=1.0.0 | OpenAI integration |
| `python-dotenv` | >=1.0.0 | Environment variables |
## Troubleshooting
### "No matching distribution found for crewai"
**Проблема:** Python 3.14+ (CrewAI підтримує тільки <3.14)
**Рішення:**conda create -n myenv python=3.13 conda activate myenv pip install -r requirements.txt
### "OpenAI API key not found"
OPENAI_API_KEY=your-api-key-here # в .env export OPENAI_API_KEY="your-key" # або через export
### "command not found: npx"
brew install node # macOS
або https://nodejs.org/
### "unexpected extra inputs" в A2A agent
**Проблема:** `extra="forbid"` на top-level Pydantic моделі відхиляє kwargs від CrewAI
**Рішення:** top-level модель повинна мати `extra="ignore"`, nested — `extra="forbid"`. Вже виправлено в `a2a_agent_executor.py`.
### Timeout при підключенні до MCP
with MCPServerAdapter(server_params, connect_timeout=120) as mcp_tools:
## Корисні посилання
- [CrewAI Documentation](https://docs.crewai.com)
- [CrewAI MCP Integration](https://docs.crewai.com/en/mcp/overview)
- [Model Context Protocol](https://modelcontextprotocol.io/)
- [MCP Servers Repository](https://github.com/modelcontextprotocol/servers)
- [A2A Protocol](https://github.com/a2aproject)
- [OpenAI API Reference](https://platform.openai.com/docs/api-reference)
## License
MIT License