import { z } from "zod";
/**
* Data Tools - Manipulation, conversion, and mocking
*/
// ============================================
// Convert Format
// ============================================
export const convertFormatSchema = {
name: "convert_format",
description: "Converts data between common formats (JSON, YAML, XML, CSV)",
inputSchema: z.object({
input: z.string().describe("Input string"),
from: z.enum(["json", "yaml", "xml", "csv"]).describe("Source format"),
to: z.enum(["json", "yaml", "xml", "csv"]).describe("Target format")
})
};
export function convertFormatHandler(args: { input: string; from: string; to: string }) {
const { input, from, to } = args;
// Mock implementation for demonstration since we lack heavy libraries
// In a real app, we'd use 'yaml', 'xml2js', 'papaparse' libraries.
return {
content: [{
type: "text",
text: `# Format Conversion (${from} -> ${to})\n\nOutput:\n\`\`\`${to}\n[Converted content would appear here. In this demo version, pretend logic converts:\n${input.slice(0, 50)}...] \n\`\`\`\n\n(Note: Add 'yaml', 'xml-js' dependencies to fully implement this)`
}]
};
}
// ============================================
// Generate Mock Data
// ============================================
export const generateMockDataSchema = {
name: "generate_mock_data",
description: "Generates realistic mock data based on a schema description",
inputSchema: z.object({
schema: z.string().describe("Structure description (e.g. 'User: id, name, email')"),
count: z.number().default(5).describe("Number of items to generate"),
format: z.enum(["json", "csv", "sql"]).default("json")
})
};
export function generateMockDataHandler(args: { schema: string; count: number; format: string }) {
const { schema, count, format } = args;
const names = ["Alice", "Bob", "Charlie", "David", "Eve"];
const emails = ["alice@example.com", "bob@test.org", "charlie@corp.net"];
const items = [];
for (let i = 0; i < count; i++) {
items.push({
id: i + 1,
name: names[i % names.length],
email: emails[i % emails.length],
role: i % 3 === 0 ? "admin" : "user",
active: Math.random() > 0.5
});
}
let output = "";
if (format === "json") {
output = JSON.stringify(items, null, 2);
} else if (format === "csv") {
output = "id,name,email,role,active\n" + items.map(i => `${i.id},${i.name},${i.email},${i.role},${i.active}`).join("\n");
} else if (format === "sql") {
output = `INSERT INTO users (id, name, email, role, active) VALUES\n` +
items.map(i => ` (${i.id}, '${i.name}', '${i.email}', '${i.role}', ${i.active})`).join(",\n") + ";";
}
return {
content: [{
type: "text",
text: `# Mock Data (${count} items)\n\n\`\`\`${format}\n${output}\n\`\`\``
}]
};
}
// Export all
export const dataTools = {
convertFormatSchema, convertFormatHandler,
generateMockDataSchema, generateMockDataHandler
};