diff --git a/mcpgateway/services/plugin_service.py b/mcpgateway/services/plugin_service.py index 84c051d87..1bec464f6 100644 --- a/mcpgateway/services/plugin_service.py +++ b/mcpgateway/services/plugin_service.py @@ -50,7 +50,7 @@ def set_plugin_manager(self, manager: PluginManager) -> None: self._plugin_manager = manager def get_all_plugins(self) -> List[Dict[str, Any]]: - """Get all registered plugins with their configuration. + """Get all registered plugins with their configuration, including disabled plugins. Returns: List of plugin dictionaries containing configuration and status. @@ -60,7 +60,10 @@ def get_all_plugins(self) -> List[Dict[str, Any]]: plugins = [] registry = self._plugin_manager._registry # pylint: disable=protected-access + config = self._plugin_manager._config # pylint: disable=protected-access + # First, add all registered (enabled) plugins from the registry + registered_names = set() for plugin_ref in registry.get_all_plugins(): # Get the plugin config from the plugin reference plugin_config = plugin_ref.plugin.config if hasattr(plugin_ref, "plugin") else plugin_ref._plugin.config if hasattr(plugin_ref, "_plugin") else None # pylint: disable=protected-access @@ -87,6 +90,33 @@ def get_all_plugins(self) -> List[Dict[str, Any]]: plugin_dict["config_summary"] = {} plugins.append(plugin_dict) + registered_names.add(plugin_ref.name) + + # Then, add disabled plugins from the configuration (not in registry) + if config and config.plugins: + for plugin_config in config.plugins: + if plugin_config.mode == PluginMode.DISABLED and plugin_config.name not in registered_names: + plugin_dict = { + "name": plugin_config.name, + "description": plugin_config.description or "", + "author": plugin_config.author or "Unknown", + "version": plugin_config.version or "0.0.0", + "mode": plugin_config.mode.value, + "priority": plugin_config.priority or 100, + "hooks": [hook.value for hook in plugin_config.hooks] if plugin_config.hooks else [], + "tags": plugin_config.tags or [], + "kind": plugin_config.kind or "", + "namespace": plugin_config.namespace or "", + "status": "disabled", + "config_summary": {}, + } + + # Add config summary (first few keys only for list view) + if hasattr(plugin_config, "config") and plugin_config.config: + config_keys = list(plugin_config.config.keys())[:5] + plugin_dict["config_summary"] = {k: plugin_config.config[k] for k in config_keys} + + plugins.append(plugin_dict) return sorted(plugins, key=lambda x: x["priority"])