UNPKG

it-tools-mcp

Version:

Full MCP 2025-06-18 compliant server with 121+ IT tools, logging, ping, progress tracking, cancellation, and sampling utilities

76 lines (74 loc) 2.84 kB
import { z } from "zod"; export function registerConvertList(server) { server.registerTool("convert_list", { description: "Convert between different list formats (comma-separated, line-separated, etc.)", inputSchema: { list: z.string().describe("Input list to convert"), inputFormat: z.enum(["comma", "semicolon", "newline", "space", "pipe"]).describe("Input format"), outputFormat: z.enum(["comma", "semicolon", "newline", "space", "pipe", "json", "quoted"]).describe("Output format"), trim: z.boolean().describe("Trim whitespace from items").optional(), }, // VS Code compliance annotations annotations: { title: "Convert List", description: "Convert between different list formats (comma-separated, line-separated, etc", readOnlyHint: false } }, async ({ list, inputFormat, outputFormat, trim = true }) => { try { const separators = { comma: ',', semicolon: ';', newline: '\n', space: ' ', pipe: '|' }; // Parse input list const inputSeparator = separators[inputFormat]; let items = list.split(inputSeparator); if (trim) { items = items.map(item => item.trim()).filter(item => item.length > 0); } // Convert to output format let result = ''; switch (outputFormat) { case 'json': result = JSON.stringify(items, null, 2); break; case 'quoted': // Proper escaping: backslashes first, then quotes result = items.map(item => { const escaped = item.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); return `"${escaped}"`; }).join(', '); break; default: const outputSeparator = separators[outputFormat]; result = items.join(outputSeparator); break; } return { content: [ { type: "text", text: `Converted list: ${result} Items count: ${items.length} Input format: ${inputFormat} Output format: ${outputFormat}`, }, ], }; } catch (error) { return { content: [ { type: "text", text: `Error converting list: ${error instanceof Error ? error.message : 'Unknown error'}`, }, ], }; } }); }