MCP Agentic Framework
Um framework de comunicação agentiva para colaboração multiagente usando MCP.
Documentação
MCP Agentic Framework
Um framework de comunicação baseado no Model Context Protocol (MCP) que permite que múltiplos agentes de IA colaborem por meio de mensagens assíncronas. Construído com Desenvolvimento Orientado por Testes (TDD) e princípios de programação funcional.
Visão Geral
Este framework fornece uma maneira padronizada para múltiplos agentes Claude (ou outros agentes compatíveis com MCP) de:
- Registrar-se com identidades únicas
- Descobrir outros agentes registrados
- Trocar mensagens de forma assíncrona
- Enviar transmissões para todos os agentes
- Trabalhar juntos em tarefas complexas
O framework usa armazenamento baseado em arquivos para simplicidade e portabilidade, facilitando a execução sem dependências externas.
Comparação com Sub-agentes do Claude Code
Este framework oferece uma abordagem diferente para colaboração multi-agente em comparação com o recurso de sub-agentes do Claude Code.
| Aspecto | Sub-agentes do Claude Code | MCP Agentic Framework |
|---|---|---|
| Arquitetura | Arquivos de configuração estáticos | Registro dinâmico de agentes |
| Contexto | Isolado por tarefa | Compartilhado entre agentes com filas de mensagens individuais |
| Comunicação | Unidirecional (Claude invoca o agente) | Bidirecional (agentes comunicam-se entre si) |
| Configuração | Frontmatter YAML + prompt de sistema | Registro em tempo de execução com nome e descrição |
| Flexibilidade | Comportamento predefinido | Padrões de interação adaptáveis em tempo de execução |
| Armazenamento | Diretórios .claude/agents/ | Sistema de fila de mensagens baseado em arquivos |
| Acesso a Ferramentas | Fixo no momento da configuração | Determinado pela configuração do servidor MCP |
Quando Usar Cada Abordagem
Use Sub-agentes do Claude Code quando:
- As tarefas são bem definidas e repetitivas (revisão de código, depuração, testes)
- Comportamento consistente e previsível é necessário
- Trabalho independente em problemas específicos
- Necessidade de preservar o contexto da conversa principal
Use MCP Agentic Framework quando:
- Colaboração em tempo real entre múltiplos agentes é necessária
- As tarefas exigem discussão, negociação ou consenso
- A resolução de problemas se beneficia de perspectivas diversas
- Construção de fluxos de trabalho distribuídos com coordenação de agentes
Ambos os sistemas podem ser complementares: agentes MCP podem colaborar para projetar e refinar configurações de sub-agentes, enquanto sub-agentes podem lidar com tarefas rotineiras identificadas nas discussões dos agentes MCP.
Implantação no Kubernetes
O MCP Agentic Framework pode ser implantado no Kubernetes para uso em produção com alta disponibilidade e gerenciamento fácil.
Pré-requisitos
- Cluster Kubernetes com MetalLB LoadBalancer (ou similar)
- Conta no Docker Hub (ou outro registro de contêineres)
- Executor de comandos
justinstalado (cargo install just)
Início Rápido
- Clone e navegue até o framework:
cd /home/decoder/dev/mcp-agentic-framework
- Implante com o Justfile:
# First time: Update the docker_user in Justfile
vim Justfile # Change docker_user to your Docker Hub username
# Deploy (builds, pushes, and deploys to Kubernetes)
just update
- Obtenha o IP do LoadBalancer:
just status
# Or manually:
kubectl get svc mcp-agentic-framework-lb
- Atualize a configuração do Claude (
~/.claude.json):
"agentic-framework": {
"type": "http",
"url": "http://YOUR_LOADBALANCER_IP:3113/mcp"
}
Gerenciando a Implantação
# View all available commands
just
# Deploy updates (bumps version, builds, pushes, deploys)
just update # Patch version bump (1.0.0 -> 1.0.1)
just update-minor # Minor version bump (1.0.0 -> 1.1.0)
just update-major # Major version bump (1.0.0 -> 2.0.0)
# Monitor deployment
just status # Check deployment status
just logs # Stream logs
just test-health # Test health endpoint
# Operations
just restart # Restart the deployment
just rollback # Rollback to previous version
Recursos
- Implantações sem tempo de inatividade com atualizações contínuas
- Gerenciamento automático de versões com versionamento semântico
- Verificações de saúde com reinicializações automáticas
- IP persistente do LoadBalancer via MetalLB
- Interface Web para monitorar comunicações dos agentes (abre automaticamente no primeiro agente)
Arquitetura
A implantação no Kubernetes inclui:
- Deployment: Réplica única com sondas de saúde/prontidão
- Serviço LoadBalancer: IP externo estável para acesso do Claude
- Serviço ClusterIP: Comunicação interna do cluster
Manifestos Kubernetes
Localizados no diretório k8s/:
deployment.yaml- Implantação principal da aplicaçãoloadbalancer-service.yaml- Acesso externo via MetalLB
Arquitetura
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Developer Agent │ │ Tester Agent │ │ Architect Agent │
└────────┬────────┘ └────────┬────────┘ └────────┬────────┘
│ │ │
└───────────────────────┴───────────────────────┘
│
┌──────────┴──────────┐
│ MCP Server │
│ ┌──────────────┐ │
│ │Agent Registry│ │
│ └──────────────┘ │
│ ┌──────────────┐ │
│ │ Message Store│ │
│ └──────────────┘ │
└─────────────────────┘
│
┌──────────┴──────────┐
│ File Storage │
│/tmp/mcp-agentic- │
│ framework/ │
└─────────────────────┘
Instalação
- Clone o repositório:
git clone https://github.com/Piotr1215/mcp-agentic-framework.git
cd mcp-agentic-framework
- Instale as dependências:
npm install
- Execute os testes para verificar a instalação:
npm test
Uso com Claude Desktop ou Claude Code
Usando Transporte HTTP
{
"mcpServers": {
"agentic-framework": {
"type": "http",
"url": "http://127.0.0.1:3113/mcp"
}
}
}
Para usar o transporte HTTP:
- Inicie o servidor HTTP:
npm run start:http - Adicione a configuração acima ao seu
~/.claude.json - Reinicie o Claude Desktop
Nota: O transporte HTTP suporta Server-Sent Events (SSE)
Endpoints HTTP
Ao executar com npm run start:http, os seguintes endpoints estão disponíveis:
/mcp- Endpoint MCP principal para comunicação entre agentes/health- Endpoint de verificação de saúde que retorna:{ "status": "ok", "name": "mcp-agentic-framework", "version": "1.0.0" }
Ferramentas Disponíveis
register-agent
Registra um novo agente no sistema.
Parâmetros:
name(string, obrigatório): Nome de exibição do agentedescription(string, obrigatório): Papel e capacidades do agenteinstanceId(string, opcional): Identificador de instância para cancelamento automático de registro
Exemplo:
{
"name": "DeveloperAgent",
"description": "Responsible for writing code and implementing features"
}
unregister-agent
Remove um agente do sistema.
Parâmetros:
id(string, obrigatório): Identificador único do agente
discover-agents
Lista todos os agentes atualmente registrados.
Parâmetros: Nenhum
Exemplo de Resposta:
[
{
"id": "agent_abc123",
"name": "DeveloperAgent",
"description": "Responsible for writing code",
"status": "online",
"lastActivityAt": "2024-01-20T10:30:00.000Z"
}
]
send-message
Envia uma mensagem de um agente para outro.
Parâmetros:
to(string, obrigatório): ID do agente destinatáriofrom(string, obrigatório): ID do agente remetentemessage(string, obrigatório): Conteúdo da mensagem
check-for-messages
Recupera mensagens não lidas para um agente. As mensagens são excluídas automaticamente após a leitura.
Parâmetros:
agent_id(string, obrigatório): ID do agente para verificar mensagens
Exemplo de Resposta:
{
"messages": [
{
"from": "agent_abc123",
"fromName": "DeveloperAgent",
"message": "Task completed",
"timestamp": "2024-01-20T10:30:00.000Z"
}
]
}
update-agent-status
Atualiza o status de um agente (online, offline, ocupado, ausente).
Parâmetros:
agent_id(string, obrigatório): ID do agentestatus(string, obrigatório): Novo status (um de: online, offline, busy, away)
send-broadcast
Envia uma mensagem de transmissão para todos os agentes registrados (exceto o remetente).
Parâmetros:
from(string, obrigatório): ID do agente remetentemessage(string, obrigatório): Conteúdo da mensagem de transmissãopriority(string, opcional): Nível de prioridade (low, normal, high). Padrão: 'normal'
Recursos:
- As mensagens são entregues a todos os agentes, exceto o remetente
- Funciona sem exigir que os agentes se inscrevam
- Retorna o número de destinatários
- As mensagens são prefixadas com o nível de prioridade (ex.: "[BROADCAST HIGH]")
Exemplo:
{
"from": "orchestrator",
"message": "System maintenance in 10 minutes",
"priority": "high"
}
Resposta:
{
"success": true,
"recipientCount": 5,
"errors": [] // Any delivery failures
}
get-pending-notifications
Recupera notificações pendentes para um agente.
Parâmetros:
agent_id(string, obrigatório): ID do agente
Exemplos de Casos de Uso
Colaboração Multi-Agente
1. Register agents:
- "Register an orchestrator agent for coordinating tasks"
- "Register worker1 agent for processing"
- "Register worker2 agent for analysis"
2. Orchestrator delegates tasks:
- "Send message from orchestrator to worker1: Process customer data"
- "Send message from orchestrator to worker2: Analyze market trends"
3. Workers communicate:
- "Send message from worker1 to worker2: Data ready for analysis"
4. Broadcast updates:
- "Send broadcast from orchestrator: All tasks completed"
Usando Transmissões
O recurso aprimorado de transmissão permite comunicação eficiente com todos os agentes:
// Orchestrator sends high-priority announcement
await sendBroadcast(
orchestratorId,
"Emergency: System overload detected, pause all operations",
"high"
);
// All other agents receive: "[BROADCAST HIGH] Emergency: System overload..."
// Regular status update
await sendBroadcast(
orchestratorId,
"Daily standup meeting in 5 minutes",
"normal"
);
// All agents receive: "[BROADCAST NORMAL] Daily standup meeting..."
Desenvolvimento
Executando Testes
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage
npm run test:coverage
Armazenamento
O framework armazena dados em /tmp/mcp-agentic-framework/:
agents.json: Agentes registrados com rastreamento de status e atividademessages/*.json: Arquivos de mensagens individuais (um por mensagem)
Considerações de Segurança
- Validação de entrada em todos os parâmetros das ferramentas
- Bloqueio baseado em arquivos previne condições de corrida
- Sem vulnerabilidades de travessia de caminho
- As mensagens são armazenadas apenas localmente
- Sem chamadas de rede externas
Referência da API
Objeto Agente
interface Agent {
id: string; // Unique identifier
name: string; // Display name
description: string; // Role description
status: string; // online|offline|busy|away
registeredAt: string; // ISO timestamp
lastActivityAt: string; // ISO timestamp
}
Objeto Mensagem
interface Message {
id: string; // Message ID
from: string; // Sender agent ID
to: string; // Recipient agent ID
message: string; // Content
timestamp: string; // ISO timestamp
read: boolean; // Read status
}
Casos de Uso Práticos
1. Processamento de Tarefas Orquestrado
Orchestrator → assigns tasks → Worker agents
Worker agents → process in parallel → report back
Orchestrator → broadcasts completion → all agents notified
2. Revisão de Código Distribuída
Developer → sends code → multiple Reviewers
Reviewers → work independently → send feedback
Developer → broadcasts updates → all reviewers see changes
3. Coordenação de Emergência
Monitor agent → detects issue → broadcasts alert
All agents → receive alert → adjust behavior
Coordinator → broadcasts all-clear → normal operations resume
Solução de Problemas
Problemas Comuns
-
Transmissões não recebidas
- Certifique-se de que o agente remetente está registrado
- Verifique se os agentes destinatários estão registrados
- Lembre-se de que o remetente não recebe suas próprias transmissões
-
Erros de "Agente não encontrado"
- Verifique o registro do agente
- Use
discover-agentspara listar todos os agentes - Verifique se os IDs dos agentes estão corretos
-
Mensagens não recebidas
- As mensagens são excluídas após a leitura
- Cada mensagem só pode ser lida uma vez
- Verifique o ID correto do agente
Licença
Licença MIT