Skip to main content
Glama
mkXultra
by mkXultra
README.md14.9 kB
# Rooms Feature API Documentation Agent Communication MCP Server - エージェントB担当のルーム・プレゼンス機能の完全実装 ## 概要 ルーム・プレゼンス機能は、複数のエージェントがルームベースでコミュニケーションを行うための基盤機能です。Slackのようなチャンネル機能を提供し、エージェントの入退室管理、プレゼンス追跡、ルーム統計情報の管理を行います。 ## 機能一覧 ### ルーム管理 - ルームの作成・削除 - ルーム一覧の取得 - ルーム存在確認 - ルーム統計情報の管理 ### プレゼンス管理 - エージェントの入退室 - オンライン/オフライン状態管理 - ルーム内ユーザー一覧 - プロフィール情報管理 ## データ構造 ### rooms.json ```json { "rooms": { "general": { "description": "General discussion", "createdAt": "2024-01-20T09:00:00Z", "messageCount": 0, "userCount": 2 }, "dev-team": { "description": "Development team discussions", "createdAt": "2024-01-20T10:00:00Z", "messageCount": 15, "userCount": 3 } } } ``` ### presence.json (ルームごと) ```json { "roomName": "general", "users": { "agent1": { "status": "online", "messageCount": 5, "joinedAt": "2024-01-20T10:00:00Z", "profile": { "role": "coordinator", "description": "Task coordination agent", "capabilities": ["task_planning", "resource_management"], "metadata": { "version": "1.0.0", "specialization": "project_management" } } }, "agent2": { "status": "offline", "messageCount": 2, "joinedAt": "2024-01-20T11:00:00Z", "profile": { "role": "analyzer", "description": "Data analysis agent", "capabilities": ["data_analysis", "reporting"] } } } } ``` ## API Reference ### RoomsAPI Class メインのAPI実装クラス。ルーム管理とプレゼンス管理の統合インターフェースを提供します。 ```typescript import { RoomsAPI } from './src/features/rooms'; const api = new RoomsAPI('./data'); ``` #### コンストラクタ ```typescript constructor(dataDir: string = './data') ``` - `dataDir`: データファイルを保存するディレクトリパス(デフォルト: './data') ### ルーム管理メソッド #### createRoom() 新しいルームを作成します。 ```typescript async createRoom(name: string, description?: string): Promise<CreateRoomResult> ``` **パラメータ:** - `name`: ルーム名(英数字、ハイフン、アンダースコアのみ、1-50文字) - `description`: ルームの説明(省略可、最大200文字) **戻り値:** ```typescript { success: boolean; roomName: string; message: string; } ``` **例:** ```typescript const result = await api.createRoom('dev-team', 'Development team discussions'); // { success: true, roomName: 'dev-team', message: "Room 'dev-team' created successfully" } ``` **エラー:** - `RoomAlreadyExistsError`: 同名のルームが既に存在 - `ValidationError`: 名前や説明の形式が不正 #### listRooms() ルーム一覧を取得します。 ```typescript async listRooms(agentName?: string): Promise<ListRoomsResult> ``` **パラメータ:** - `agentName`: エージェント名(省略可、指定時は参加状況も含める) **戻り値:** ```typescript { rooms: Array<{ name: string; description?: string; userCount: number; messageCount: number; isJoined?: boolean; // agentName指定時のみ }>; } ``` **例:** ```typescript const result = await api.listRooms(); // { rooms: [{ name: 'general', description: '...', userCount: 3, messageCount: 10 }] } const filteredResult = await api.listRooms('my-agent'); // { rooms: [{ ..., isJoined: true }] } ``` #### roomExists() ルームの存在を確認します。 ```typescript async roomExists(name: string): Promise<boolean> ``` #### getRoomData() ルームの詳細データを取得します。 ```typescript async getRoomData(name: string): Promise<RoomData | null> ``` **戻り値:** ```typescript { description?: string; createdAt: string; messageCount: number; userCount: number; } | null ``` ### プレゼンス管理メソッド #### enterRoom() エージェントをルームに入室させます。 ```typescript async enterRoom(agentName: string, roomName: string, profile?: AgentProfile): Promise<EnterRoomResult> ``` **パラメータ:** - `agentName`: エージェント名(英数字、ハイフン、アンダースコア、1-50文字) - `roomName`: ルーム名 - `profile`: エージェントプロフィール(省略可) **プロフィール形式:** ```typescript { role?: string; // 役割(例: 'coordinator', 'analyzer') description?: string; // 説明 capabilities?: string[]; // 能力リスト metadata?: Record<string, any>; // カスタムメタデータ } ``` **戻り値:** ```typescript { success: boolean; roomName: string; message: string; } ``` **例:** ```typescript const result = await api.enterRoom('agent1', 'dev-team', { role: 'coordinator', description: 'Team coordination agent', capabilities: ['planning', 'scheduling'], metadata: { version: '2.0.0' } }); ``` **エラー:** - `RoomNotFoundError`: ルームが存在しない - `ValidationError`: パラメータの形式が不正 #### leaveRoom() エージェントをルームから退室させます。 ```typescript async leaveRoom(agentName: string, roomName: string): Promise<LeaveRoomResult> ``` **エラー:** - `RoomNotFoundError`: ルームが存在しない - `AgentNotInRoomError`: エージェントがそのルームにいない #### getRoomUsers() ルーム内のユーザー一覧を取得します。 ```typescript async getRoomUsers(roomName: string): Promise<ListRoomUsersResult> ``` **戻り値:** ```typescript { roomName: string; users: Array<{ name: string; status: 'online' | 'offline'; messageCount?: number; profile?: AgentProfile; }>; onlineCount: number; } ``` ### 統計・管理メソッド #### getRoomCount() 総ルーム数を取得します。 ```typescript async getRoomCount(): Promise<number> ``` #### getAllRoomNames() すべてのルーム名を取得します。 ```typescript async getAllRoomNames(): Promise<string[]> ``` #### getOnlineUsersCount() 指定ルームのオンラインユーザー数を取得します。 ```typescript async getOnlineUsersCount(roomName: string): Promise<number> ``` #### cleanupOfflineUsers() 長時間オフラインのユーザーを削除します。 ```typescript async cleanupOfflineUsers(roomName: string, thresholdHours?: number): Promise<number> ``` **パラメータ:** - `thresholdHours`: オフライン時間の閾値(デフォルト: 24時間) **戻り値:** 削除されたユーザー数 ## MCP Tools 以下の5つのMCPツールが実装されています: ### 1. agent_communication/create_room 新しいルームを作成します。 **パラメータ:** ```json { "roomName": "dev-team", "description": "Development team discussions" } ``` ### 2. agent_communication/list_rooms ルーム一覧を取得します。 **パラメータ:** ```json { "agentName": "my-agent" // 省略可 } ``` ### 3. agent_communication/enter_room ルームに入室します。 **パラメータ:** ```json { "agentName": "agent1", "roomName": "dev-team", "profile": { "role": "coordinator", "description": "Task coordination", "capabilities": ["planning"], "metadata": {} } } ``` ### 4. agent_communication/leave_room ルームから退室します。 **パラメータ:** ```json { "agentName": "agent1", "roomName": "dev-team" } ``` ### 5. agent_communication/list_room_users ルーム内のユーザー一覧を取得します。 **パラメータ:** ```json { "roomName": "dev-team" } ``` ## バリデーション ### ルーム名 - 必須、空文字不可 - 1-50文字 - 英数字、ハイフン(-)、アンダースコア(_)のみ ### エージェント名 - 必須、空文字不可 - 1-50文字 - 英数字、ハイフン(-)、アンダースコア(_)のみ ### 説明 - 省略可 - 最大200文字 ### プロフィール - `role`: 最大50文字 - `description`: 最大200文字 - `capabilities`: 最大20個、各項目最大50文字 ## エラーハンドリング ### カスタムエラークラス - `RoomAlreadyExistsError`: ルーム作成時に同名ルームが存在 - `RoomNotFoundError`: 存在しないルームに対する操作 - `AgentNotInRoomError`: ルームにいないエージェントに対する操作 - `AgentAlreadyInRoomError`: 既に入室済みのエージェントの入室(通常は発生しない) - `ValidationError`: 入力値の形式エラー - `StorageError`: ファイル操作エラー ### エラーハンドリング例 ```typescript try { await api.createRoom('invalid room name'); } catch (error) { if (error instanceof ValidationError) { console.error('入力値が不正です:', error.message); } else if (error instanceof RoomAlreadyExistsError) { console.error('ルームが既に存在します:', error.message); } else { console.error('予期しないエラー:', error); } } ``` ## パフォーマンス ### 負荷テスト結果 - ✅ 100ルーム作成: 平均 < 100ms/ルーム - ✅ 50エージェント×10ルーム入室: 平均 < 50ms/操作 - ✅ 同時操作: 20ルーム作成 + 5回一覧取得 < 30秒 - ✅ データ整合性: 5ルーム×10エージェント並行入退室 - ✅ メモリ効率: 50ルーム×20エージェントでクエリ < 1秒 ### 最適化ポイント 1. **ファイルI/O最小化**: 必要時のみファイル読み書き 2. **バッチ処理**: 複数操作の並行実行 3. **データ構造最適化**: 効率的なJSON形式 4. **エラー処理**: 適切な例外処理でパフォーマンス影響を最小化 ## 使用例 ### 基本的な使用フロー ```typescript import { RoomsAPI } from './src/features/rooms'; const api = new RoomsAPI('./data'); // 1. ルーム作成 await api.createRoom('project-alpha', 'Project Alpha discussions'); // 2. エージェント入室 await api.enterRoom('coordinator-agent', 'project-alpha', { role: 'coordinator', description: 'Project coordination agent', capabilities: ['planning', 'resource-management'] }); await api.enterRoom('dev-agent', 'project-alpha', { role: 'developer', capabilities: ['coding', 'testing'] }); // 3. ルーム一覧確認 const rooms = await api.listRooms(); console.log(rooms); // [{ name: 'project-alpha', userCount: 2, ... }] // 4. ユーザー一覧確認 const users = await api.getRoomUsers('project-alpha'); console.log(users); // { roomName: 'project-alpha', users: [...], onlineCount: 2 } // 5. エージェント退室 await api.leaveRoom('dev-agent', 'project-alpha'); // 6. 統計情報確認 const onlineCount = await api.getOnlineUsersCount('project-alpha'); console.log(onlineCount); // 1 ``` ### チーム管理の例 ```typescript // 複数チームの管理 const teams = ['frontend', 'backend', 'qa', 'devops']; // チームルーム作成 for (const team of teams) { await api.createRoom(`team-${team}`, `${team} team discussions`); } // チームメンバー配置 const members = { 'frontend': ['ui-agent', 'ux-agent'], 'backend': ['api-agent', 'db-agent'], 'qa': ['test-agent'], 'devops': ['deploy-agent'] }; for (const [team, agents] of Object.entries(members)) { for (const agent of agents) { await api.enterRoom(agent, `team-${team}`, { role: 'team-member', description: `${team} team member`, capabilities: [team] }); } } // 全体統計 const totalRooms = await api.getRoomCount(); const roomNames = await api.getAllRoomNames(); console.log(`Total rooms: ${totalRooms}, Rooms: ${roomNames.join(', ')}`); ``` ## 拡張性 ### 将来の拡張予定 1. **ファイルロック**: エージェントDによる同時アクセス制御 2. **メッセージ連携**: エージェントAによるメッセージ数自動更新 3. **管理機能**: エージェントCによる統計レポート 4. **通知機能**: 入退室イベント通知 5. **ルーム設定**: プライベートルーム、参加制限等 ### カスタマイズ ```typescript // カスタムデータディレクトリ const api = new RoomsAPI('/custom/data/path'); // 環境変数による設定 const dataDir = process.env.AGENT_COMM_DATA_DIR || './data'; const api = new RoomsAPI(dataDir); ``` ## トラブルシューティング ### よくある問題 1. **ファイル権限エラー** - データディレクトリの読み書き権限を確認 - 必要に応じて`chmod 755 ./data`を実行 2. **JSON形式エラー** - 既存のJSONファイルが破損している可能性 - バックアップから復元するか、ファイルを削除して再作成 3. **パフォーマンス問題** - 大量データ時はクリーンアップ機能を定期実行 - データディレクトリをSSD上に配置 4. **メモリ使用量** - 長時間実行時は定期的にオフラインユーザーをクリーンアップ - 必要に応じてプロセス再起動 ### デバッグ ```typescript // デバッグ用メソッド await api.clearAllRooms(); // 全ルーム削除 await api.clearRoomPresence('room-name'); // 特定ルームのプレゼンス削除 ``` ## 仕様準拠 本実装は以下の仕様に完全準拠しています: - ✅ spec.md 行29-108: 全5つのMCPツールの完全実装 - ✅ implementation-policy.md: エラーハンドリング、バリデーション方針 - ✅ parallel-implementation-plan.md: エージェントB担当範囲の完全実装 - ✅ agent-prompts/agent-b-rooms.md: 全完了条件の達成 ### 実装完了項目 - [x] RoomService.createRoom() - spec.md行46-56の仕様完全実装 - [x] RoomService.listRooms() - spec.md行31-44の仕様完全実装 - [x] PresenceService.enterRoom() - spec.md行58-74の仕様完全実装 - [x] PresenceService.leaveRoom() - spec.md行76-86の仕様完全実装 - [x] PresenceService.listRoomUsers() - spec.md行88-107の仕様完全実装 - [x] rooms.jsonデータ構造 - 仕様通りの実装 - [x] presence.jsonデータ構造 - 仕様通りの実装 - [x] 5つのMCPツール完全実装 - [x] Zodバリデーション実装 - [x] カスタムエラークラス実装 - [x] 単体テスト実装(90%以上カバレッジ対応) - [x] 負荷テスト実装(100ルーム×50ユーザー対応) - [x] 公開API (IRoomsAPI) 実装

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