Skip to main content
Glama
WorkflowValidatorTool.ts4.45 kB
import { MCPTool } from 'mcp-framework'; import NamingValidator from '../validators/NamingValidator.js'; import ErrorHandlingValidator from '../validators/ErrorHandlingValidator.js'; import SecurityValidator from '../validators/SecurityValidator.js'; import PerformanceValidator from '../validators/PerformanceValidator.js'; import DocumentationValidator from '../validators/DocumentationValidator.js'; import CalendarIntegrationValidator from '../validators/CalendarIntegrationValidator.js'; import { z } from 'zod'; // Définition de l'interface pour les paramètres d'entrée interface WorkflowValidatorInput { workflow: any; validators: Array<'naming' | 'errorHandling' | 'security' | 'performance' | 'documentation' | 'calendarIntegration' | 'all'>; strictness: 'low' | 'medium' | 'high'; } /** * Outil de validation des workflows n8n * Permet de valider les workflows selon différents critères (nommage, gestion d'erreurs, sécurité, performance, documentation) */ class WorkflowValidatorTool extends MCPTool<WorkflowValidatorInput> { /** * Nom de l'outil */ name = 'workflow_validator'; /** * Description de l'outil */ description = 'Valide les workflows n8n selon différents critères'; /** * Schéma de validation des paramètres */ schema = { workflow: { type: z.any(), description: 'Le workflow n8n à valider' }, validators: { type: z.array(z.enum(['naming', 'errorHandling', 'security', 'performance', 'documentation', 'calendarIntegration', 'all'])), description: 'Liste des validateurs à exécuter' }, strictness: { type: z.enum(['low', 'medium', 'high']), description: 'Niveau de rigueur de la validation' } }; /** * Exécute la validation du workflow * @param input Paramètres d'entrée * @returns Résultats de la validation */ async execute(input: WorkflowValidatorInput): Promise<any> { try { // Initialiser les résultats const results: any = { workflow: input.workflow.name || 'Workflow sans nom', strictness: input.strictness, validators: input.validators, validations: {}, summary: { errors: 0, warnings: 0, suggestions: 0, passed: 0, total: 0 } }; // Exécuter les validateurs sélectionnés const validatorsToRun = this.getValidatorsToRun(input.validators); for (const validatorName of validatorsToRun) { const validator = this.getValidator(validatorName); if (validator) { const validationResult = await validator.validate(input.workflow, input.strictness); results.validations[validatorName] = validationResult; // Mettre à jour le résumé results.summary.errors += validationResult.errors?.length || 0; results.summary.warnings += validationResult.warnings?.length || 0; results.summary.suggestions += validationResult.suggestions?.length || 0; results.summary.passed += validationResult.passed?.length || 0; results.summary.total += validationResult.total || 0; } } return results; } catch (error: unknown) { console.error('Erreur lors de la validation du workflow:', error); const errorMessage = error instanceof Error ? error.message : String(error); return { success: false, error: errorMessage }; } } /** * Retourne la liste des validateurs à exécuter */ private getValidatorsToRun(validators: string[]): string[] { if (validators.includes('all')) { return ['naming', 'errorHandling', 'security', 'performance', 'documentation', 'calendarIntegration']; } return validators; } /** * Retourne l'instance du validateur demandé */ private getValidator(validatorName: string): any { switch (validatorName) { case 'naming': return new NamingValidator(); case 'errorHandling': return new ErrorHandlingValidator(); case 'security': return new SecurityValidator(); case 'performance': return new PerformanceValidator(); case 'documentation': return new DocumentationValidator(); case 'calendarIntegration': return new CalendarIntegrationValidator(); default: return null; } } } export default WorkflowValidatorTool;

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/lowprofix/n8n-mcp-server'

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