Skip to main content
Glama

OpenEdu MCP Server

exceptions.pyโ€ข4.69 kB
""" Custom exception classes for OpenEdu MCP Server. This module defines all custom exceptions used throughout the application for proper error handling and user feedback. """ from typing import Optional class OpenEduMCPError(Exception): """Base exception for OpenEdu MCP Server.""" def __init__(self, message: str, details: Optional[str] = None): super().__init__(message) self.message = message self.details = details def __str__(self) -> str: if self.details: return f"{self.message}: {self.details}" return self.message class ToolError(OpenEduMCPError): """Error in tool execution.""" def __init__(self, message: str, tool_name: str, details: Optional[str] = None): super().__init__(message, details) self.tool_name = tool_name class APIError(OpenEduMCPError): """Error in external API communication.""" def __init__( self, message: str, api_name: str, status_code: Optional[int] = None, details: Optional[str] = None ): super().__init__(message, details) self.api_name = api_name self.status_code = status_code def __str__(self) -> str: base_msg = f"API Error ({self.api_name}): {self.message}" if self.status_code: base_msg += f" (Status: {self.status_code})" if self.details: base_msg += f" - {self.details}" return base_msg class CacheError(OpenEduMCPError): """Error in cache operations.""" def __init__(self, message: str, operation: Optional[str] = None, details: Optional[str] = None): super().__init__(message, details) self.operation = operation def __str__(self) -> str: base_msg = f"Cache Error: {self.message}" if self.operation: base_msg += f" (Operation: {self.operation})" if self.details: base_msg += f" - {self.details}" return base_msg class RateLimitError(OpenEduMCPError): """Rate limit exceeded.""" def __init__( self, message: str, api_name: str, retry_after: Optional[int] = None, details: Optional[str] = None ): super().__init__(message, details) self.api_name = api_name self.retry_after = retry_after def __str__(self) -> str: base_msg = f"Rate Limit Error ({self.api_name}): {self.message}" if self.retry_after: base_msg += f" (Retry after: {self.retry_after}s)" if self.details: base_msg += f" - {self.details}" return base_msg class ValidationError(OpenEduMCPError): """Input validation error.""" def __init__(self, message: str, field: Optional[str] = None, details: Optional[str] = None): super().__init__(message, details) self.field = field def __str__(self) -> str: base_msg = f"Validation Error: {self.message}" if self.field: base_msg += f" (Field: {self.field})" if self.details: base_msg += f" - {self.details}" return base_msg class ConfigurationError(OpenEduMCPError): """Configuration error.""" def __init__(self, message: str, config_key: Optional[str] = None, details: Optional[str] = None): super().__init__(message, details) self.config_key = config_key def __str__(self) -> str: base_msg = f"Configuration Error: {self.message}" if self.config_key: base_msg += f" (Key: {self.config_key})" if self.details: base_msg += f" - {self.details}" return base_msg class DatabaseError(OpenEduMCPError): """Database operation error.""" def __init__(self, message: str, operation: Optional[str] = None, details: Optional[str] = None): super().__init__(message, details) self.operation = operation def __str__(self) -> str: base_msg = f"Database Error: {self.message}" if self.operation: base_msg += f" (Operation: {self.operation})" if self.details: base_msg += f" - {self.details}" return base_msg class NetworkError(OpenEduMCPError): """Network communication error.""" def __init__(self, message: str, url: Optional[str] = None, details: Optional[str] = None): super().__init__(message, details) self.url = url def __str__(self) -> str: base_msg = f"Network Error: {self.message}" if self.url: base_msg += f" (URL: {self.url})" if self.details: base_msg += f" - {self.details}" return base_msg

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/Cicatriiz/openedu-mcp'

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