Skip to main content
Glama
test-direct-mcp.tsโ€ข6.58 kB
#!/usr/bin/env tsx /** * Direct test of MCP server tools to validate Queue Diagnostics functionality * This bypasses any service registry issues and tests the actual tool implementation */ import { serviceRegistry } from "../src/services/registry.js"; import type { ServiceConfig } from "../src/services/base.js"; import { loadConfigFromEnvOnly } from "../src/config.js"; async function loadConfig() { try { return await loadConfigFromEnvOnly(); } catch (error) { console.error("โŒ Failed to load env-based config:", error); process.exit(1); } } async function testQueueDiagnosticsTool() { console.log("๐Ÿงช Testing Queue Diagnostics Tool Directly"); console.log("==========================================\n"); // Load configuration const config = await loadConfig(); // Initialize services serviceRegistry.clear(); if (config.services) { for (const [name, serviceConfig] of Object.entries(config.services)) { try { serviceRegistry.register(name, serviceConfig as ServiceConfig); console.log(`โœ… Registered service: ${name}`); } catch (error) { console.error(`โŒ Failed to register service ${name}:`, error); } } } console.log( `\nAvailable services: ${serviceRegistry.getAllNames().join(", ")}\n`, ); // Test the Queue Diagnostics tool directly const serviceName = "radarr-uhd"; const service = serviceRegistry.get(serviceName); if (!service) { console.error(`โŒ Service '${serviceName}' not found`); return; } console.log(`๐Ÿ” Testing Queue Diagnostics on: ${serviceName}`); try { // Call the queue diagnostics method directly const result = await service.queueDiagnostics(); console.log("\n๐Ÿ“Š Queue Diagnostics Result:"); console.log(` OK: ${result.ok}`); if (result.ok && result.data) { const data = result.data; console.log(` Service: ${data.service}`); console.log(` Media Kind: ${data.mediaKind}`); console.log(` Total Queue Items: ${data.totalQueueItems}`); console.log(` Issues Found: ${data.issuesFound}`); console.log(` Issues Analyzed: ${data.issuesAnalyzed.length}`); console.log(` Fixes Attempted: ${data.fixesAttempted.length}`); if (data.issuesAnalyzed.length > 0) { console.log("\n๐Ÿ” Issues Analyzed:"); data.issuesAnalyzed.forEach((issue, index) => { console.log(`\n Issue ${index + 1}:`); console.log(` ID: ${issue.id}`); console.log(` Title: ${issue.title}`); console.log(` Status: ${issue.status}`); console.log( ` Category: ${issue.category.type} (${issue.category.severity})`, ); console.log(` Auto-fixable: ${issue.category.autoFixable}`); console.log(` Message: ${issue.message}`); console.log(` Suggested Action: ${issue.suggestedAction}`); }); } else { console.log("\nโš ๏ธ No issues were analyzed - this indicates a problem"); } if (data.fixesAttempted.length > 0) { console.log("\n๐Ÿ”ง Fixes Attempted:"); data.fixesAttempted.forEach((fix, index) => { console.log(`\n Fix ${index + 1}:`); console.log(` ID: ${fix.id}`); console.log(` Action: ${fix.action}`); console.log(` Attempted: ${fix.attempted}`); console.log(` Success: ${fix.success}`); if (fix.error) { console.log(` Error: ${fix.error}`); } }); } console.log("\n๐Ÿ“ˆ Summary:"); console.log(` Fixed: ${data.summary.fixed}`); console.log(` Failed: ${data.summary.failed}`); console.log(` Requires Manual: ${data.summary.requiresManual}`); // Validate expected behavior if (data.totalQueueItems > 0 && data.issuesFound === 0) { console.log("\nโŒ ISSUE DETECTED:"); console.log(" Queue has items but no issues found"); console.log(" This suggests the detection logic isn't working"); } else if (data.issuesFound > 0 && data.fixesAttempted.length === 0) { console.log("\nโŒ ISSUE DETECTED:"); console.log(" Issues found but no fixes attempted"); console.log(" This suggests the auto-fix logic isn't working"); } else if (data.issuesFound > 0 && data.fixesAttempted.length > 0) { console.log("\nโœ… SUCCESS:"); console.log(" Issues found and fixes attempted"); console.log(" Queue Diagnostics is working correctly"); } } else if (result.error) { console.error("โŒ Queue Diagnostics failed:", result.error); } else { console.error("โŒ Unexpected result structure"); } } catch (error) { console.error("โŒ Test failed:", error); if (error instanceof Error) { console.error(" Stack:", error.stack); } } } async function testSystemStatus() { console.log("\n๐Ÿ” Testing System Status (baseline test)"); console.log("========================================"); const serviceName = "radarr-uhd"; const service = serviceRegistry.get(serviceName); if (!service) { console.error(`โŒ Service '${serviceName}' not found`); return; } try { const result = await service.systemStatus(); console.log(` System Status OK: ${result.ok}`); if (result.ok && result.data) { console.log(` Service Name: ${result.data.service}`); console.log(` Version: ${result.data.version}`); console.log(` Healthy: ${result.data.isHealthy}`); } } catch (error) { console.error("โŒ System Status test failed:", error); } } async function testQueueList() { console.log("\n๐Ÿ” Testing Queue List (baseline test)"); console.log("===================================="); const serviceName = "radarr-uhd"; const service = serviceRegistry.get(serviceName); if (!service) { console.error(`โŒ Service '${serviceName}' not found`); return; } try { const result = await service.queueList(); console.log(` Queue List OK: ${result.ok}`); if (result.ok && result.data) { console.log(` Total Items: ${result.data.total}`); console.log(` Items Returned: ${result.data.items.length}`); result.data.items.forEach((item, index) => { console.log(` Item ${index + 1}: ${item.title} (${item.status})`); }); } } catch (error) { console.error("โŒ Queue List test failed:", error); } } async function main() { console.log("๐Ÿš€ Direct MCP Tool Test"); console.log("=======================\n"); await testSystemStatus(); await testQueueList(); await testQueueDiagnosticsTool(); console.log("\n" + "=".repeat(50)); console.log("๐ŸŽฏ Test completed!"); } if (import.meta.url === `file://${process.argv[1]}`) { main().catch((error) => { console.error("๐Ÿ’ฅ Test script failed:", error); process.exit(1); }); }

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/thesammykins/FlixBridge'

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