Skip to main content
Glama
error-handler.tsβ€’2.43 kB
import { logger } from './logger'; export class MCPError extends Error { public code: string; public statusCode?: number; public data?: any; constructor(message: string, code: string, statusCode?: number, data?: any) { super(message); this.name = 'MCPError'; this.code = code; this.statusCode = statusCode; this.data = data; } } export class N8NConnectionError extends MCPError { constructor(message: string, data?: any) { super(message, 'N8N_CONNECTION_ERROR', 503, data); this.name = 'N8NConnectionError'; } } export class AuthenticationError extends MCPError { constructor(message: string = 'Authentication failed') { super(message, 'AUTH_ERROR', 401); this.name = 'AuthenticationError'; } } export class ValidationError extends MCPError { constructor(message: string, data?: any) { super(message, 'VALIDATION_ERROR', 400, data); this.name = 'ValidationError'; } } export class ToolNotFoundError extends MCPError { constructor(toolName: string) { super(`Tool '${toolName}' not found`, 'TOOL_NOT_FOUND', 404); this.name = 'ToolNotFoundError'; } } export class ResourceNotFoundError extends MCPError { constructor(resourceUri: string) { super(`Resource '${resourceUri}' not found`, 'RESOURCE_NOT_FOUND', 404); this.name = 'ResourceNotFoundError'; } } export function handleError(error: any): MCPError { if (error instanceof MCPError) { return error; } if (error.response) { // HTTP error from n8n API const status = error.response.status; const message = error.response.data?.message || error.message; if (status === 401) { return new AuthenticationError(message); } else if (status === 404) { return new MCPError(message, 'NOT_FOUND', 404); } else if (status >= 500) { return new N8NConnectionError(message); } return new MCPError(message, 'API_ERROR', status); } if (error.code === 'ECONNREFUSED') { return new N8NConnectionError('Cannot connect to n8n API'); } // Generic error return new MCPError( error.message || 'An unexpected error occurred', 'UNKNOWN_ERROR', 500 ); } export async function withErrorHandling<T>( operation: () => Promise<T>, context: string ): Promise<T> { try { return await operation(); } catch (error) { logger.error(`Error in ${context}:`, error); throw handleError(error); } }

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/czlonkowski/n8n-mcp'

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