Skip to main content
Glama

Crew Qualifications & Certifications MCP Server

by jbandu
test-mcp-server.ts6.51 kB
/** * Test script for MCP server integration * Tests that all tools are properly wired and can be called */ import { handleGetCrewQualifications } from './tools/get-crew-qualifications.js'; import { handleValidateCrewLegality } from './tools/validate-crew-legality.js'; import { handleCalculateCrewPay } from './tools/calculate-crew-pay.js'; import { handleUpdateDutyTime } from './tools/update-duty-time.js'; import { handleGetQualifiedCrewPool } from './tools/get-qualified-crew-pool.js'; import { initializeDatabase, closeDatabase } from './db/connection.js'; async function runTests() { try { console.log('='.repeat(80)); console.log('MCP Server Integration Tests'); console.log('='.repeat(80)); // Initialize database await initializeDatabase(); console.log('✓ Database initialized\n'); // Test 1: Get Crew Qualifications console.log('Test 1: get-crew-qualifications'); console.log('-'.repeat(80)); const qualResult = await handleGetCrewQualifications({ crew_identifier: 'AVL001', qualification_types: ['all'], }); if (qualResult.isError) { console.log('✗ FAILED:', qualResult.content[0]?.text || 'Unknown error'); } else { const text = qualResult.content[0]?.text || '{}'; const data = JSON.parse(text); console.log('✓ SUCCESS'); console.log(` Crew: ${data.crew_member.name} (${data.crew_member.employee_number})`); console.log(` Position: ${data.crew_member.position}`); console.log(` Overall Status: ${data.overall_status}`); } console.log(''); // Test 2: Validate Crew Legality console.log('Test 2: validate-crew-legality'); console.log('-'.repeat(80)); const tomorrow = new Date(); tomorrow.setDate(tomorrow.getDate() + 1); tomorrow.setHours(8, 0, 0, 0); const legalityResult = await handleValidateCrewLegality({ crew_identifier: 'AVL001', aircraft_type: 'B737-800', duty_start_utc: tomorrow.toISOString(), flight_time_minutes: 420, number_of_segments: 3, }); if (legalityResult.isError) { console.log('✗ FAILED:', legalityResult.content[0]?.text || 'Unknown error'); } else { const text = legalityResult.content[0]?.text || '{}'; const data = JSON.parse(text); console.log('✓ SUCCESS'); console.log(` Is Legal: ${data.is_legal}`); console.log(` Rest Compliant: ${data.rest_compliance.is_compliant}`); console.log(` 28-day Hours: ${data.duty_limits.rolling_28_day_hours.toFixed(1)}`); } console.log(''); // Test 3: Calculate Crew Pay console.log('Test 3: calculate-crew-pay'); console.log('-'.repeat(80)); const periodStart = new Date('2024-11-01'); const periodEnd = new Date('2024-11-15'); const payResult = await handleCalculateCrewPay({ crew_identifier: 'AVL001', pay_period_start: periodStart.toISOString().split('T')[0], pay_period_end: periodEnd.toISOString().split('T')[0], include_breakdown: true, }); if (payResult.isError) { console.log('✗ FAILED:', payResult.content[0]?.text || 'Unknown error'); } else { const text = payResult.content[0]?.text || '{}'; const data = JSON.parse(text); console.log('✓ SUCCESS'); console.log(` Crew: ${data.crew_member.name}`); console.log(` Total Compensation: ${data.summary.total_compensation}`); console.log(` Flight Hours: ${data.summary.total_flight_hours}`); if (data.breakdown) { console.log(` Base Pay: ${data.breakdown.base_pay.amount}`); } } console.log(''); // Test 4: Update Duty Time console.log('Test 4: update-duty-time'); console.log('-'.repeat(80)); const dutyStart = new Date(); dutyStart.setDate(dutyStart.getDate() - 1); dutyStart.setHours(8, 0, 0, 0); const dutyEnd = new Date(dutyStart); dutyEnd.setHours(14, 30, 0, 0); const dutyResult = await handleUpdateDutyTime({ crew_identifier: 'AVL002', duty_date: dutyStart.toISOString().split('T')[0], duty_start_utc: dutyStart.toISOString(), duty_end_utc: dutyEnd.toISOString(), flight_time_minutes: 300, flight_segments: 2, }); if (dutyResult.isError) { console.log('✗ FAILED:', dutyResult.content[0]?.text || 'Unknown error'); } else { const text = dutyResult.content[0]?.text || '{}'; const data = JSON.parse(text); console.log('✓ SUCCESS'); console.log(` Crew: ${data.crew_member.name}`); console.log(` Duty Hours: ${data.recorded_duty.duty_time_hours}`); console.log(` Flight Hours: ${data.recorded_duty.flight_time_hours}`); console.log(` Is Compliant: ${data.compliance_check.is_compliant}`); } console.log(''); // Test 5: Get Qualified Crew Pool console.log('Test 5: get-qualified-crew-pool'); console.log('-'.repeat(80)); const poolResult = await handleGetQualifiedCrewPool({ aircraft_type: 'B737-800', position: 'CAPTAIN', check_legality: false, }); if (poolResult.isError) { console.log('✗ FAILED:', poolResult.content[0]?.text || 'Unknown error'); } else { const text = poolResult.content[0]?.text || '{}'; const data = JSON.parse(text); console.log('✓ SUCCESS'); console.log(` Aircraft Type: ${data.search_criteria.aircraft_type}`); console.log(` Position: ${data.search_criteria.position}`); console.log(` Total Qualified: ${data.summary.total_qualified}`); console.log(` Total Available: ${data.summary.total_available}`); } console.log(''); // Summary console.log('='.repeat(80)); console.log('All MCP Server Integration Tests Completed Successfully!'); console.log('='.repeat(80)); console.log(''); console.log('Server is ready to accept tool calls via stdio transport.'); console.log('All 8 tools are properly wired and functional:'); console.log(' ✓ get-crew-qualifications'); console.log(' ✓ validate-crew-legality'); console.log(' ✓ calculate-crew-pay'); console.log(' ✓ flag-pay-discrepancies'); console.log(' ✓ get-training-requirements'); console.log(' ✓ check-certification-expiry'); console.log(' ✓ get-qualified-crew-pool'); console.log(' ✓ update-duty-time'); } catch (error) { console.error('Test failed:', error); process.exit(1); } finally { await closeDatabase(); } } runTests();

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/jbandu/crew-mcp'

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