UNPKG

mcp-quiz-server

Version:

🧠 AI-Powered Quiz Management via Model Context Protocol (MCP) - Create, manage, and take quizzes directly from VS Code, Claude, and other AI agents.

82 lines (81 loc) • 2.67 kB
"use strict"; /** * @fileoverview MCP Request Validator - Input Validation * @version 1.0.0 * @since 2025-08-03 * @module RequestValidator * @description Validates MCP requests for protocol compliance * @contributors Claude Code Agent * @requirements REQ_MCP_001 (JSON-RPC 2.0) * @testCoverage Unit tests for request validation */ Object.defineProperty(exports, "__esModule", { value: true }); exports.RequestValidator = void 0; const mcp_types_1 = require("../../types/mcp-types"); /** * Validator for MCP requests */ class RequestValidator { /** * Validate MCP request format */ static validate(request) { // Check JSON-RPC version if (!request.jsonrpc || request.jsonrpc !== '2.0') { return { code: mcp_types_1.MCPErrorCode.INVALID_REQUEST, message: 'Invalid JSON-RPC version. Must be "2.0"', }; } // Check method exists if (!request.method || typeof request.method !== 'string') { return { code: mcp_types_1.MCPErrorCode.INVALID_REQUEST, message: 'Missing or invalid method', }; } // Check id format if present if (request.id !== undefined && request.id !== null) { const idType = typeof request.id; if (idType !== 'string' && idType !== 'number') { return { code: mcp_types_1.MCPErrorCode.INVALID_REQUEST, message: 'Invalid request ID format', }; } } return null; // Valid request } /** * Validate request size limits */ static validateSize(request, maxSize) { const requestSize = JSON.stringify(request).length; if (requestSize > maxSize) { return { code: mcp_types_1.MCPErrorCode.INVALID_REQUEST, message: `Request size exceeds limit: ${requestSize} > ${maxSize}`, }; } return null; } /** * Validate tool call parameters */ static validateToolCall(params) { if (!params || typeof params !== 'object') { return { code: mcp_types_1.MCPErrorCode.INVALID_PARAMS, message: 'Tool call parameters must be an object', }; } if (!params.name || typeof params.name !== 'string') { return { code: mcp_types_1.MCPErrorCode.INVALID_PARAMS, message: 'Tool name is required and must be a string', }; } return null; } } exports.RequestValidator = RequestValidator;