multiagent-mcp
🌐 multiagent-mcp
協調型マルチエージェント順番制御ハブ(Model Context Protocol 対応)
同期型マルチエージェント対話、人間参加型インタラクション(@user)、メンション駆動のターンキュー、およびディスク上へのリアルタイム Markdown トランスクリプト追跡を統合します。
📖 概要
multiagent-mcp は、マルチエージェント LLM 連携のために設計された専用の Model Context Protocol (MCP) サーバーです。複数の 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, ...)"| RMRelated MCP server: agent-room-mcp
✨ コア機能
1. メンションベースのターン取得(@<名前>)と重複排除
ターンは、メッセージコンテンツにハンドルをタグ付けすることで、エージェントとユーザー間で自然に受け渡されます(例:
"@Bob どう思う?")。対象メンション:エージェントは、直接宛先または返信が期待される参加者のみをメンションし、すべての参加者を無差別にタグ付けしないようにする必要があります。
グローバルブロードキャストタグ(
@all):公開メッセージ(is_private=False)内で@allをタグ付けすると、すべてのアクティブな参加者を対象とし、それぞれに +1 ターンスコアをキューに入れます。コードブロック隔離:フェンシングされた(
```)またはインライン(`)コードブロック内のメンションは、解析前に自動的に除去され、誤ったターントリガーを防ぎます。重複排除:同じメッセージ内で
@Bobを複数回タグ付けしても、@Bobは 1 回だけ キューに入れられます(1 メッセージあたりの個別参加者あたりの最大スコアは +1)。検証:メッセージに有効なアクティブ参加者のメンションが含まれていない場合、サーバーは説明的な検証エラーでメッセージを拒否し、利用可能なハンドルまたは
@allを指定します。
2. 到着バリアとグローバルウェイクアップブロードキャスト
エージェントが
join_conversationを介して順次参加する場合、最初の参加者は同期バリアでブロックされます。参加者が $ ge 2$ 人になった時点で、サーバーは到着通知(
@Bob が会話に到着しました)をブロードキャストし、待機中の参加者を自動的にブロック解除して、対話を開始します。
3. 公開メッセージとプライベートメッセージ(is_private=True)
公開メッセージ:トランスクリプトに追加され、すべての参加者に配信され、待機中のリスナーをすべて起こします。
プライベートメッセージ(
is_private=True):送信者と明示的にメンションされた受信者 のみ に表示され配信されます。
@all禁止:is_private=Trueで@allを呼び出すと、明示的なValueErrorが発生します。トランスクリプト内で人間ユーザー向けに専用の
🔒 [プライベートメッセージ]ブロックとしてフォーマットされます。
厳格なトランスクリプト禁止:エージェントは、ディスク上の 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)(Claude Desktop、Antigravity、Cursor でのローカル CLI 統合用)と サーバー送信イベント(sse)(HTTP/ネットワーク化マイクロサービス用)の両方をサポートしています。
1. Stdio モード(IDE およびデスクトップアプリのデフォルト)
multiagent-mcp stdio2. 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 8000SSE モードで実行する場合、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 を編集します(Windows の場合は %APPDATA%\Claude\claude_desktop_config.json、macOS の場合は ~/Library/Application Support/Claude/claude_desktop_config.json)。
{
"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 トランスクリプトファイルを生成します。
パラメーター:
パラメーター | タイプ | 必須 | デフォルト | 説明 |
|
| はい | — | Markdown トランスクリプトファイルのターゲットパス。 |
|
| はい | — | 予想される参加者ハンドルのリスト(例: |
|
| いいえ |
| 会話のトピックまたはブリーフィングコンテキスト。 |
戻り値(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
参加者をルームに登録します。到着同期バリアを処理し、到着通知をブロードキャストします。
パラメーター:
パラメーター | タイプ | 必須 | デフォルト | 説明 |
|
| はい | — | 参加者ハンドル(例: |
|
| いいえ |
| オプションの表示名(デフォルトはクリーン化されたハンドル)。 |
|
| いいえ |
| ターン待機時のタイムアウト(秒)。 |
戻り値(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 ファイルに追加し、送信者を次のターンになるか新しいメッセージが到着するまで待機ループに入れます。ブロック解除時に 新しい未読メッセージのみ を返します。
パラメーター:
パラメーター | タイプ | 必須 | デフォルト | 説明 |
|
| はい | — | 送信者ハンドル(例: |
|
| はい | — | メッセージ内容。少なくとも 1 つの有効な |
|
| いいえ |
|
|
|
| いいえ |
| ターンステータスを返す前に待機する最大秒数。 |
戻り値(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📜 ライブトランスクリプト形式
以下は、multiagent-mcp によって生成されたライブ Markdown ファイルの例です。
# 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 ライセンス の下でライセンスされています。
This server cannot be deployed
Maintenance
Related MCP Connectors
- UproarOAuthchat.uproar
Chat where AI agents are first-class members, with their own identity and permissions.
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.
- ParleyOAuthdev.weldra
Coordination hub for AI coding agents: message teammates, ask humans, audit every event.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables 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.63 npm5MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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.150 npmMIT
- FlicenseNot gradedqualityBmaintenanceEnables agents to join multiplayer markdown rooms, collaborate on documents live with humans, and respond to mentions via comments.-
- FlicenseNot gradedqualityBmaintenanceEnables AI agents from different providers to collaborate in shared discussion threads, posting proposals and reviews while retrieving synchronized context, with human oversight.-