/** * Server Info Diagnostic Tool * Provides health status and connection testing */ import { getPayloadConfig } from '../types/config.js'; import { testConnection } from '../client.js'; export async function serverInfoTool() { const config = getPayloadConfig(); const startTime = Date.now(); let connectionStatus = 'unknown'; let connectionError = null; let userInfo = null; try { await testConnection(); connectionStatus = 'connected'; // Try to get user info try { const PayloadModule = await import('@mcp-forge/payload-api') as any; const PayloadAPI = PayloadModule.default || PayloadModule; const client = new PayloadAPI({ baseURL: config.baseURL, apiToken: config.apiToken, }); userInfo = await client.users.retrieveCurrent(); } catch (err: any) { // Non-fatal - connection works but user endpoint might not } } catch (error: any) { connectionStatus = 'error'; connectionError = error.message; } const responseTime = Date.now() - startTime; return { server: 'payload-mcp', version: '1.0.2', status: connectionStatus === 'connected' ? 'healthy' : 'unhealthy', connection: { status: connectionStatus, baseURL: config.baseURL, authenticated: config.apiToken ? 'configured' : 'missing', responseTime: `${responseTime}ms`, error: connectionError, }, currentUser: userInfo ? { id: userInfo.id, email: userInfo.email, } : null, tools_available: [ 'articles_list', 'articles_get', 'articles_create', 'articles_update', 'articles_delete', 'sites_list', 'sites_get', 'sites_create', 'media_list', 'media_upload', 'media_get', 'search', 'server_info', ], configuration: { baseURL: config.baseURL, timeout: config.timeout, maxRetries: config.maxRetries, }, troubleshooting: { common_issues: [ 'If connection fails, verify PAYLOAD_API_URL is correct', 'If authentication fails, check PAYLOAD_API_TOKEN is valid and not expired', 'If timeout errors occur, check network connectivity to Payload server', 'JWT tokens typically expire after 2 hours - refresh if needed', ], support: 'Check Payload CMS documentation for API details', }, }; }