UNPKG

vme-mcp-server

Version:

An intelligent Model Context Protocol (MCP) server that transforms HPE VM Essentials (VME) infrastructure management into natural language conversations. Provision VMs, manage resources, and control your infrastructure through simple English commands with

55 lines (54 loc) 2.65 kB
import { writeFileSync, existsSync, mkdirSync } from "fs"; import { join } from "path"; // AI Training Data Collection Configuration const AI_TRAINING_ENABLED = process.env.ENABLE_AI_TRAINING_DATA === 'true'; const AI_TRAINING_FIELDS = (process.env.AI_TRAINING_DATA_FIELDS || 'user_input,parsed_output,success_metrics').split(','); const AI_TRAINING_RETENTION_DAYS = parseInt(process.env.AI_TRAINING_DATA_RETENTION_DAYS || '30'); // Generate session ID for interaction tracking export function generateSessionId() { return `session-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`; } // Privacy-aware interaction logging export function logInteraction(interaction) { if (!AI_TRAINING_ENABLED) { return; // Respect user privacy choice } try { // Ensure logs directory exists const logsDir = join(process.cwd(), 'ai-training-logs'); if (!existsSync(logsDir)) { mkdirSync(logsDir, { recursive: true }); } // Filter fields based on user preferences const filteredInteraction = { id: interaction.id || `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`, timestamp: new Date().toISOString(), session_id: interaction.session_id || 'unknown', tool_name: interaction.tool_name || 'unknown' }; // Only include fields user has opted into if (AI_TRAINING_FIELDS.includes('user_input') && interaction.user_input) { filteredInteraction.user_input = interaction.user_input; } if (AI_TRAINING_FIELDS.includes('parsed_output') && interaction.parsed_output) { filteredInteraction.parsed_output = interaction.parsed_output; } if (AI_TRAINING_FIELDS.includes('api_calls') && interaction.api_calls) { filteredInteraction.api_calls = interaction.api_calls; } if (AI_TRAINING_FIELDS.includes('success_metrics') && interaction.success_metrics) { filteredInteraction.success_metrics = interaction.success_metrics; } if (AI_TRAINING_FIELDS.includes('timing') && interaction.timing) { filteredInteraction.timing = interaction.timing; } // Append to daily log file (JSONL format) const logFile = join(logsDir, `interactions-${new Date().toISOString().split('T')[0]}.jsonl`); const logEntry = JSON.stringify(filteredInteraction) + '\n'; writeFileSync(logFile, logEntry, { flag: 'a' }); } catch (error) { // Fail silently to not disrupt user experience console.warn('AI training data logging failed:', error); } }