Skip to main content
Glama
mcp-error-factory.ts4.33 kB
/** * @fileoverview Factory functions for creating common MCP errors */ import { MCPError, MCPErrorCode, MCPErrorCategory, MCPErrorInfo } from './mcp-errors.js'; /** * Creates an authentication error */ export function createAuthenticationError( message = 'Authentication failed', details?: Record<string, unknown> ): MCPError { const errorInfo: MCPErrorInfo = { code: MCPErrorCode.AUTHENTICATION_ERROR, category: MCPErrorCategory.AUTHENTICATION_ERROR, message, retryable: false, userFriendly: true, }; if (details !== undefined) { errorInfo.details = details; } return new MCPError(errorInfo); } /** * Creates a resource not found error */ export function createResourceNotFoundError( resource: string, details?: Record<string, unknown> ): MCPError { const errorInfo: MCPErrorInfo = { code: MCPErrorCode.RESOURCE_NOT_FOUND, category: MCPErrorCategory.RESOURCE_ERROR, message: `Resource not found: ${resource}`, details: { resource, ...(details || {}) }, retryable: false, userFriendly: true, }; return new MCPError(errorInfo); } /** * Creates a validation error */ export function createValidationError( message: string, details?: Record<string, unknown> ): MCPError { const errorInfo: MCPErrorInfo = { code: MCPErrorCode.VALIDATION_ERROR, category: MCPErrorCategory.VALIDATION_ERROR, message: `Validation failed: ${message}`, retryable: false, userFriendly: true, }; if (details !== undefined) { errorInfo.details = details; } return new MCPError(errorInfo); } /** * Creates a server error */ export function createServerError( message = 'Internal server error', cause?: Error, details?: Record<string, unknown> ): MCPError { const errorInfo: MCPErrorInfo = { code: MCPErrorCode.INTERNAL_ERROR, category: MCPErrorCategory.SERVER_ERROR, message, retryable: true, userFriendly: false, }; if (cause !== undefined) { errorInfo.cause = cause; } if (details !== undefined) { errorInfo.details = details; } return new MCPError(errorInfo); } /** * Creates a timeout error */ export function createTimeoutError(operation: string, timeoutMs: number): MCPError { const errorInfo: MCPErrorInfo = { code: MCPErrorCode.TIMEOUT_ERROR, category: MCPErrorCategory.NETWORK_ERROR, message: `Operation timed out: ${operation}`, details: { operation, timeoutMs }, retryable: true, userFriendly: true, }; return new MCPError(errorInfo); } /** * Creates a rate limiting error */ export function createRateLimitedError(resetTime?: Date): MCPError { const errorInfo: MCPErrorInfo = { code: MCPErrorCode.RATE_LIMITED, category: MCPErrorCategory.CLIENT_ERROR, message: 'Rate limit exceeded', retryable: true, userFriendly: true, }; if (resetTime) { errorInfo.details = { resetTime: resetTime.toISOString() }; } return new MCPError(errorInfo); } /** * Creates a configuration error */ export function createConfigurationError( message: string, details?: Record<string, unknown> ): MCPError { const errorInfo: MCPErrorInfo = { code: MCPErrorCode.CONFIGURATION_ERROR, category: MCPErrorCategory.SERVER_ERROR, message: `Configuration error: ${message}`, retryable: false, userFriendly: false, }; if (details !== undefined) { errorInfo.details = details; } return new MCPError(errorInfo); } /** * Creates a dependency error */ export function createDependencyError(service: string, cause?: Error): MCPError { const errorInfo: MCPErrorInfo = { code: MCPErrorCode.DEPENDENCY_ERROR, category: MCPErrorCategory.SERVER_ERROR, message: `Dependency error: ${service} is unavailable`, details: { service }, retryable: true, userFriendly: false, }; if (cause !== undefined) { errorInfo.cause = cause; } return new MCPError(errorInfo); } // For backward compatibility, export a namespace-like object export const MCPErrorFactory = { authentication: createAuthenticationError, resourceNotFound: createResourceNotFoundError, validation: createValidationError, server: createServerError, timeout: createTimeoutError, rateLimited: createRateLimitedError, configuration: createConfigurationError, dependency: createDependencyError, };

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/sapientpants/deepsource-mcp-server'

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