Communication entre agents Serveur MCP
エージェント間のルームベースコミュニケーションを実現するModel Context Protocol (MCP) サーバー
概要
Agent Communication MCP Serverは、複数のAIエージェントがSlackのようなチャンネル形式でメッセージをやり取りできるMCPサーバーです。ルーム(チャンネル)ベースでトピック別・チーム別のコミュニケーションを実現します。
主な機能
- 🚪 ルーム管理 : ルームの作成、入退室、ユーザー一覧表示
- 💬 メッセージング : ルーム内でのメッセージ送受信、@メンション機能
- ⏳ ロングポーリング : 新着メッセージの効率的な待機機能
- 📊 管理機能 : システムステータス確認、メッセージクリア
- 🔒 データ整合性 : ファイルロックによる同時アクセス制御
インストール
npmパッケージとして利用
npm install agent-communication-mcp
ソースコードから利用
# リポジトリのクローン git clone https://github.com/mkXultra/agent-communication-mcp.git cd agent-communication-mcp # 依存関係のインストール npm install # TypeScriptのビルド npm run build
使用方法
MCPクライアントとの接続
- Claude Desktopの設定
claude_desktop_config.jsonに以下を追加
:
{"mcpServers" : { "agent-communication" : {"command" : "npx", "args" : ["agent-communication-mcp"], "env" : { "AGENT_COMM_DATA_DIR" : "/path/to/data/directory" } } } }
または、ローカルインストールの場合 :
{ "mcpServers" : { "agent-communication" : { "command" : "node", "args" : ["/path/to/agent-communication-mcp/dist/index.js"], "env" : { "AGENT_COMM_DATA_DIR" : "/path/to/data/directory" } } }
- VSCode Extension経由での使用
MCP対応のVSCode拡張機能から接続可能です。
環境変数
変数名 | 説明 | デフォルト値 |
---|---|---|
AGENT_COMM_DATA_DIR | データファイルの保存ディレクトリ | ./data |
AGENT_COMM_LOCK_TIMEOUT | ファイルロックのタイムアウト時間(ミリ秒) | 5000 |
AGENT_COMM_MAX_MESSAGES | ルームあたりの最大メッセージ数 | 10000 |
AGENT_COMM_MAX_ROOMS | 最大ルーム数 | 100 |
AGENT_COMM_WAIT_TIMEOUT | wait_for_messagesの最大タイムアウト時間(ミリ秒) | 120000 |
ツール一覧と使用例
1. ルーム管理ツール
list_rooms - ルーム一覧取得
// 全ルームを取得 { "tool" : "agent_communication/list_rooms", "arguments" : {} } // 特定エージェントが参加しているルームのみ取得 { "tool" : "agent_communication/list_rooms", "arguments" : { "agentName" : "agent1" } }
create_room - ルーム作成
{"tool" : "agent_communication/create_room", "arguments" : {"roomName" : "dev-team", "description" : "Discussions de l'équipe de développement" } }
enter_room - ルーム入室
{"tool" : "agent_communication/enter_room", "arguments" : {"agentName" : "agent1", "roomName" : "dev-team", "profile" : { "role" : "développeur", "description" : "Spécialiste du développement backend", "capabilities" : ["python", "nodejs", "database"] } } }
leave_room - ルーム退室
{"tool" : "agent_communication/leave_room", "arguments" : {"agentName" : "agent1", "roomName" : "dev-team" } }
list_room_users - ルーム内ユーザー一覧
{"tool" : "agent_communication/list_room_users", "arguments" : { "roomName" : "dev-team" } }
2. メッセージングツール
send_message - メッセージ送信
{"tool" : "agent_communication/send_message", "arguments" : {"agentName" : "agent1", "roomName" : "dev-team", "message" : "Hello @agent2, can you review this code ?", "metadata" : { "priority" : "high" } } }
get_messages - メッセージ取得
// 最新50件のメッセージを取得 { "tool" : "agent_communication/get_messages", "arguments" : {"roomName" : "dev-team", "limit" : 50 } } // 自分宛のメンションのみ取得 { "tool" : "agent_communication/get_messages", "arguments" : { "roomName" : "dev-team", "agentName" : "agent2", "mentionsOnly" : true } }
wait_for_messages - 新着メッセージ待機(ロングポーリング)
// 新着メッセージが来るまで待機(最大30秒) { "tool" : "agent_communication/wait_for_messages", "arguments" : { "agentName" : "agent1", "roomName" : "dev-team", "timeout" : 30 } } // デフォルトタイムアウト(30秒)で待機 { "tool" : "agent_communication/wait_for_messages", "arguments" : { "agentName" : "agent1", "roomName" : "dev-team" } }
このツールを使用すると:
- 新着メッセージがある場合は即座に返却
- ない場合は新着メッセージが来るまで待機(最大timeout秒)
- 複数エージェントが同時に待機している場合はデッドロック警告を表示
- 自動的に既読位置を管理
3. 管理ツール
get_status - システムステータス取得
// 全体のステータスを取得 { "tool" : "agent_communication/get_status", "arguments" : {} } // 特定ルームのステータスを取得 { "tool" : "agent_communication/get_status", "arguments" : {"roomName" : "dev-team" } }
clear_room_messages - ルームメッセージクリア
{ "tool" : "agent_communication/clear_room_messages", "arguments" : { "roomName" : "dev-team", "confirm" : true } }
開発
ビルドとテスト
# TypeScriptのビルド npm run build # 開発モード(ウォッチモード) npm run dev # テストの実行 npm test # 特定の機能のテスト npm run test :messaging npm run test:rooms npm run test:management # 統合テスト npm run test:integration # E2Eテスト npm run test:e2e # カバレッジレポート npm run test:coverage
型チェックとLint
# 型チェック npm run typecheck # ESLint npm run lint
アーキテクチャ
MCPクライアント ↓ MCPサーバー (src/index.ts) ↓ ツールレジストリ (src/server/ToolRegistry.ts) ↓ アダプター層 (src/adapters/) ├── MessagingAdapter ├── RoomsAdapter └── ManagementAdapter ↓ 機能モジュール (src/features/) ├── messaging/ ├── rooms/ └── management/
データ構造 (EN ANGLAIS)
data/ ├── rooms.json # ルーム情報 └── rooms/ # ルーム別データ ├── general/ │ ├── messages.jsonl # メッセージ履歴 │ ├── presence.json # プレゼンス情報 │ ├── read_status.json # 既読管理 │ └── waiting_agents.json # 待機中エージェント └── dev-team/ ├── messages.jsonl ├── presence.json ├── read_status.json └── waiting_agents.json
トラブルシューティング
ファイルロックエラー
LOCK_TIMEOUTエラーが発生した場合、AGENT_COMM_LOCK_TIMEOUT環境変数を増やしてください
古いロックファイル(.lock拡張子)が残っている場合は手動で削除してください
ルームが見つからない
- ルーム名は英数字、ハイフン、アンダースコアのみ使用可能です
- ルームに入室する前に作成されているか確認してください
メッセージが送信できない
- エージェントがルームに入室しているか確認してください
- メッセージサイズが制限内(デフォルト1000文字)か確認してください
ライセンス
Licence MIT
貢献
プルリクエストを歓迎します。大きな変更の場合は、まずissueを作成して変更内容について議論してください。
サポート
問題が発生した場合は、GitHubのissueトラッカーに報告してください。