Skip to main content
Glama

Analytical MCP Server

data_visualization_generator.ts3.65 kB
import { z } from 'zod'; import { ValidationHelpers } from '../utils/validation_helpers.js'; import { ValidationError } from '../utils/errors.js'; import { CustomizationProvider } from '../utils/customization_provider.js'; import { VisualizationValidationProvider } from '../utils/visualization_validation_provider.js'; import { OutputFormattingProvider } from '../utils/output_formatting_provider.js'; import { VisualizationDetailProvider } from '../utils/visualization_detail_provider.js'; import { VisualizationSpecProvider } from '../utils/visualization_spec_provider.js'; // TypeScript interface for visualization options // Module-level provider instance for chart generation functions const outputFormattingProvider = new OutputFormattingProvider(); export interface VisualizationOptions { data: Record<string, any>[]; visualizationType: 'scatter' | 'line' | 'bar' | 'histogram' | 'box' | 'heatmap' | 'pie' | 'violin' | 'correlation'; variables: string[]; title?: string; includeTrendline?: boolean; options?: Record<string, any>; } // Schema for the tool parameters export const dataVisualizationGeneratorSchema = z.object({ data: z.array(z.record(z.string(), z.any())).describe('Array of data objects to visualize'), visualizationType: z .enum(['scatter', 'line', 'bar', 'histogram', 'box', 'heatmap', 'pie', 'violin', 'correlation']) .describe('Type of visualization to generate'), variables: z .array(z.string()) .describe('Variable names to include in the visualization (properties in data objects)'), title: z.string().optional().describe('Optional title for the visualization'), includeTrendline: z .boolean() .optional() .default(false) .describe('Include a trendline (for scatter plots)'), options: z.record(z.any()).optional().describe('Additional visualization options'), }); // Tool implementation export async function dataVisualizationGenerator( params: VisualizationOptions ): Promise<string> { // Destructure parameters from options object const { data, visualizationType, variables, title, includeTrendline = false, options } = params; // Initialize provider instances const validationProvider = new VisualizationValidationProvider(); const customizationProvider = new CustomizationProvider(); const outputFormattingProvider = new OutputFormattingProvider(); const detailProvider = new VisualizationDetailProvider(); const specProvider = new VisualizationSpecProvider(); // Apply early return validation patterns validationProvider.validateGeneralInputs(data, visualizationType, variables); // Set default title if not provided const visualizationTitle = title || `${outputFormattingProvider.formatVisualizationType(visualizationType)} of ${variables.join(', ')}`; // Generate result using extracted helper methods let result = outputFormattingProvider.generateVisualizationHeader(visualizationType, variables, visualizationTitle, data.length); // Add visualization-specific details result += detailProvider.getVisualizationTypeInfo(visualizationType); // Generate visualization specification const spec = specProvider.generateVisualizationSpec( visualizationType, variables, data, visualizationTitle, includeTrendline, options ); // Add specification and usage sections using extracted helpers result += outputFormattingProvider.generateSpecificationSection(spec); result += outputFormattingProvider.generateUsageInstructions(); result += outputFormattingProvider.generateRecommendationSections(visualizationType, variables); return result; }

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/quanticsoul4772/analytical-mcp'

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