Skip to main content
Glama

Visum Thinker MCP Server

MIT License
test-direct-approach.pyโ€ข7.44 kB
# Test approccio DIRETTO - Una funzione Python che mantiene istanza VisumPy import sys import os import time import json print("=== TEST APPROCCIO DIRETTO ===") print("Obiettivo: Funzione Python che mantiene istanza e riceve codice da eseguire") # Setup paths visum_path = r"H:\Program Files\PTV Vision\PTV Visum 2025\Exe" python_path = os.path.join(visum_path, "Python") if visum_path not in sys.path: sys.path.insert(0, visum_path) if python_path not in sys.path: sys.path.insert(0, python_path) # APPROCCIO DIRETTO: Classe che mantiene istanza class DirectVisumManager: def __init__(self): self.visum_instance = None self.project_loaded = None def initialize_visum(self): """Inizializza istanza VisumPy una sola volta""" if self.visum_instance is None: try: import VisumPy.helpers as vh print("Creating VisumPy instance...") self.visum_instance = vh.CreateVisum(250) # Carica progetto project_path = r"H:\go\italferr2025\Campoleone\100625_Versione_base_v0.3_sub_ok_priv.ver" print("Loading project...") self.visum_instance.LoadVersion(project_path) self.project_loaded = project_path nodes = self.visum_instance.Net.Nodes.Count print(f"โœ… Initialized: {nodes:,} nodes") return True except Exception as e: print(f"โŒ Initialization failed: {e}") return False else: print("โœ… Instance already initialized") return True def execute_analysis(self, analysis_code): """Esegue codice di analisi sull'istanza attiva""" if not self.initialize_visum(): return {"error": "Failed to initialize Visum"} try: # Crea un namespace con visum disponibile namespace = { 'visum': self.visum_instance, 'json': json, 'time': time, 'result': {} # Dove salvare i risultati } # Esegui il codice exec(analysis_code, namespace) # Restituisci i risultati return namespace.get('result', {"success": True, "message": "Code executed"}) except Exception as e: return {"error": f"Analysis failed: {e}"} def get_instance_info(self): """Info sull'istanza corrente""" if self.visum_instance: try: return { "active": True, "nodes": self.visum_instance.Net.Nodes.Count, "links": self.visum_instance.Net.Links.Count, "zones": self.visum_instance.Net.Zones.Count, "project": self.project_loaded } except: return {"active": False, "error": "Instance not accessible"} return {"active": False} # TEST dell'approccio diretto print(f"\n๐Ÿงช Testing Direct Visum Manager") manager = DirectVisumManager() # Test 1: Basic info print(f"\n๐Ÿ“Š Test 1: Basic network info") analysis1 = """ # Basic network analysis nodes = visum.Net.Nodes.Count links = visum.Net.Links.Count zones = visum.Net.Zones.Count result['basic_stats'] = { 'nodes': nodes, 'links': links, 'zones': zones, 'timestamp': time.time() } print(f"Network: {nodes:,} nodes, {links:,} links, {zones:,} zones") """ result1 = manager.execute_analysis(analysis1) print(f"Result 1: {result1}") # Test 2: Node details print(f"\n๐Ÿ” Test 2: Node details") analysis2 = """ # Node analysis node_container = visum.Net.Nodes if node_container.Count > 0: # Get first 5 nodes first_nodes = node_container.GetMultiAttValues('No')[:5] result['node_analysis'] = { 'total_nodes': node_container.Count, 'first_5_nodes': first_nodes, 'timestamp': time.time() } print(f"First 5 nodes: {first_nodes}") else: result['node_analysis'] = {'error': 'No nodes found'} """ result2 = manager.execute_analysis(analysis2) print(f"Result 2: {result2}") # Test 3: Custom calculation print(f"\n๐Ÿงฎ Test 3: Custom calculation") analysis3 = """ # Custom network calculation total_elements = visum.Net.Nodes.Count + visum.Net.Links.Count # Try to get some link data try: link_container = visum.Net.Links if link_container.Count > 0: # Get lengths of first 5 links first_link_lengths = link_container.GetMultiAttValues('Length')[:5] avg_length = sum(first_link_lengths) / len(first_link_lengths) if first_link_lengths else 0 else: first_link_lengths = [] avg_length = 0 result['custom_calculation'] = { 'total_elements': total_elements, 'sample_link_lengths': first_link_lengths, 'average_sample_length': avg_length, 'calculation_time': time.time() } print(f"Total elements: {total_elements:,}") print(f"Avg sample link length: {avg_length:.2f}") except Exception as e: result['custom_calculation'] = {'error': f'Link analysis failed: {e}'} """ result3 = manager.execute_analysis(analysis3) print(f"Result 3: {result3}") # Test 4: Performance - multiple calls print(f"\nโšก Test 4: Performance - multiple rapid calls") performance_results = [] for i in range(5): start_time = time.time() perf_analysis = f""" # Quick performance test {i+1} nodes = visum.Net.Nodes.Count result['perf_test_{i+1}'] = {{ 'nodes': nodes, 'test_number': {i+1}, 'timestamp': time.time() }} """ perf_result = manager.execute_analysis(perf_analysis) elapsed = time.time() - start_time performance_results.append({ 'test': i+1, 'time_ms': round(elapsed * 1000, 2), 'nodes': perf_result.get(f'perf_test_{i+1}', {}).get('nodes', 'N/A') }) print(f" Test {i+1}: {elapsed*1000:.2f}ms - {perf_result.get(f'perf_test_{i+1}', {}).get('nodes', 'N/A')} nodes") print(f"\n๐Ÿ“ˆ Performance Summary:") avg_time = sum(p['time_ms'] for p in performance_results) / len(performance_results) print(f" Average time: {avg_time:.2f}ms") print(f" All consistent: {len(set(p['nodes'] for p in performance_results)) == 1}") # Test 5: Instance info print(f"\n๐Ÿฅ Test 5: Instance health") instance_info = manager.get_instance_info() print(f"Instance info: {instance_info}") # Final results print(f"\nโœ… DIRECT APPROACH RESULTS:") print(f" โœ… Single VisumPy instance maintained") print(f" โœ… Multiple analyses executed successfully") print(f" โœ… Average execution time: {avg_time:.2f}ms") print(f" โœ… Consistent data across all calls") print(f" โœ… No external server process needed") # Save success final_result = { "approach": "Direct VisumPy Manager", "success": True, "average_time_ms": avg_time, "consistent_data": len(set(p['nodes'] for p in performance_results)) == 1, "instance_info": instance_info, "test_results": performance_results } with open(r"H:\visum-thinker-mcp-server\direct_approach_success.json", 'w') as f: json.dump(final_result, f, indent=2) print(f"๐Ÿ’พ Direct approach success saved!") print(f"\n=== DIRECT APPROACH COMPLETED ===") print("This approach is MUCH simpler than a server process!")

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