Skip to main content
Glama
mkXultra
by mkXultra
validation.script.ts5.64 kB
// Agent Communication MCP Server - スキーマ検証テスト // Zodスキーマの動作確認とバリデーション検証 import { z } from 'zod'; import { // ルーム関連 createRoomInputSchema, createRoomOutputSchema, listRoomsInputSchema, listRoomsOutputSchema, enterRoomInputSchema, enterRoomOutputSchema, leaveRoomInputSchema, leaveRoomOutputSchema, listRoomUsersInputSchema, listRoomUsersOutputSchema, deleteRoomInputSchema, deleteRoomOutputSchema, // メッセージ関連 sendMessageInputSchema, sendMessageOutputSchema, getMessagesInputSchema, getMessagesOutputSchema, // 管理機能関連 getStatusInputSchema, getStatusOutputSchema, clearRoomMessagesInputSchema, clearRoomMessagesOutputSchema, getRoomStatisticsInputSchema, getRoomStatisticsOutputSchema, } from '../../../src/schemas/index'; // テスト実行関数 function testSchema<T>( name: string, schema: z.ZodType<T>, validData: unknown, invalidData?: unknown ): void { console.log(`\nTesting ${name}:`); try { const result = schema.parse(validData); console.log('✅ Valid data passed:', JSON.stringify(result, null, 2)); } catch (error) { console.error('❌ Valid data failed:', error); } if (invalidData) { try { schema.parse(invalidData); console.error('❌ Invalid data should have failed but passed'); } catch (error) { console.log('✅ Invalid data correctly rejected'); if (error instanceof z.ZodError) { console.log(' Validation errors:', error.errors.map(e => `${e.path.join('.')}: ${e.message}`)); } } } } // ルーム管理スキーマのテスト console.log('=== Room Management Schema Tests ==='); testSchema('createRoomInput', createRoomInputSchema, { roomName: 'test-room', description: 'A test room' }, { roomName: 'invalid room!', description: 'x'.repeat(201) } ); testSchema('createRoomOutput', createRoomOutputSchema, { success: true, roomName: 'test-room', createdAt: '2024-01-01T00:00:00Z' } ); testSchema('listRoomsInput', listRoomsInputSchema, { agentName: 'alice' }, { agentName: '' } ); testSchema('enterRoomInput', enterRoomInputSchema, { agentName: 'alice', roomName: 'general', profile: { role: 'developer', capabilities: ['TypeScript'] } }, { agentName: '', roomName: 'invalid!' } ); testSchema('listRoomUsersInput', listRoomUsersInputSchema, { roomName: 'general' }, { roomName: 'invalid room!' } ); // メッセージングスキーマのテスト console.log('\n=== Messaging Schema Tests ==='); testSchema('sendMessageInput', sendMessageInputSchema, { agentName: 'alice', roomName: 'general', message: 'Hello world!', metadata: { priority: 'high' } }, { agentName: '', roomName: 'general', message: 'x'.repeat(1001) } ); testSchema('sendMessageOutput', sendMessageOutputSchema, { success: true, messageId: 'msg-123', roomName: 'general', agentName: 'alice', timestamp: '2024-01-01T00:00:00Z', mentions: ['bob', 'charlie'] } ); testSchema('getMessagesInput', getMessagesInputSchema, { roomName: 'general', limit: 50, since: '2024-01-01T00:00:00Z', includeMetadata: true }, { roomName: '', limit: 0 } ); // Note: deleteMessage and getMessageMentions schemas are not yet implemented // 管理機能スキーマのテスト console.log('\n=== Management Schema Tests ==='); testSchema('getStatusInput', getStatusInputSchema, { roomName: 'general' }, { roomName: 'invalid!' } ); testSchema('getStatusOutput', getStatusOutputSchema, { totalRooms: 5, totalMessages: 1000, totalAgents: 10, activeRooms: ['general', 'random'], onlineAgents: 7, roomDetails: [ { name: 'general', messageCount: 500, userCount: 5 } ] } ); testSchema('clearRoomMessagesInput', clearRoomMessagesInputSchema, { roomName: 'general', olderThan: '2024-01-01T00:00:00Z', dryRun: true }, { roomName: 'invalid!', olderThan: 'not-a-date' } ); testSchema('getRoomStatisticsInput', getRoomStatisticsInputSchema, { roomName: 'general', includeHistory: true, timeRange: { from: '2024-01-01T00:00:00Z', to: '2024-01-31T23:59:59Z' } }, { roomName: '', timeRange: { from: 'invalid', to: 'invalid' } } ); // デフォルト値のテスト console.log('\n=== Default Values Test ==='); const getMessagesDefaults = getMessagesInputSchema.parse({ roomName: 'general' }); console.log('getMessages defaults:', getMessagesDefaults); const clearMessagesDefaults = clearRoomMessagesInputSchema.parse({ roomName: 'general' }); console.log('clearRoomMessages defaults:', clearMessagesDefaults); const getRoomStatsDefaults = getRoomStatisticsInputSchema.parse({ roomName: 'general' }); console.log('getRoomStatistics defaults:', getRoomStatsDefaults); console.log('\n=== Schema Validation Tests Completed ==='); // メンション抽出のテスト console.log('\n=== Mention Extraction Test ==='); function extractMentions(message: string): string[] { const mentionRegex = /@(\w+)/g; const mentions: string[] = []; let match; while ((match = mentionRegex.exec(message)) !== null) { if (match[1]) { mentions.push(match[1]); } } return mentions; } const testMessages = [ 'Hello @alice and @bob!', 'No mentions here', '@charlie @david @emily multiple mentions', 'Email test@example.com should not match', ]; testMessages.forEach(msg => { console.log(`"${msg}" -> mentions:`, extractMentions(msg)); }); console.log('\n✅ All schema validations completed successfully!');

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