multiagent-mcp
🌐 multiagent-mcp
Centro de Toma de Turnos Colaborativo Multiagente sobre el Protocolo de Contexto de Modelo (MCP)
Orquesta diálogos multiagente sincronizados, interacciones humano-en-el-bucle (@user), colas de turnos impulsadas por menciones y seguimiento de transcripciones Markdown en vivo en disco.
📖 Descripción General
multiagent-mcp es un servidor especializado del Protocolo de Contexto de Modelo (MCP) diseñado para la coordinación multiagente de LLM. Permite que múltiples agentes de IA (por ejemplo, Arquitecto, Revisor, Optimizador) y un usuario humano (@user) participen en discusiones estructuradas de toma de turnos con conciencia asíncrona.
En lugar de generaciones concurrentes caóticas o sondeos manuales complicados, multiagent-mcp coordina los turnos a través de @menciones explícitas, mantiene una cola de turnos FIFO interna, maneja barreras de sincronización de llegada, proporciona segmentación incremental de mensajes no leídos y escribe una transcripción Markdown atómica y en vivo en el disco en tiempo real.
flowchart TD
subgraph Clients["Agents & User"]
A["🤖 Agent @Alice\n(Architect)"]
B["🤖 Agent @Bob\n(Reviewer)"]
U["👤 User @user\n(Decider)"]
end
subgraph Hub["multiagent-mcp Server (FastMCP)"]
RM["RoomManager Engine"]
TQ["FIFO Turn Queue\n(+1 per @mention)"]
AB["Arrival Barrier &\nWakeup Broadcast"]
UMS["Incremental Unread Slicing\n(last_read_seq_id)"]
end
subgraph Storage["On-Disk Live Transcript"]
MD["📜 Obsidian / Markdown Note\n(Live File Tracking)"]
end
A -->|"1. join_conversation()"| AB
B -->|"2. join_conversation()"| AB
AB -->|"3. Global Wakeup & Welcome"| Clients
A -->|"4. send_message(@Bob, ...)"| RM
RM -->|"Update Turn Queue"| TQ
RM -->|"Append Message"| MD
RM -->|"Wakeup Target"| B
B -->|"5. wait_for_turn() / send_message(@user)"| RM
RM -->|"Signal @user Turn"| U
U -->|"6. send_message(@Alice, ...)"| RMRelated MCP server: MCP Multiagent Bridge
✨ Características Principales
1. Toma de Turnos Basada en Menciones (@<Nombre>) y Desduplicación
Los turnos se pasan naturalmente entre agentes y el usuario etiquetando identificadores en el contenido del mensaje (por ejemplo,
"@Bob ¿qué opinas?").Menciones Dirigidas: Los agentes solo deben mencionar a los participantes que son directamente interpelados o que se espera que respondan, en lugar de etiquetar a todos ciegamente.
Etiqueta de Transmisión Global (
@all): En un mensaje público (is_private=False), etiquetar@allse dirige a todos los participantes activos y encola a cada uno de ellos para +1 punto de turno.Aislamiento de Bloques de Código: Las menciones dentro de bloques de código delimitados (
```) o en línea (`) se eliminan automáticamente antes del análisis para evitar activaciones falsas de turnos.Desduplicación: Etiquetar
@Bobvarias veces dentro del mismo mensaje encola a@Bobexactamente una vez (+1 punto máximo por participante distinto por mensaje).Validación: Si un mensaje no contiene menciones válidas de participantes activos, el servidor lo rechaza con un error de validación descriptivo que especifica los identificadores disponibles o
@all.
2. Barrera de Llegada y Transmisión de Activación Global
Cuando los agentes se unen secuencialmente a través de
join_conversation, el primer participante queda bloqueado en una barrera de sincronización.Una vez que se han unido $ ge 2$ participantes, el servidor transmite un aviso de llegada (
@Bob ha llegado a la conversación), desbloquea automáticamente a los participantes en espera e inicia el diálogo.
3. Mensajería Pública vs. Privada (is_private=True)
Mensajes Públicos: Se añaden a la transcripción, se entregan a todos los participantes y activan a todos los oyentes en espera.
Mensajes Privados (
is_private=True) :Visibles y entregados solo al remitente y a los destinatarios mencionados explícitamente.
@allProhibido: Llamaris_private=Truecon@allgenera unValueErrorexplícito.Formateados con bloques dedicados
🔒 [Mensaje Privado]en la transcripción para el usuario humano.
Prohibición Estricta de Transcripción: Se prohíbe estrictamente a los agentes leer el archivo de transcripción Markdown en disco directamente (a través de
view_fileo comandos de shell), garantizando cero fugas de información fuera de banda.
4. Seguimiento de Transcripción Markdown en Vivo
Todos los mensajes, tablas de participantes y avisos del sistema se escriben atómicamente en un archivo Markdown especificado (
filepath).Permite la inspección visual en tiempo real en editores como Obsidian, Cursor o VS Code (ideal para monitoreo en pantalla secundaria).
5. Segmentación Incremental de Mensajes No Leídos
Cada participante mantiene un
last_read_seq_id.Las llamadas a
wait_for_turnosend_messagebloqueante devuelven solo los mensajes no leídos recién llegados (seq_id > last_read_seq_id), ahorrando contexto del LLM y evitando procesamiento repetitivo.
📦 Instalación y Configuración
Requisitos Previos
Python $ ge 3.10$
Gestor de paquetes
pipouv
Instalación Estándar
Clona el repositorio e instala en modo editable:
git clone https://github.com/hjamet/multiagent-mcp.git
cd multiagent-mcp
pip install -e .Para instalar dependencias de desarrollo (pruebas con pytest):
pip install -e ".[dev]"🚀 Ejecución del Servidor
multiagent-mcp soporta tanto Entrada/Salida Estándar (stdio) (para integración local con CLI en Claude Desktop, Antigravity, Cursor) como Eventos Enviados por el Servidor (sse) (para microservicios HTTP/en red).
1. Modo Stdio (Predeterminado para IDEs y Aplicaciones de Escritorio)
multiagent-mcp stdio2. Modo Servidor SSE (Subagentes HTTP y en Red)
# Default binding: 127.0.0.1:8000
multiagent-mcp serve
# Custom host and port
multiagent-mcp serve --host 0.0.0.0 --port 8000Cuando se ejecuta en modo SSE, el endpoint MCP está disponible en http://127.0.0.1:8000/sse.
⚙️ Configuración del Cliente MCP
1. Configuración de Google Antigravity y Cursor
Añade multiagent-mcp a tu mcp_servers.json (o .cursor/mcp.json / .gemini/antigravity/mcp_servers.json):
A través de Stdio:
{
"mcpServers": {
"multiagent-mcp": {
"command": "multiagent-mcp",
"args": ["stdio"]
}
}
}A través de SSE (Servidor Remoto/Local):
{
"mcpServers": {
"multiagent-mcp": {
"url": "http://127.0.0.1:8000/sse"
}
}
}2. Configuración de Claude Desktop
Edita tu claude_desktop_config.json (ubicado en %APPDATA%\Claude\claude_desktop_config.json en Windows o ~/Library/Application Support/Claude/claude_desktop_config.json en macOS):
{
"mcpServers": {
"multiagent-mcp": {
"command": "multiagent-mcp",
"args": ["stdio"]
}
}
}🛠️ Referencia de Herramientas
El servidor expone 4 herramientas FastMCP:
classDiagram
class MultiAgentHub {
+init_conversation(filepath, participants, topic) dict
+join_conversation(handle, name, timeout_seconds) TurnResult
+list_participants() dict
+send_message(sender, content, is_private, timeout_seconds) TurnResult
}1. init_conversation
Inicializa o reinicia una sala de conversación, limpia las estructuras de memoria y genera el archivo de transcripción Markdown inicial.
Parámetros:
Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|
| Sí | — | Ruta de destino para el archivo de transcripción Markdown. |
|
| Sí | — | Lista de identificadores de participantes esperados (ej. |
|
| No |
| Tema de la conversación o contexto informativo. |
Devuelve (dict):
{
"status": "initialized",
"filepath": "notes/Discussions/Architecture.md",
"topic": "Multi-Agent Hub Protocol",
"participants": ["@user", "@Alice", "@Bob"],
"message": "Room initialized with 3 participants."
}2. join_conversation
Registra a un participante en la sala. Maneja las barreras de sincronización de llegada y transmite avisos de llegada.
Parámetros:
Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|
| Sí | — | Identificador del participante (ej. |
|
| No |
| Nombre para mostrar opcional (por defecto, identificador limpio). |
|
| No |
| Tiempo de espera en segundos si está bloqueado por un turno. |
Devuelve (TurnResult):
{
"status": "joined",
"active_turn": "@Alice",
"new_messages": [],
"current_queue": [],
"active_participants": ["@user", "@Alice", "@Bob"],
"system_notice": "Joined room. Active participants: 3"
}3. list_participants
Consulta los participantes actuales de la sala, el orador del turno activo, la cola de turnos y el recuento total de mensajes.
Parámetros: Ninguno.
Devuelve (dict):
{
"participants": [
{
"handle": "@Alice",
"name": "Alice Architect",
"status": "active",
"joined_at": "2026-08-18T10:20:00+00:00",
"last_read_seq_id": 4
}
],
"active_participants": ["@Alice", "@Bob", "@user"],
"active_turn": "@Bob",
"turn_queue": ["@user"],
"message_count": 5,
"topic": "Architecture Review",
"filepath": "notes/Discussions/Architecture.md"
}4. send_message
Publica un mensaje público o privado en la sala. Valida las menciones, actualiza la cola de turnos, añade al archivo Markdown y pone al remitente en un bucle de espera hasta que sea su próximo turno o hasta que llegue un nuevo mensaje, devolviendo solo mensajes nuevos no leídos al desbloquearse.
Parámetros:
Parámetro | Tipo | Obligatorio | Predeterminado | Descripción |
|
| Sí | — | Identificador del remitente (ej. |
|
| Sí | — | Contenido del mensaje. Debe incluir al menos una mención |
|
| No |
| Si es |
|
| No |
| Segundos máximos de espera antes de ceder el estado del turno. |
Devuelve (TurnResult):
{
"status": "your_turn",
"active_turn": "@Alice",
"new_messages": [
{
"id": 4,
"seq_id": 4,
"sender": "@Bob",
"recipients": ["@Alice"],
"content": "I agree with your proposal @Alice.",
"is_private": false,
"timestamp": "2026-08-18T10:21:00+00:00"
}
],
"current_queue": ["@user"],
"active_participants": ["@Alice", "@Bob", "@user"],
"system_notice": "Woken up by incoming message/mention for @Alice."
}💡 Integración en el Mundo Real: Habilidad multiagent-chat
La habilidad multiagent-chat demuestra cómo un supervisor orquesta subagentes y @user en Obsidian:
Secuencia de Ejecución
sequenceDiagram
autonumber
actor Henri as 👤 Henri (@user)
participant AGY as 👑 Antigravity (Supervisor)
participant Hub as ⚡ multiagent-mcp
participant Alice as 🤖 @Alice (Architect)
participant Bob as 🤖 @Bob (Reviewer)
participant MD as 📜 Live Transcript Note
Henri->>AGY: "Launch debate on AIVC memory protocol"
AGY->>Hub: init_conversation("notes/Debat.md", ["@user", "@Alice", "@Bob"], "AIVC Memory")
Hub->>MD: Creates header and participant table
par Spawn Subagents
AGY->>Alice: invoke_subagent(Role="@Alice", Prompt="...")
AGY->>Bob: invoke_subagent(Role="@Bob", Prompt="...")
end
Alice->>Hub: join_conversation("@Alice")
Note over Alice,Hub: Alice waits at arrival barrier
Bob->>Hub: join_conversation("@Bob")
Hub->>MD: Append "🔔 @Bob est arrivé dans la conversation"
Hub-->>Alice: Wakeup broadcast
Alice->>Hub: send_message("@Alice", "We should use SQLite vector cache. What do you think @Bob?", block=True)
Hub->>MD: Append Alice's message
Hub-->>Bob: Wakeup & Assign Turn
Bob->>Hub: send_message("@Bob", "Good idea, but let's check latency. @user do you approve?", block=True)
Hub->>MD: Append Bob's message
Hub-->>AGY: @user mentioned -> Signal turn to Supervisor
AGY-->>Henri: "C'est à vous de parler : Bob demande votre arbitrage sur la latence."
Henri->>AGY: "Je valide SQLite, la latence est négligeable."
AGY->>Hub: send_message("@user", "Je valide SQLite, la latence est négligeable @Alice.", block=False)
Hub->>MD: Append user message
Hub-->>Alice: Unblock Alice📜 Formato de Transcripción en Vivo
A continuación se muestra un ejemplo del archivo Markdown en vivo generado por multiagent-mcp:
# Multi-Agent Room
- **Fichier :** `notes/Discussions/Architecture_Review.md`
- **Sujet :** Multi-Agent Hub Protocol & AIVC Memory
- **Initialisé le :** 2026-08-18 10:20:00
## Participants
| Handle | Nom | Statut | Rejoint le |
|---|---|---|---|
| @user | Henri Jamet | active | 2026-08-18 10:20:00 |
| @Alice | Alice Architect | active | 2026-08-18 10:20:02 |
| @Bob | Bob Reviewer | active | 2026-08-18 10:20:04 |
---
## Fil de discussion
> 🔔 **Système :** @Bob est arrivé dans la conversation
### @Alice ➔ @Bob (2026-08-18 10:20:10 UTC)
Nous devons privilégier un protocole à mémoire partagée pour réduire la latence inter-processus. Qu'en penses-tu @Bob ?
---
### 🔒 [Message Privé] @Bob ➔ @Alice (2026-08-18 10:20:30 UTC)
Vérifions d'abord la compatibilité Windows avant d'interpeller l'utilisateur.
---
### @Bob ➔ @user (2026-08-18 10:21:00 UTC)
D'accord sur le principe. @user, validez-vous cette approche pour le déploiement local ?
---
### @user ➔ @Alice, @Bob (2026-08-18 10:21:45 UTC)
Approche validée, privilégiez la simplicité d'implémentation @Alice.
---🧪 Pruebas
El conjunto de pruebas cubre:
Normalización de participantes y limpieza de identificadores (
@Alice,Alice$\to$@Alice).Extracción de menciones y eliminación de bloques de código (
```/`).Sincronización de barrera de llegada y transmisión de activación.
Control de acceso a mensajes privados.
Segmentación incremental de mensajes no leídos.
Registro de herramientas FastMCP y comandos CLI (
serve/stdio).
Ejecuta las pruebas usando pytest:
pytest📄 Licencia
Este proyecto está licenciado bajo la Licencia MIT.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceEnables structured team communication for Claude Code agents through Slack-like channels and direct messages. Supports project isolation, subscription management, and agent notes for sophisticated multi-agent collaboration workflows.358MIT
- Alicense-qualityDmaintenanceEnables secure coordination between multiple LLM agents through authenticated messaging, status updates, and conversation management. Features automatic secret redaction, rate limiting, and audit trails for safe multi-agent collaboration in development environments.MIT
- Alicense-qualityCmaintenanceEnables AI agents to communicate with each other through Slack-like room-based channels with messaging, mentions, presence management, and long-polling for real-time collaboration.194MIT
- Alicense-qualityBmaintenanceEnables Cursor agents to communicate via a shared chat room, allowing them to ask questions, share status, and warn about conflicts while collaborating on the same repo.710MIT
Related MCP Connectors
Durable agent-to-agent handoffs and shared scratchpad for multi-agent workflows.
Agent-to-agent network for teams: dm, who-knows-X routing, shared rooms. Human-in-the-loop.
The team layer for AI coding agents: shared contracts, collision alerts, E2EE sessions.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hjamet/multiagent-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server