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
112 lines (111 loc) • 4.13 kB
JavaScript
import { readFileSync, existsSync, readdirSync } from "fs";
import { join } from "path";
export const exportTrainingDataTool = {
name: "export_training_data",
description: "Export AI training data for model improvement (requires ENABLE_AI_TRAINING_DATA=true)",
inputSchema: {
type: "object",
properties: {
format: {
type: "string",
description: "Export format: 'jsonl' or 'csv'",
enum: ["jsonl", "csv"]
},
days: {
type: "number",
description: "Number of days of data to export (default: 7)"
}
},
required: []
}
};
export async function handleExportTrainingData(args) {
const AI_TRAINING_ENABLED = process.env.ENABLE_AI_TRAINING_DATA === 'true';
if (!AI_TRAINING_ENABLED) {
return {
content: [
{
type: "text",
text: JSON.stringify({
error: "Training data collection is disabled",
message: "Set ENABLE_AI_TRAINING_DATA=true in .env to enable data collection and export"
}, null, 2)
}
],
isError: true
};
}
const { format = "jsonl", days = 7 } = args;
try {
const logsDir = join(process.cwd(), 'ai-training-logs');
if (!existsSync(logsDir)) {
return {
content: [
{
type: "text",
text: JSON.stringify({
message: "No training data found",
data_count: 0
}, null, 2)
}
],
isError: false
};
}
// Collect data from last N days
const cutoffDate = new Date(Date.now() - (days * 24 * 60 * 60 * 1000));
const allData = [];
// Read log files and aggregate data
const logFiles = readdirSync(logsDir).filter((file) => file.startsWith('interactions-') && file.endsWith('.jsonl'));
for (const file of logFiles) {
const fileDate = new Date(file.replace('interactions-', '').replace('.jsonl', ''));
if (fileDate >= cutoffDate) {
const content = readFileSync(join(logsDir, file), 'utf-8');
const lines = content.trim().split('\n').filter(line => line.trim());
for (const line of lines) {
try {
allData.push(JSON.parse(line));
}
catch (e) {
// Skip malformed lines
}
}
}
}
return {
content: [
{
type: "text",
text: JSON.stringify({
message: `Exported ${allData.length} training data records from last ${days} days`,
format: format,
data_count: allData.length,
data: format === 'jsonl' ? allData : allData.map(item => ({
timestamp: item.timestamp,
tool: item.tool_name,
user_input: JSON.stringify(item.user_input),
parsed_output: JSON.stringify(item.parsed_output),
success: item.success_metrics?.operation_success,
confidence: item.success_metrics?.confidence_score
}))
}, null, 2)
}
],
isError: false
};
}
catch (error) {
return {
content: [
{
type: "text",
text: JSON.stringify({
error: "Failed to export training data",
message: error.message
}, null, 2)
}
],
isError: true
};
}
}