Skip to main content
Glama

Mode Manager MCP

server_registry.py3.6 kB
""" Singleton server registry for Mode Manager MCP. This module provides a singleton pattern for the ModeManagerServer, allowing tool registration from multiple files while maintaining a single server instance. """ from typing import Optional from fastmcp import FastMCP from .chatmode_manager import ChatModeManager from .instruction_manager import InstructionManager from .library_manager import LibraryManager class ServerRegistry: """Singleton registry for the MCP server and its components.""" _instance: Optional["ServerRegistry"] = None _initialized: bool = False def __new__(cls) -> "ServerRegistry": """Create or return the singleton instance.""" if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance def __init__(self) -> None: """Initialize the server registry (only once).""" if not ServerRegistry._initialized: self._app: Optional[FastMCP] = None self._chatmode_manager: Optional[ChatModeManager] = None self._instruction_manager: Optional[InstructionManager] = None self._library_manager: Optional[LibraryManager] = None self._read_only: bool = False ServerRegistry._initialized = True def initialize( self, app: FastMCP, chatmode_manager: ChatModeManager, instruction_manager: InstructionManager, library_manager: LibraryManager, read_only: bool = False, ) -> None: """Initialize the registry with server components.""" self._app = app self._chatmode_manager = chatmode_manager self._instruction_manager = instruction_manager self._library_manager = library_manager self._read_only = read_only @property def app(self) -> FastMCP: """Get the FastMCP app instance.""" if self._app is None: raise RuntimeError("ServerRegistry not initialized. Call initialize() first.") return self._app @property def chatmode_manager(self) -> ChatModeManager: """Get the ChatModeManager instance.""" if self._chatmode_manager is None: raise RuntimeError("ServerRegistry not initialized. Call initialize() first.") return self._chatmode_manager @property def instruction_manager(self) -> InstructionManager: """Get the InstructionManager instance.""" if self._instruction_manager is None: raise RuntimeError("ServerRegistry not initialized. Call initialize() first.") return self._instruction_manager @property def library_manager(self) -> LibraryManager: """Get the LibraryManager instance.""" if self._library_manager is None: raise RuntimeError("ServerRegistry not initialized. Call initialize() first.") return self._library_manager @property def read_only(self) -> bool: """Get the read-only mode status.""" return self._read_only @classmethod def get_instance(cls) -> "ServerRegistry": """Get the singleton instance.""" if cls._instance is None: cls._instance = cls() return cls._instance @classmethod def reset(cls) -> None: """Reset the singleton instance (primarily for testing).""" cls._instance = None cls._initialized = False # Convenience function to get the registry instance def get_server_registry() -> ServerRegistry: """Get the singleton server registry instance.""" return ServerRegistry.get_instance()

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/NiclasOlofsson/mode-manager-mcp'

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