Skip to main content
Glama

🌐 multiagent-mcp

Совместный многопользовательский хаб с поочередным взаимодействием на основе протокола Model Context Protocol (MCP)
Оркестрируйте синхронизированные многопользовательские диалоги, взаимодействие с человеком (@user), очереди ходов на основе упоминаний и отслеживание живого Markdown-транскрипта на диске.

Python Version MCP License: MIT Code Style: Black / Flake8


📖 Обзор

multiagent-mcp — это специализированный сервер Model Context Protocol (MCP), разработанный для координации многопользовательских LLM. Он позволяет нескольким AI-агентам (например, Архитектор, Рецензент, Оптимизатор) и человеку (@user) участвовать в структурированных, асинхронно-осознанных диалогах с поочередным взаимодействием.

Вместо хаотичных одновременных генераций или сложного ручного опроса multiagent-mcp координирует ходы через явные @упоминания, поддерживает внутреннюю FIFO-очередь ходов, обрабатывает барьеры синхронизации прибытия, предоставляет инкрементальную выборку непрочитанных сообщений и записывает атомарный живой Markdown-транскрипт на диск в реальном времени.

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, ...)"| RM

Related MCP server: MCP Multiagent Bridge

✨ Основные возможности

1. Поочередное взаимодействие на основе упоминаний (@<Имя>) и дедупликация

  • Ходы естественным образом передаются между агентами и пользователем путем упоминания тегов в содержимом сообщения (например, "@Bob что ты думаешь?").

  • Целевые упоминания: Агенты должны упоминать только тех участников, к которым непосредственно обращаются или от которых ожидают ответа, а не слепо отмечать всех.

  • Глобальный тег трансляции (@all): В публичном сообщении (is_private=False) упоминание @all адресует всех активных участников и ставит каждого из них в очередь на +1 очко хода.

  • Изоляция блоков кода: Упоминания внутри обрамленных (```) или встроенных (`) блоков кода автоматически удаляются перед разбором, чтобы предотвратить ложные срабатывания ходов.

  • Дедупликация: Многократное упоминание @Bob в одном сообщении ставит @Bob в очередь ровно один раз (макс. +1 очко на каждого уникального участника за сообщение).

  • Валидация: Если сообщение не содержит ни одного действительного упоминания активного участника, сервер отклоняет его с описательной ошибкой валидации, указывающей доступные теги или @all.

2. Барьер прибытия и глобальная трансляция пробуждения

  • Когда агенты присоединяются последовательно через join_conversation, первый участник блокируется в барьере синхронизации.

  • Как только $ ge 2$ участников присоединились, сервер транслирует уведомление о прибытии (@Bob est arrivé dans la conversation), автоматически разблокирует ожидающих участников и запускает диалог.

3. Публичные и приватные сообщения (is_private=True)

  • Публичные сообщения: Добавляются в транскрипт, доставляются всем участникам и пробуждают всех ожидающих слушателей.

  • Приватные сообщения (is_private=True):

    • Видны и доставляются только отправителю и явно упомянутым получателям.

    • @all запрещено: Вызов is_private=True с @all вызывает явное ValueError.

    • Форматируются с помощью специальных блоков 🔒 [Message Privé] в транскрипте для пользователя-человека.

  • Строгий запрет на чтение транскрипта: Агентам строго запрещено напрямую читать файл Markdown-транскрипта на диске (через view_file или команды оболочки), что гарантирует отсутствие утечек информации вне канала.

4. Отслеживание живого Markdown-транскрипта

  • Все сообщения, таблицы участников и системные уведомления атомарно записываются в указанный Markdown-файл (filepath).

  • Позволяет визуально отслеживать в реальном времени в редакторах типа Obsidian, Cursor или VS Code (идеально для мониторинга на втором дисплее).

5. Инкрементальная выборка непрочитанных сообщений

  • Каждый участник поддерживает last_read_seq_id.

  • Вызовы wait_for_turn или блокирующий send_message возвращают только новые непрочитанные сообщения (seq_id > last_read_seq_id), экономя контекст LLM и предотвращая повторную обработку.


📦 Установка и настройка

Предварительные требования

  • Python $ ge 3.10$

  • Менеджер пакетов pip или uv

Стандартная установка

Клонируйте репозиторий и установите в редактируемом режиме:

git clone https://github.com/hjamet/multiagent-mcp.git
cd multiagent-mcp
pip install -e .

Чтобы установить зависимости для разработки (тестирование с pytest):

pip install -e ".[dev]"

🚀 Запуск сервера

multiagent-mcp поддерживает как стандартный ввод-вывод (stdio) (для локальной интеграции с CLI в Claude Desktop, Antigravity, Cursor), так и Server-Sent Events (sse) (для HTTP/сетевых микросервисов).

1. Режим Stdio (по умолчанию для IDE и настольных приложений)

multiagent-mcp stdio

2. Режим SSE-сервера (HTTP и сетевые подагенты)

# Default binding: 127.0.0.1:8000
multiagent-mcp serve

# Custom host and port
multiagent-mcp serve --host 0.0.0.0 --port 8000

При работе в режиме SSE конечная точка MCP доступна по адресу http://127.0.0.1:8000/sse.


⚙️ Конфигурация MCP-клиента

1. Конфигурация Google Antigravity и Cursor

Добавьте multiagent-mcp в ваш mcp_servers.json (или .cursor/mcp.json / .gemini/antigravity/mcp_servers.json):

Через Stdio:

{
  "mcpServers": {
    "multiagent-mcp": {
      "command": "multiagent-mcp",
      "args": ["stdio"]
    }
  }
}

Через SSE (удаленный / локальный сервер):

{
  "mcpServers": {
    "multiagent-mcp": {
      "url": "http://127.0.0.1:8000/sse"
    }
  }
}

2. Конфигурация Claude Desktop

Отредактируйте ваш claude_desktop_config.json (находится в %APPDATA%\Claude\claude_desktop_config.json на Windows или ~/Library/Application Support/Claude/claude_desktop_config.json на macOS):

{
  "mcpServers": {
    "multiagent-mcp": {
      "command": "multiagent-mcp",
      "args": ["stdio"]
    }
  }
}

🛠️ Справочник инструментов

Сервер предоставляет 4 инструмента 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

Инициализирует или сбрасывает комнату разговора, очищает структуры памяти и создает начальный файл Markdown-транскрипта.

Параметры:

Параметр

Тип

Обязательный

По умолчанию

Описание

filepath

str

Да

Целевой путь к файлу Markdown-транскрипта.

participants

list[str]

Да

Список ожидаемых тегов участников (например, ["@user", "@Alice", "@Bob"]).

topic

str

Нет

""

Тема разговора или контекст брифинга.

Возвращает (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

Регистрирует участника в комнате. Обрабатывает барьеры синхронизации прибытия и транслирует уведомления о прибытии.

Параметры:

Параметр

Тип

Обязательный

По умолчанию

Описание

handle

str

Да

Тег участника (например, '@Alice' или 'Alice').

name

str

Нет

""

Необязательное отображаемое имя (по умолчанию очищенный тег).

timeout_seconds

float

Нет

45.0

Тайм-аут в секундах при блокировке для хода.

Возвращает (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

Запрашивает текущих участников комнаты, активного говорящего, очередь ходов и общее количество сообщений.

Параметры: Нет.

Возвращает (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

Отправляет публичное или приватное сообщение в комнату. Проверяет упоминания, обновляет очередь ходов, добавляет запись в Markdown-файл и помещает отправителя в цикл ожидания до его следующего хода или до появления нового сообщения, возвращая только новые непрочитанные сообщения после разблокировки.

Параметры:

Параметр

Тип

Обязательный

По умолчанию

Описание

sender

str

Да

Тег отправителя (например, '@Alice').

content

str

Да

Содержимое сообщения. Должно содержать хотя бы одно действительное упоминание @получатель.

is_private

bool

Нет

False

Если True, сообщение видно только отправителю и отмеченным получателям.

timeout_seconds

float

Нет

45.0

Максимальное количество секунд ожидания перед возвратом статуса хода.

Возвращает (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."
}

💡 Интеграция в реальном мире: навык multiagent-chat

Навык multiagent-chat демонстрирует, как супервизор оркестрирует подагентов и @user в Obsidian:

Последовательность выполнения

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

📜 Формат живого транскрипта

Ниже приведен пример живого Markdown-файла, создаваемого 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.

---

🧪 Тестирование

Набор тестов охватывает:

  • Нормализацию участников и очистку тегов (@Alice, Alice $\to$ @Alice).

  • Извлечение упоминаний и удаление блоков кода (``` / `).

  • Синхронизацию барьера прибытия и трансляцию пробуждения.

  • Контроль доступа к приватным сообщениям.

  • Инкрементальную выборку непрочитанных сообщений.

  • Регистрацию инструментов FastMCP и команды CLI (serve / stdio).

Запустите тесты с помощью pytest:

pytest

📄 Лицензия

Этот проект лицензирован по лицензии MIT.

F
license - not found
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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