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
JavaScript
;
/**
* @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;