Skip to main content
Glama
base_service.py2.91 kB
""" Base service class for MaverickMCP API services. Provides common functionality and dependency injection patterns for all service classes. """ from abc import ABC, abstractmethod from typing import Any from fastmcp import FastMCP from sqlalchemy.ext.asyncio import AsyncSession # Auth imports removed in personal use version # from maverick_mcp.auth.jwt_enhanced import EnhancedJWTManager # from maverick_mcp.auth.key_manager_jwt import KeyManager from maverick_mcp.config.settings import settings from maverick_mcp.utils.logging import get_logger class BaseService(ABC): """ Base service class providing common functionality for all services. This class implements dependency injection patterns and provides shared utilities that all services need. """ def __init__( self, mcp: FastMCP, db_session_factory: Any = None, ): """ Initialize base service with dependencies. Args: mcp: FastMCP instance for tool/resource registration db_session_factory: Optional async database session factory """ self.mcp = mcp self.db_session_factory = db_session_factory self.logger = get_logger( f"maverick_mcp.services.{self.__class__.__name__.lower()}" ) @property def settings(self): """Get application settings.""" return settings async def get_db_session(self) -> AsyncSession: """ Get async database session. Returns: AsyncSession instance Raises: RuntimeError: If database session factory not available """ if not self.db_session_factory: raise RuntimeError("Database session factory not configured") return self.db_session_factory() def is_auth_enabled(self) -> bool: """Check if authentication is enabled.""" return False # Auth disabled in personal use version def is_debug_mode(self) -> bool: """Check if debug mode is enabled.""" return settings.api.debug def log_tool_usage(self, tool_name: str, user_id: int | None = None, **kwargs): """ Log tool usage for monitoring purposes. Args: tool_name: Name of the tool being used user_id: Optional user ID if authenticated **kwargs: Additional context for logging """ context = { "tool_name": tool_name, "user_id": user_id, "auth_enabled": self.is_auth_enabled(), **kwargs, } self.logger.info(f"Tool usage: {tool_name}", extra=context) @abstractmethod def register_tools(self): """ Register service tools with the MCP instance. This method should be implemented by subclasses to register their specific tools and resources. """ pass

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/wshobson/maverick-mcp'

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