Skip to main content
Glama
mkXultra
by mkXultra
spec.md11.1 kB
# Agent Communication MCP Server 仕様書 ## 概要 Agent Communication MCP Serverは、複数のエージェントがルームベースでメッセージをやり取りするためのModel Context Protocol (MCP) サーバーです。Slackのようなチャンネル機能を提供し、トピック別、チーム別のコミュニケーションを実現します。 ## 目的 - ルームベースのエージェント間コミュニケーション - トピック別、チーム別の会話分離 - プレゼンス管理(ルーム毎のオンライン状態追跡) - メッセージ履歴のルーム毎保存と検索 ## アーキテクチャ ### データストレージ - **メッセージ**: ルーム毎のJSONLファイル(`rooms/{roomName}/messages.jsonl`) - **プレゼンス情報**: ルーム毎のJSONファイル(`rooms/{roomName}/presence.json`) - **ルーム情報**: JSONファイル(`rooms.json`) - **ロック機構**: ファイルロックによる同時アクセス制御 ### MCPプロトコル準拠 - JSON-RPC 2.0ベースの通信 - 標準的なMCPツール定義 - エラーハンドリングとレスポンス形式 ## 主要機能 ### 1. ルーム管理 #### 1.1 ルーム一覧 (list_rooms) ```typescript tool: agent_communication/list_rooms parameters: - agentName?: string // 自分が参加しているルームのみ表示(オプション) returns: - rooms: Array<{ name: string // ルーム名 description?: string // ルームの説明 userCount: number // 現在の参加者数 messageCount: number // 累計メッセージ数 isJoined?: boolean // 自分が参加しているか }> ``` #### 1.2 ルーム作成 (create_room) ```typescript tool: agent_communication/create_room parameters: - roomName: string // ルーム名(英数字、ハイフン、アンダースコア) - description?: string // ルームの説明 returns: - success: boolean - roomName: string - message: string ``` #### 1.3 ルーム入室 (enter_room) ```typescript tool: agent_communication/enter_room parameters: - agentName: string // エージェント名(一意である必要がある) - roomName: string // 入室するルーム名 - profile?: { // オプショナル: エージェントプロフィール role?: string // 役割(例: "coordinator", "analyzer", "reporter") description?: string // 説明 capabilities?: string[] // 能力リスト metadata?: object // その他のカスタムメタデータ } returns: - success: boolean - roomName: string - message: string // システムメッセージ ``` #### 1.4 ルーム退室 (leave_room) ```typescript tool: agent_communication/leave_room parameters: - agentName: string // エージェント名 - roomName: string // 退室するルーム名 returns: - success: boolean - roomName: string - message: string // システムメッセージ ``` #### 1.5 ルーム内ユーザー一覧 (list_room_users) ```typescript tool: agent_communication/list_room_users parameters: - roomName: string // ルーム名 returns: - roomName: string - users: Array<{ name: string // エージェント名 status: "online" | "offline" messageCount?: number // そのルームでのメッセージ数 profile?: { // エージェントプロフィール(設定されている場合) role?: string description?: string capabilities?: string[] metadata?: object } }> - onlineCount: number ``` ### 2. メッセージング #### 2.1 メッセージ送信 (send_message) ```typescript tool: agent_communication/send_message parameters: - agentName: string // 送信者エージェント名 - roomName: string // 送信先ルーム名 - message: string // メッセージ内容(@agent_nameでメンション可能) - metadata?: object // オプショナルメタデータ returns: - success: boolean - messageId: string // メッセージID - roomName: string - timestamp: string // 送信時刻 - mentions: string[] // メッセージ内で@メンションされたエージェント名 ``` #### 2.2 メッセージ取得 (get_messages) ```typescript tool: agent_communication/get_messages parameters: - roomName: string // ルーム名 - agentName?: string // 自分のエージェント名(メンションフィルタリング用) - limit?: number // 取得件数(デフォルト: 50) - offset?: number // 取得開始位置(デフォルト: 0) - mentionsOnly?: boolean // 自分宛のメンションのみ取得 returns: - roomName: string - messages: Array<{ id: string agentName: string // 送信者のエージェント名 message: string timestamp: string mentions: string[] // メンションされたエージェント名のリスト metadata?: object }> - count: number - hasMore: boolean // さらに古いメッセージがあるか ``` ### 3. 管理機能 #### 3.1 ステータス取得 (get_status) ```typescript tool: agent_communication/get_status parameters: - roomName?: string // 特定ルームのステータス(省略時は全体) returns: - rooms: Array<{ name: string onlineUsers: number totalMessages: number storageSize: number }> - totalRooms: number - totalOnlineUsers: number - totalMessages: number ``` #### 3.2 ルームメッセージクリア (clear_room_messages) ```typescript tool: agent_communication/clear_room_messages parameters: - roomName: string // ルーム名 - confirm: boolean // 確認フラグ(必須) returns: - success: boolean - roomName: string - clearedCount: number ``` ## データフォーマット ### ルーム情報フォーマット (rooms.json) ```json { "rooms": { "general": { "description": "General discussion", "createdAt": "2024-01-20T09:00:00Z", "messageCount": 150, "userCount": 5 }, "dev-team": { "description": "Development team discussions", "createdAt": "2024-01-20T09:30:00Z", "messageCount": 42, "userCount": 3 } } } ``` ### メッセージフォーマット (rooms/{roomName}/messages.jsonl) ```json {"id":"msg_1234567890","roomName":"dev-team","agentName":"agent1","message":"Hello @coordinator, task completed!","mentions":["coordinator"],"timestamp":"2024-01-20T10:30:00Z","metadata":{}} ``` ### プレゼンスフォーマット (rooms/{roomName}/presence.json) ```json { "roomName": "dev-team", "users": { "agent1": { // エージェント名をキーとして使用 "status": "online", "messageCount": 42, "joinedAt": "2024-01-20T10:00:00Z", "profile": { "role": "coordinator", "description": "Task coordination and workflow management", "capabilities": ["task_planning", "resource_allocation", "progress_tracking"], "metadata": { "team": "automation", "version": "2.0" } } } } } ``` ## 実装詳細 ### ディレクトリ構造 ``` mcp-server/agent-communication/ ├── data/ # データファイル │ ├── rooms.json # ルーム情報 │ └── rooms/ # ルーム別データ │ ├── general/ │ │ ├── messages.jsonl │ │ └── presence.json │ └── dev-team/ │ ├── messages.jsonl │ └── presence.json ├── src/ │ ├── index.ts # エントリーポイント │ ├── tools/ # MCPツール定義 │ │ ├── room.ts # ルーム管理ツール │ │ ├── messaging.ts # メッセージングツール │ │ └── management.ts # 管理ツール │ ├── services/ # ビジネスロジック │ │ ├── RoomService.ts │ │ ├── MessageService.ts │ │ └── StorageService.ts │ ├── utils/ # ユーティリティ │ │ └── filelock.ts # ファイルロック機構 │ └── types/ # 型定義 │ └── index.ts ├── tests/ # テスト ├── package.json └── README.md ``` ### エラーハンドリング #### エラーコード - `ROOM_NOT_FOUND`: ルームが見つからない - `ROOM_ALREADY_EXISTS`: ルームが既に存在 - `AGENT_NOT_FOUND`: エージェントが見つからない - `AGENT_ALREADY_IN_ROOM`: エージェントが既に入室済み - `AGENT_NOT_IN_ROOM`: エージェントがルームにいない - `FILE_LOCK_TIMEOUT`: ファイルロックタイムアウト - `INVALID_MESSAGE_FORMAT`: 不正なメッセージフォーマット - `STORAGE_ERROR`: ストレージアクセスエラー ### セキュリティ考慮事項 1. **ファイルアクセス制限**: 指定されたディレクトリ外へのアクセス防止 2. **入力検証**: エージェント名、メッセージ内容の検証 3. **レート制限**: 大量メッセージ送信の防止 4. **ログ記録**: 全操作のログ記録 ## 拡張性 ### 将来的な拡張機能 1. **メッセージ暗号化**: エンドツーエンド暗号化 2. **プライベートルーム**: 招待制ルーム、パスワード保護 3. **メッセージタイプ**: テキスト以外のメッセージ(ファイル、画像等) 4. **永続化オプション**: データベース対応 5. **ルームアーカイブ**: 古いルームの自動アーカイブ ## 設定 ### 環境変数 ```bash AGENT_COMM_DATA_DIR # データディレクトリ(デフォルト: ./data) AGENT_COMM_LOCK_TIMEOUT # ロックタイムアウト(デフォルト: 5000ms) AGENT_COMM_MAX_MESSAGES # ルームあたり最大メッセージ数(デフォルト: 10000) AGENT_COMM_MAX_ROOMS # 最大ルーム数(デフォルト: 100) ``` ## テスト計画 ### ユニットテスト - 各サービスクラスの個別テスト - ファイルロック機構のテスト - エラーハンドリングのテスト ### 統合テスト - 複数ルームでの同時アクセステスト - ルーム間のメッセージ分離テスト - エージェントの複数ルーム参加テスト ### パフォーマンステスト - 大量メッセージ処理 - 同時接続数の限界テスト - ファイルサイズ増大時の性能 ## 実装計画 1. **Phase 1**: ルーム管理機能(ルーム作成、一覧、入退室) 2. **Phase 2**: メッセージング機能(ルーム別送受信) 3. **Phase 3**: 管理機能(ステータス、クリア) 4. **Phase 4**: テストとドキュメント整備 ## 成功指標 - **可用性**: 99.9%以上のアップタイム - **パフォーマンス**: メッセージ送信レイテンシ < 100ms - **スケーラビリティ**: 100ルーム×平均10エージェント/ルーム - **信頼性**: メッセージ損失率 < 0.01%

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/mkXultra/agent-communication-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server