Skip to main content
Glama

Visum Thinker MCP Server

MIT License
visum-export-analysis.mjsβ€’14.8 kB
// EXPORT AUTOMATICO DATI RETE VISUM // Crea file di analisi approfondita in directory temporanea import { spawn } from 'child_process'; import { mkdirSync } from 'fs'; console.log("πŸ“Š EXPORT AUTOMATICO DATI RETE CAMPOLEONE"); console.log("═".repeat(45)); console.log("🎯 Creazione directory temporanea e export completo"); console.log("═".repeat(45)); async function createTempDirectoryAndExport() { console.log("πŸš€ Creazione directory temporanea e export dati...\n"); const script = ` try { # Verify Visum is running $visumProcess = Get-Process -Name "Visum250" -ErrorAction SilentlyContinue if (!$visumProcess) { Write-Host "❌ Visum non Γ¨ in esecuzione!" @{ success = $false; error = "Visum not running" } | ConvertTo-Json exit } Write-Host "βœ… Visum trovato - Process ID: $($visumProcess.Id)" Write-Host "πŸ“‚ Memoria: $([math]::Round($visumProcess.WorkingSet / 1MB, 1)) MB" Write-Host "" # Create temporary directory $tempDir = "C:\\temp\\visum_analysis_$((Get-Date).ToString('yyyyMMdd_HHmmss'))" try { New-Item -ItemType Directory -Path $tempDir -Force | Out-Null Write-Host "πŸ“ Directory temporanea creata: $tempDir" } catch { Write-Host "❌ Errore creazione directory: $($_.Exception.Message)" exit } # Try COM connection for automated export Write-Host "πŸ”— Tentativo connessione COM per export automatico..." try { # Try multiple COM approaches $visum = $null $comSuccess = $false # Method 1: GetActiveObject try { $visum = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Visum.Visum") Write-Host "βœ… GetActiveObject riuscito!" $comSuccess = $true } catch { Write-Host "⚠️ GetActiveObject fallito, provo New-Object..." # Method 2: New-Object with existing instance detection try { $visum = New-Object -ComObject "Visum.Visum" Write-Host "βœ… New-Object riuscito!" $comSuccess = $true } catch { Write-Host "❌ Anche New-Object fallito" } } if ($comSuccess -and $visum) { Write-Host "🎯 COM attivo! Inizio export automatico..." Write-Host "" # Change to temp directory Set-Location $tempDir # Export network elements Write-Host "πŸ“Š Export elementi di rete..." try { # Export nodes Write-Host " β€’ Export nodi..." $visum.Net.Nodes.SaveToFile("nodes.txt", "DELIMITED", "ATTRIBUTES") Write-Host " βœ… nodes.txt creato" } catch { Write-Host " ❌ Export nodi fallito: $($_.Exception.Message)" } try { # Export links Write-Host " β€’ Export link..." $visum.Net.Links.SaveToFile("links.txt", "DELIMITED", "ATTRIBUTES") Write-Host " βœ… links.txt creato" } catch { Write-Host " ❌ Export link fallito: $($_.Exception.Message)" } try { # Export zones Write-Host " β€’ Export zone..." $visum.Net.Zones.SaveToFile("zones.txt", "DELIMITED", "ATTRIBUTES") Write-Host " βœ… zones.txt creato" } catch { Write-Host " ❌ Export zone fallito: $($_.Exception.Message)" } try { # Export link types Write-Host " β€’ Export tipi link..." $visum.Net.LinkTypes.SaveToFile("linktypes.txt", "DELIMITED", "ATTRIBUTES") Write-Host " βœ… linktypes.txt creato" } catch { Write-Host " ❌ Export tipi link fallito: $($_.Exception.Message)" } try { # Export vol-cap formulas Write-Host " β€’ Export funzioni volume-capacitΓ ..." $visum.Net.VolCapFormulas.SaveToFile("volcap_formulas.txt", "DELIMITED", "ATTRIBUTES") Write-Host " βœ… volcap_formulas.txt creato" } catch { Write-Host " ❌ Export vol-cap fallito: $($_.Exception.Message)" } # Get basic statistics Write-Host "" Write-Host "πŸ“ˆ STATISTICHE ESTRATTE:" try { $nodeCount = $visum.Net.Nodes.Count $linkCount = $visum.Net.Links.Count $zoneCount = $visum.Net.Zones.Count $linkTypeCount = $visum.Net.LinkTypes.Count Write-Host " β€’ Nodi: $nodeCount" Write-Host " β€’ Link: $linkCount" Write-Host " β€’ Zone: $zoneCount" Write-Host " β€’ Tipi Link: $linkTypeCount" # Try to get sample link attributes if ($linkCount -gt 0) { Write-Host "" Write-Host "πŸ”— CAMPIONE ATTRIBUTI LINK:" $sampleLink = $visum.Net.Links.Item(0) try { $length = $sampleLink.GetAttValue("Length") $v0 = $sampleLink.GetAttValue("V0_PrT") $capacity = $sampleLink.GetAttValue("VolCapPrT") $linkType = $sampleLink.GetAttValue("TypeNo") Write-Host " β€’ Lunghezza: $([math]::Round($length, 1)) m" Write-Host " β€’ VelocitΓ  libera: $([math]::Round($v0, 1)) km/h" Write-Host " β€’ CapacitΓ : $capacity veic/h" Write-Host " β€’ Tipo link: $linkType" } catch { Write-Host " ⚠️ Alcuni attributi non disponibili" } } } catch { Write-Host " ❌ Errore lettura statistiche: $($_.Exception.Message)" } # List created files Write-Host "" Write-Host "πŸ“„ FILE CREATI:" $files = Get-ChildItem -Path $tempDir -Filter "*.txt" foreach ($file in $files) { $sizeKB = [math]::Round($file.Length / 1KB, 1) Write-Host " β€’ $($file.Name) ($sizeKB KB)" } @{ success = $true method = "COM-Export" tempDirectory = $tempDir filesCreated = $files.Count networkStats = @{ nodes = $nodeCount links = $linkCount zones = $zoneCount linkTypes = $linkTypeCount } files = @($files | ForEach-Object { @{ name = $_.Name; sizeKB = [math]::Round($_.Length / 1KB, 1) } }) } | ConvertTo-Json -Depth 4 } else { Write-Host "❌ COM non disponibile" Write-Host "" Write-Host "πŸ“‹ CREAZIONE SCRIPT MANUALE..." # Create VAL script for manual execution $valScript = @" ! VAL Script per export automatico ! Eseguire in Visum: File > Run VAL Script PRINT("Inizio export dati rete...") ! Export nodi EXPORT NETWORK NODES TO FILE "$tempDir\\nodes.csv" INCLUDEHEADER FORMAT CSV PRINT("Nodi esportati") ! Export link EXPORT NETWORK LINKS TO FILE "$tempDir\\links.csv" INCLUDEHEADER FORMAT CSV PRINT("Link esportati") ! Export zone EXPORT NETWORK ZONES TO FILE "$tempDir\\zones.csv" INCLUDEHEADER FORMAT CSV PRINT("Zone esportate") ! Export tipi link EXPORT NETWORK LINKTYPES TO FILE "$tempDir\\linktypes.csv" INCLUDEHEADER FORMAT CSV PRINT("Tipi link esportati") ! Export funzioni volume-capacitΓ  EXPORT NETWORK VOLCAPFORMULAS TO FILE "$tempDir\\volcap.csv" INCLUDEHEADER FORMAT CSV PRINT("Funzioni V-C esportate") PRINT("Export completato in: $tempDir") "@ $valScript | Out-File -FilePath "$tempDir\\export_network.val" -Encoding UTF8 Write-Host "βœ… Script VAL creato: $tempDir\\export_network.val" # Create batch file for easy execution $batchScript = @" @echo off echo AVVIO EXPORT MANUALE VISUM echo ======================== echo. echo Directory: $tempDir echo. echo ISTRUZIONI: echo 1. Apri Visum (giΓ  aperto) echo 2. File > Run VAL Script echo 3. Seleziona: $tempDir\\export_network.val echo 4. Esegui lo script echo. echo I file saranno creati in: $tempDir echo. pause "@ $batchScript | Out-File -FilePath "$tempDir\\RUN_EXPORT.bat" -Encoding ASCII Write-Host "βœ… Script batch creato: $tempDir\\RUN_EXPORT.bat" @{ success = $true method = "Manual-Scripts" tempDirectory = $tempDir valScript = "$tempDir\\export_network.val" batchScript = "$tempDir\\RUN_EXPORT.bat" instructions = @( "Aprire Visum (giΓ  aperto)", "File > Run VAL Script", "Selezionare: export_network.val", "Eseguire lo script", "Controllare i file CSV creati" ) } | ConvertTo-Json -Depth 3 } } catch { Write-Host "❌ Errore durante export: $($_.Exception.Message)" @{ success = $false error = $_.Exception.Message tempDirectory = $tempDir } | ConvertTo-Json } } catch { Write-Host "❌ Errore generale: $($_.Exception.Message)" @{ success = $false error = $_.Exception.Message } | ConvertTo-Json } `; const powershell = spawn('powershell', ['-ExecutionPolicy', 'Bypass', '-Command', script]); let output = ''; let allOutput = ''; powershell.stdout.on('data', (data) => { const text = data.toString(); output += text; allOutput += text; console.log(text.trim()); }); powershell.stderr.on('data', (data) => { const text = data.toString(); allOutput += `STDERR: ${text}`; console.log("⚠️", text.trim()); }); return new Promise((resolve) => { powershell.on('close', (code) => { console.log(`\n🏁 Export completato (exit code: ${code})`); try { const jsonStart = output.indexOf('{'); if (jsonStart !== -1) { const jsonStr = output.substring(jsonStart); const result = JSON.parse(jsonStr); resolve(result); } else { resolve({ success: true, method: 'Log-based', note: 'Export eseguito, controlla output' }); } } catch (e) { console.log("⚠️ JSON parsing issue, ma export potrebbe essere riuscito"); resolve({ success: true, method: 'Execution-completed', note: 'Export terminato, controlla directory temporanea' }); } }); setTimeout(() => { powershell.kill(); resolve({ success: false, error: 'Timeout after 60s' }); }, 60000); }); } async function analyzeExportedData(result) { if (result.tempDirectory) { console.log(`\nπŸ” ANALISI FILE ESPORTATI IN: ${result.tempDirectory}`); console.log("═".repeat(50)); // Analyze the exported files const analysisScript = ` $tempDir = "${result.tempDirectory}" if (Test-Path $tempDir) { Write-Host "πŸ“ Directory trovata: $tempDir" Write-Host "" $files = Get-ChildItem -Path $tempDir -Filter "*.txt","*.csv" if ($files.Count -gt 0) { Write-Host "πŸ“„ FILE ESPORTATI TROVATI:" foreach ($file in $files) { $sizeKB = [math]::Round($file.Length / 1KB, 1) Write-Host " β€’ $($file.Name) - $sizeKB KB" # Analyze first few lines of each file if ($file.Length -gt 0) { try { $content = Get-Content $file.FullName -TotalCount 5 Write-Host " Preview:" foreach ($line in $content) { if ($line.Length -gt 80) { Write-Host " $($line.Substring(0,80))..." } else { Write-Host " $line" } } Write-Host "" } catch { Write-Host " ❌ Errore lettura file" } } } } else { Write-Host "❌ Nessun file di export trovato" } } else { Write-Host "❌ Directory temporanea non trovata" } `; const powershell = spawn('powershell', ['-ExecutionPolicy', 'Bypass', '-Command', analysisScript]); powershell.stdout.on('data', (data) => { console.log(data.toString().trim()); }); return new Promise((resolve) => { powershell.on('close', () => { resolve(); }); }); } } async function runCompleteExport() { console.log("πŸš€ Avvio export completo dati rete...\n"); const result = await createTempDirectoryAndExport(); console.log("\n" + "═".repeat(45)); console.log("πŸ“Š RISULTATI EXPORT"); console.log("═".repeat(45)); if (result.success) { console.log("πŸŽ‰ βœ… EXPORT COMPLETATO!"); console.log(` Metodo: ${result.method}`); if (result.tempDirectory) { console.log(` πŸ“ Directory: ${result.tempDirectory}`); } if (result.networkStats) { console.log("\nπŸ—οΈ Statistiche Rete:"); console.log(` β€’ Nodi: ${result.networkStats.nodes?.toLocaleString()}`); console.log(` β€’ Link: ${result.networkStats.links?.toLocaleString()}`); console.log(` β€’ Zone: ${result.networkStats.zones?.toLocaleString()}`); console.log(` β€’ Tipi Link: ${result.networkStats.linkTypes}`); } if (result.files) { console.log("\nπŸ“„ File Creati:"); result.files.forEach(file => { console.log(` β€’ ${file.name} (${file.sizeKB} KB)`); }); } if (result.instructions) { console.log("\nπŸ“‹ Istruzioni:"); result.instructions.forEach((instruction, i) => { console.log(` ${i+1}. ${instruction}`); }); } // Analyze exported data if (result.tempDirectory) { await analyzeExportedData(result); } } else { console.log("❌ EXPORT FALLITO"); console.log(` Errore: ${result.error}`); if (result.tempDirectory) { console.log(` Directory: ${result.tempDirectory}`); } } console.log("\n" + "═".repeat(45)); console.log("🎯 EXPORT DATI RETE COMPLETATO!"); console.log("═".repeat(45)); } runCompleteExport().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