Skip to main content
Glama
utils-api-documentation.ts10.9 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { ReadResourceResult } from "@modelcontextprotocol/sdk/types.js"; export function registerUtilApiDocumentation(server: McpServer): void { server.registerResource( "util-api-docs", "simplifier://documentation/server-businessobjects/api/Util", { title: "Simplifier.Util API Documentation", mimeType: "text/markdown", description: "Complete reference for Simplifier.Util methods available in server-side Business Objects" }, async (uri): Promise<ReadResourceResult> => { const markdownContent = `# Simplifier.Util API Reference The Simplifier.Util API provides essential utility functions for data conversion and transformation within server-side Business Objects. ## Overview Access utility methods via: \`Simplifier.Util.<method>\` ## Base64 Encoding and Decoding ### \`Simplifier.Util.encodeBase64(data)\` Encodes data to Base64 format. - **Input**: (string) - **Result**: string \`\`\`javascript var encodedData = Simplifier.Util.encodeBase64("Hello World!"); // Result: "SGVsbG8gV29ybGQh" \`\`\` **Use Cases:** - Encoding binary data for transmission - Preparing data for API calls requiring Base64 format - Storing binary content in text-based systems ### \`Simplifier.Util.decodeBase64(encodedData)\` Decodes Base64 encoded data back to original format. - **Input**: (string) - **Result**: string \`\`\`javascript var decodedData = Simplifier.Util.decodeBase64("SGVsbG8gV29ybGQh"); // Result: "Hello World!" \`\`\` **Use Cases:** - Decoding received Base64 data - Processing encoded file content - Converting Base64 images for processing ## XML and JSON Conversion ### \`Simplifier.Util.xml2Json(xmlString)\` Converts XML string to JSON object. - **Input**: (string) - **Result**: object \`\`\`javascript var xmlData = '<root><name>John</name><age>30</age></root>'; var jsonResult = Simplifier.Util.xml2Json(xmlData); // Result: { root: { name: "John", age: "30" } } \`\`\` **Use Cases:** - Processing XML responses from external APIs - Converting XML configuration files - Transforming SOAP response data - Integrating with legacy XML systems ### \`Simplifier.Util.json2Xml(jsonObject)\` Converts JSON object to XML string. - **Input**: (object) - **Result**: string \`\`\`javascript var jsonData = { root: { name: "John", age: 30 } }; var xmlResult = Simplifier.Util.json2Xml(jsonData); // Result: "<root><name>John</name><age>30</age></root>" \`\`\` **Use Cases:** - Generating XML for SOAP requests - Creating XML configuration files - Preparing data for XML-based APIs - Converting structured data for legacy systems ## Common Usage Patterns ### Data Transformation Pipeline \`\`\`javascript function processExternalData(rawData) { // Step 1: Decode Base64 received data var decodedData = Simplifier.Util.decodeBase64(rawData); // Step 2: Parse XML to JSON for easier manipulation var jsonData = Simplifier.Util.xml2Json(decodedData); // Step 3: Process the data if (jsonData.response && jsonData.response.status === "success") { return jsonData.response.data; } return null; } \`\`\` ### API Integration Example \`\`\`javascript function sendXMLRequest(requestData) { // Convert JSON to XML for SOAP API var xmlPayload = Simplifier.Util.json2Xml({ soap: { body: { request: requestData } } }); // Encode for transmission var encodedPayload = Simplifier.Util.encodeBase64(xmlPayload); // Send to external system var response = Simplifier.Connector.ExternalAPI.sendRequest({ payload: encodedPayload, format: "xml" }); return response; } \`\`\` ### File Processing Workflow \`\`\`javascript function processUploadedXMLFile(base64FileContent) { try { // Decode the file content var xmlContent = Simplifier.Util.decodeBase64(base64FileContent); // Convert XML to JSON for processing var jsonData = Simplifier.Util.xml2Json(xmlContent); // Validate structure if (!jsonData.document || !jsonData.document.records) { output.error = "Invalid XML structure"; return output; } // Process records var processedRecords = []; var records = Array.isArray(jsonData.document.records.record) ? jsonData.document.records.record : [jsonData.document.records.record]; records.forEach(function(record) { if (record.id && record.name) { processedRecords.push({ id: record.id, name: record.name, processedAt: new Date().toISOString() }); } }); output.processedCount = processedRecords.length; output.records = processedRecords; return output; } catch (error) { output.error = "Failed to process XML file: " + error.message; return output; } } \`\`\` ## Error Handling Best Practices ### Base64 Operations \`\`\`javascript function safeBase64Decode(encodedData) { try { var decodedData = Simplifier.Util.decodeBase64(encodedData); return { success: true, data: decodedData }; } catch (error) { Simplifier.Log.error("Base64 decode failed", { input: encodedData.substring(0, 50) + "...", error: error.message }); return { success: false, error: "Invalid Base64 format" }; } } \`\`\` ### XML/JSON Conversion \`\`\`javascript function safeXmlToJson(xmlString) { try { // Validate XML is not empty if (!xmlString || xmlString.trim().length === 0) { throw new Error("XML string is empty"); } var jsonResult = Simplifier.Util.xml2Json(xmlString); // Validate conversion result if (!jsonResult || typeof jsonResult !== 'object') { throw new Error("XML conversion resulted in invalid JSON"); } return { success: true, data: jsonResult }; } catch (error) { Simplifier.Log.error("XML to JSON conversion failed", { xmlPreview: xmlString.substring(0, 100) + "...", error: error.message }); return { success: false, error: "XML parsing failed: " + error.message }; } } \`\`\` ## Performance Considerations ### Large Data Handling \`\`\`javascript function processLargeXMLFile(base64Content) { var startTime = Date.now(); // Log processing start for large files if (base64Content.length > 1000000) { // > 1MB Simplifier.Log.info("Processing large XML file", { size: base64Content.length + " characters", estimatedMB: Math.round(base64Content.length / 1048576 * 100) / 100 }); } try { var xmlContent = Simplifier.Util.decodeBase64(base64Content); var jsonData = Simplifier.Util.xml2Json(xmlContent); var processingTime = Date.now() - startTime; // Log performance metrics Simplifier.Log.info("XML processing completed", { processingTimeMs: processingTime, inputSizeChars: base64Content.length, outputObjects: Object.keys(jsonData).length }); return jsonData; } catch (error) { var processingTime = Date.now() - startTime; Simplifier.Log.error("Large XML processing failed", { processingTimeMs: processingTime, inputSizeChars: base64Content.length, error: error.message }); throw error; } } \`\`\` ### Memory Optimization \`\`\`javascript function batchProcessXMLRecords(xmlData) { var batchSize = 100; var jsonData = Simplifier.Util.xml2Json(xmlData); if (jsonData.records && jsonData.records.record) { var records = Array.isArray(jsonData.records.record) ? jsonData.records.record : [jsonData.records.record]; var processedBatches = 0; var totalRecords = records.length; for (var i = 0; i < totalRecords; i += batchSize) { var batch = records.slice(i, i + batchSize); // Process batch processBatch(batch); processedBatches++; if (processedBatches % 10 === 0) { Simplifier.Log.debug("Batch processing progress", { processedBatches: processedBatches, totalRecords: totalRecords, progress: Math.round((i / totalRecords) * 100) + "%" }); } } } } \`\`\` ## Security Considerations ### Input Validation \`\`\`javascript function validateAndProcessXML(xmlInput) { // Validate input is not empty if (!xmlInput || typeof xmlInput !== 'string') { output.error = "Invalid XML input"; return output; } // Check for potentially dangerous XML patterns var dangerousPatterns = [ '<!DOCTYPE', '<!ENTITY', '&xxe;' ]; for (var i = 0; i < dangerousPatterns.length; i++) { if (xmlInput.indexOf(dangerousPatterns[i]) !== -1) { Simplifier.Log.warn("Potentially dangerous XML pattern detected", { pattern: dangerousPatterns[i], blocked: true }); output.error = "XML contains restricted patterns"; return output; } } // Process safe XML try { var jsonResult = Simplifier.Util.xml2Json(xmlInput); output.data = jsonResult; return output; } catch (error) { output.error = "XML processing failed"; return output; } } \`\`\` ## Integration Examples ### SOAP Service Integration \`\`\`javascript function callSOAPService(operation, parameters) { // Create SOAP envelope var soapRequest = { 'soap:Envelope': { 'soap:Header': {}, 'soap:Body': {} } }; soapRequest['soap:Envelope']['soap:Body'][operation] = parameters; // Convert to XML var xmlRequest = Simplifier.Util.json2Xml(soapRequest); // Send to SOAP service var response = Simplifier.Connector.SOAPService.call({ body: xmlRequest, headers: { 'Content-Type': 'text/xml; charset=utf-8', 'SOAPAction': operation } }); // Parse response if (response && response.body) { var responseJson = Simplifier.Util.xml2Json(response.body); return responseJson; } return null; } \`\`\` ### File Export Functionality \`\`\`javascript function exportDataAsXML(dataArray) { // Structure data for XML var xmlStructure = { export: { metadata: { exportDate: new Date().toISOString(), recordCount: dataArray.length }, records: { record: dataArray } } }; // Convert to XML var xmlContent = Simplifier.Util.json2Xml(xmlStructure); // Encode for download var base64Content = Simplifier.Util.encodeBase64(xmlContent); output.downloadData = base64Content; output.filename = "export_" + new Date().toISOString().split('T')[0] + ".xml"; output.contentType = "application/xml"; return output; } \`\`\` This comprehensive Util API documentation provides all the essential utility functions for data conversion and transformation, complete with practical examples, error handling patterns, and security considerations for robust Business Object implementations.`; return { contents: [{ uri: uri.href, text: markdownContent, mimeType: "text/markdown" }] }; } ); }

Latest Blog Posts

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/SimplifierIO/simplifier-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server