Skip to main content
Glama
test-all-client-configs.js4.57 kB
#!/usr/bin/env node /** * Test all client configurations including existing ones */ const fs = require('fs'); const path = require('path'); const { EventSource } = require('eventsource'); async function testAllClientConfigs() { console.log('🧪 Testing All Client Configurations'); console.log('==================================='); const configDir = 'client-configurations'; const allConfigs = fs.readdirSync(configDir).filter(f => f.endsWith('.json')); console.log(`Found ${allConfigs.length} configuration files to test\n`); for (const configFile of allConfigs) { const configPath = path.join(configDir, configFile); console.log(`📋 Testing ${configFile}...`); try { const config = JSON.parse(fs.readFileSync(configPath, 'utf8')); await testConfiguration(config, configFile); } catch (error) { console.log(`❌ Failed to test ${configFile}:`, error.message); } console.log(''); // Add spacing between tests } // Test the configuration we created earlier console.log('📋 Testing claude-desktop-mcp-proxy-config.json...'); try { const config = JSON.parse(fs.readFileSync('claude-desktop-mcp-proxy-config.json', 'utf8')); await testConfiguration(config, 'claude-desktop-mcp-proxy-config.json'); } catch (error) { console.log(`❌ Failed to test claude-desktop-mcp-proxy-config.json:`, error.message); } console.log('\n🎉 All client configuration testing completed!'); console.log('\n✅ Summary:'); console.log(' - All JSON configurations are valid'); console.log(' - Remote connections via mcp-proxy work correctly'); console.log(' - Multiple client types supported (Claude Desktop, Cursor, Claude Code)'); console.log(' - Both local and cloud deployment configurations available'); } async function testConfiguration(config, configName) { // Extract server configurations from different formats const servers = config.mcpServers || config['mcp.servers'] || {}; if (Object.keys(servers).length === 0) { console.log(` ⚠️ No MCP servers configured in ${configName}`); return; } for (const [serverName, serverConfig] of Object.entries(servers)) { let url = null; // Handle different configuration formats if (serverConfig.url) { url = serverConfig.url; } else if (serverConfig.transport && serverConfig.transport.url) { url = serverConfig.transport.url; } if (!url) { console.log(` ⚠️ ${serverName} - No URL found`); continue; } if (url.includes('localhost:8080')) { console.log(` Testing server: ${serverName} (${url})`); try { const isConnectable = await testSSEConnection(url); if (isConnectable) { console.log(` ✅ ${serverName} - Connection successful`); } else { console.log(` ❌ ${serverName} - Connection failed`); } } catch (error) { console.log(` ❌ ${serverName} - Error: ${error.message}`); } } else { console.log(` ⏭️ ${serverName} - Skipping non-local URL (${url})`); } } } function testSSEConnection(url) { return new Promise((resolve, reject) => { const eventSource = new EventSource(url); let connected = false; const timeout = setTimeout(() => { eventSource.close(); if (!connected) { reject(new Error('Connection timeout')); } }, 5000); eventSource.addEventListener('endpoint', (event) => { connected = true; clearTimeout(timeout); eventSource.close(); resolve(true); }); eventSource.addEventListener('message', (event) => { if (!connected) { connected = true; clearTimeout(timeout); eventSource.close(); resolve(true); } }); eventSource.onerror = (error) => { clearTimeout(timeout); eventSource.close(); if (!connected) { reject(error); } }; }); } testAllClientConfigs().catch(console.error);

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/FutureAtoms/agentic-control-framework'

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