Skip to main content
Glama

In Memoria

validation.ts4.94 kB
import { z } from 'zod'; import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; // Input validation schemas for all MCP tools export const AnalyzeCodebaseSchema = z.object({ path: z.string().min(1, 'Path is required') }); export const GetFileContentSchema = z.object({ path: z.string().min(1, 'Path is required') }); export const GetProjectStructureSchema = z.object({ path: z.string().min(1, 'Path is required'), maxDepth: z.number().int().min(1).max(10).optional().default(5) }); export const SearchCodebaseSchema = z.object({ query: z.string().min(1, 'Query is required'), type: z.enum(['semantic', 'text', 'pattern']).optional().default('text'), language: z.string().optional(), limit: z.number().int().min(1).max(100).optional().default(20) }); export const GenerateDocumentationSchema = z.object({ path: z.string().min(1, 'Path is required'), format: z.enum(['markdown', 'html', 'json']).optional().default('markdown'), includeArchitecture: z.boolean().optional().default(true), includeExamples: z.boolean().optional().default(true), outputPath: z.string().optional() }); export const LearnCodebaseIntelligenceSchema = z.object({ path: z.string().min(1, 'Path is required'), force: z.boolean().optional().default(false) }); export const GetSemanticInsightsSchema = z.object({ query: z.string().optional(), conceptType: z.string().optional(), limit: z.number().int().min(1).max(50).optional().default(10) }); export const GetPatternRecommendationsSchema = z.object({ problemDescription: z.string().min(1, 'Problem description is required'), currentFile: z.string().optional(), selectedCode: z.string().optional(), preferences: z.record(z.string(), z.any()).optional() }); export const PredictCodingApproachSchema = z.object({ problemDescription: z.string().min(1, 'Problem description is required'), context: z.record(z.string(), z.any()).optional() }); export const GetDeveloperProfileSchema = z.object({ includeRecentActivity: z.boolean().optional().default(true) }); export const ContributeInsightsSchema = z.object({ type: z.enum(['bug_pattern', 'optimization', 'refactor_suggestion', 'best_practice']), content: z.record(z.string(), z.any()), confidence: z.number().min(0).max(1), sourceAgent: z.string().min(1, 'Source agent identifier is required'), impactPrediction: z.record(z.string(), z.any()).optional() }); // Automation Tool Schemas export const AutoLearnIfNeededSchema = z.object({ path: z.string().optional(), force: z.boolean().optional().default(false), includeProgress: z.boolean().optional().default(true), skipLearning: z.boolean().optional().default(false), includeSetupSteps: z.boolean().optional().default(false) }); export const GetLearningStatusSchema = z.object({ path: z.string().optional() }); export const QuickSetupSchema = z.object({ path: z.string().optional(), skipLearning: z.boolean().optional().default(false) }); // Monitoring Tool Schemas export const GetSystemStatusSchema = z.object({ includeMetrics: z.boolean().optional().default(true), includeDiagnostics: z.boolean().optional().default(false) }); export const GetIntelligenceMetricsSchema = z.object({ includeBreakdown: z.boolean().optional().default(true) }); export const GetPerformanceStatusSchema = z.object({ runBenchmark: z.boolean().optional().default(false) }); // Validation function export function validateInput(schema: z.ZodSchema<any>, input: any, toolName: string): any { try { return schema.parse(input); } catch (error) { if (error instanceof z.ZodError) { const errorMessages = error.issues.map(e => `${e.path.join('.')}: ${e.message}`).join(', '); throw new McpError( ErrorCode.InvalidParams, `Invalid input for ${toolName}: ${errorMessages}` ); } throw new McpError( ErrorCode.InternalError, `Validation error for ${toolName}: ${(error as Error).message}` ); } } // Tool name to schema mapping export const VALIDATION_SCHEMAS = { 'analyze_codebase': AnalyzeCodebaseSchema, 'get_file_content': GetFileContentSchema, 'get_project_structure': GetProjectStructureSchema, 'search_codebase': SearchCodebaseSchema, 'generate_documentation': GenerateDocumentationSchema, 'learn_codebase_intelligence': LearnCodebaseIntelligenceSchema, 'get_semantic_insights': GetSemanticInsightsSchema, 'get_pattern_recommendations': GetPatternRecommendationsSchema, 'predict_coding_approach': PredictCodingApproachSchema, 'get_developer_profile': GetDeveloperProfileSchema, 'contribute_insights': ContributeInsightsSchema, 'auto_learn_if_needed': AutoLearnIfNeededSchema, 'get_learning_status': GetLearningStatusSchema, 'quick_setup': QuickSetupSchema, 'get_system_status': GetSystemStatusSchema, 'get_intelligence_metrics': GetIntelligenceMetricsSchema, 'get_performance_status': GetPerformanceStatusSchema } as const;

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/pi22by7/In-Memoria'

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