Skip to main content
Glama

Visum Thinker MCP Server

MIT License
test-complete-server-client.mjsโ€ข6.03 kB
// Script per testare architettura Server-Client con gestione PID // Avvia server in background, testa client, poi termina server import { spawn } from 'child_process'; import { existsSync, unlinkSync } from 'fs'; import { PersistentVisumController } from './build/persistent-visum-controller.js'; console.log('๐Ÿ—๏ธ TEST COMPLETO SERVER-CLIENT CON GESTIONE PID'); console.log('=' .repeat(60)); const SERVER_INFO_FILE = 'visum-server-info.json'; let serverProcess = null; let serverPid = null; // Funzione per pulire file temporanei function cleanup() { if (existsSync(SERVER_INFO_FILE)) { unlinkSync(SERVER_INFO_FILE); console.log('๐Ÿงน File info server rimosso'); } } // Funzione per terminare il server function killServer() { if (serverProcess && !serverProcess.killed) { console.log(`๐Ÿ”ด Terminando server PID ${serverProcess.pid}...`); serverProcess.kill('SIGTERM'); // Forza terminazione dopo 5 secondi setTimeout(() => { if (!serverProcess.killed) { console.log('โšก Forzando terminazione server...'); serverProcess.kill('SIGKILL'); } }, 5000); } } // Gestione Ctrl+C process.on('SIGINT', () => { console.log('\n๐Ÿ›‘ Ricevuto Ctrl+C, terminando server...'); killServer(); cleanup(); process.exit(0); }); async function runTest() { try { // Pulisci stato precedente cleanup(); console.log('๐Ÿš€ FASE 1: Avvio server Visum in background...'); // Avvia server come processo separato serverProcess = spawn('node', ['test-server-client.mjs', 'server'], { detached: false, stdio: ['pipe', 'pipe', 'pipe'] }); serverPid = serverProcess.pid; console.log(`๐Ÿ“‹ Server avviato con PID ${serverPid}`); // Cattura output del server serverProcess.stdout.on('data', (data) => { const output = data.toString().trim(); if (output) { console.log(`๐Ÿ–ฅ๏ธ Server: ${output}`); } }); serverProcess.stderr.on('data', (data) => { const output = data.toString().trim(); if (output) { console.log(`๐Ÿ–ฅ๏ธ Server: ${output}`); } }); serverProcess.on('exit', (code) => { console.log(`๐Ÿ”ด Server terminato con codice ${code}`); }); // Aspetta che il server si inizializzi console.log('โณ Aspettando inizializzazione server...'); let serverReady = false; let attempts = 0; const maxAttempts = 90; // 90 secondi per progetto grande while (!serverReady && attempts < maxAttempts) { await new Promise(resolve => setTimeout(resolve, 1000)); attempts++; // Controlla se il file info server esiste if (existsSync(SERVER_INFO_FILE)) { console.log(`โœ… Server inizializzato dopo ${attempts} secondi!`); serverReady = true; } else { process.stdout.write(`โณ Attesa inizializzazione... ${attempts}/${maxAttempts}\\r`); } } if (!serverReady) { throw new Error('Timeout inizializzazione server'); } // Aspetta un momento extra per stabilizzazione await new Promise(resolve => setTimeout(resolve, 2000)); console.log('\\n๐Ÿ”Œ FASE 2: Test connessione client...'); // Crea client e testa connessione const client = PersistentVisumController.getInstance(); console.log('๐Ÿ” Tentativo connessione client al server...'); const connectResult = await client.startPersistentVisumProcess(); if (connectResult.success) { console.log(`โœ… Client connesso!`); console.log(`๐Ÿ“Š Network: ${connectResult.nodes} nodi, ${connectResult.links} link, ${connectResult.zones} zone`); // Test comando dal client console.log('\\nโšก FASE 3: Test comando dal client...'); const testStart = Date.now(); const clientTest = await client.executeCustomCode(` import time start_time = time.time() # Test comando dal client result = { 'client_command': True, 'nodes': visum.Net.Nodes.Count, 'links': visum.Net.Links.Count, 'zones': visum.Net.Zones.Count, 'query_time_ms': (time.time() - start_time) * 1000, 'timestamp': time.time() } `, 'Client Test Command'); const totalTime = Date.now() - testStart; if (clientTest.success) { console.log(`๐Ÿ”ฅ Comando client eseguito! Tempo totale: ${totalTime}ms`); console.log(`โšก VisumPy query: ${clientTest.result.query_time_ms.toFixed(3)}ms`); console.log(`๐Ÿ“Š Risultati: ${clientTest.result.nodes} nodi, ${clientTest.result.links} link, ${clientTest.result.zones} zone`); // Test multipli comandi veloci console.log('\\n๐Ÿ”ฅ FASE 4: Test multipli comandi veloci...'); for (let i = 1; i <= 5; i++) { const fastStart = Date.now(); const fastTest = await client.executeCustomCode(` result = { 'fast_test': ${i}, 'nodes': visum.Net.Nodes.Count, 'timestamp': time.time() } `, `Fast Test ${i}`); const fastTime = Date.now() - fastStart; if (fastTest.success) { console.log(`โšก Test ${i}: ${fastTime}ms - ${fastTest.result.nodes} nodi`); } else { console.log(`โŒ Test ${i} fallito: ${fastTest.error}`); } } console.log('\\nโœ… TUTTI I TEST COMPLETATI CON SUCCESSO!'); } else { console.log(`โŒ Comando client fallito: ${clientTest.error}`); } } else { console.log(`โŒ Connessione client fallita: ${connectResult.message}`); } } catch (error) { console.error('โŒ Errore durante test:', error.message); } finally { // Termina sempre il server console.log('\\n๐Ÿ”ด FASE FINALE: Terminazione server...'); killServer(); // Aspetta un momento per la terminazione await new Promise(resolve => setTimeout(resolve, 2000)); cleanup(); console.log('๐Ÿ Test completato!'); process.exit(0); } } runTest().catch(console.error);

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/multiluca2020/visum-thinker-mcp-server'

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