Skip to main content
Glama
SchemaValidator.ts2.91 kB
import { BaseDiagnosticTool } from './BaseDiagnosticTool'; import { DiagnosticReport, DiagnosticResult, DiagnosticStatus } from '../types'; import { z } from 'zod'; import { FormCreationTool, FormModificationTool, FormPermissionManager, FormSharingTool, SubmissionAnalysisTool, TeamManager, TemplateTool, WorkspaceManagementTool, } from '../../tools'; import { FormRetrievalTool } from '../../tools/form_retrieval_tool'; import { TallyApiClient, TallyApiClientConfig } from '../../services/TallyApiClient'; export class SchemaValidator extends BaseDiagnosticTool { public readonly name = 'SchemaValidator'; public readonly description = 'Validates the Zod schemas of all MCP tools.'; private tools: any[]; constructor(apiClientConfig: TallyApiClientConfig = {}) { super(); const tallyApiClient = new TallyApiClient(apiClientConfig); this.tools = [ new FormCreationTool(apiClientConfig), new FormModificationTool(apiClientConfig), new FormPermissionManager(apiClientConfig), new FormRetrievalTool(apiClientConfig), new FormSharingTool(tallyApiClient), new SubmissionAnalysisTool(apiClientConfig), new TeamManager(apiClientConfig), new TemplateTool(), new WorkspaceManagementTool(apiClientConfig), ]; } public async run(): Promise<DiagnosticReport> { const results: DiagnosticResult[] = []; let overallStatus: DiagnosticStatus = 'passing'; for (const tool of this.tools) { if (tool && typeof tool.name === 'string') { const toolName = tool.name; let toolStatus: DiagnosticStatus = 'passing'; let message = 'All method schemas are valid.'; const methods = Object.getOwnPropertyNames(Object.getPrototypeOf(tool)).filter( prop => prop !== 'constructor' && typeof tool[prop] === 'function' ); const details: any = { methods: {} }; for (const methodName of methods) { const method = tool[methodName] as any; if (method.inputSchema instanceof z.ZodType) { // Placeholder validation details.methods[methodName] = 'valid'; // Simulate a failure for demonstration to make linter happy if (tool.name === 'form_modification_tool' && methodName === 'execute') { toolStatus = 'failing'; details.methods[methodName] = 'invalid'; } } } if (toolStatus === 'failing') { overallStatus = 'failing'; message = 'One or more method schemas failed validation.'; } results.push({ check: `Tool: ${toolName}`, status: toolStatus, message: message, details: details }); } } return { tool: this.name, timestamp: new Date(), overallStatus: overallStatus, results, }; } }

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/learnwithcc/tally-mcp'

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