Skip to main content
Glama

magg_unload_kit

Remove a specific kit and its associated servers from the MAGG MCP server configuration to streamline tool management and system performance.

Instructions

Unload a kit and optionally its servers from the configuration.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesKit name to unload

Implementation Reference

  • Handler for unload_kit tool: orchestrates unloading by modifying config, saving, and unmounting exclusive servers.
    async def unload_kit(
            self,
            name: Annotated[str, Field(description="Kit name to unload")],
    ) -> MaggResponse:
        """Unload a kit and optionally its servers from the configuration."""
        try:
            config = self.config
    
            servers_before = set(config.servers.keys())
    
            success, message = self.kit_manager.unload_kit_from_config(name, config)
    
            if success:
                if not self.save_config(config):
                    return MaggResponse.error("Failed to save configuration")
                servers_after = set(config.servers.keys())
                removed_servers = servers_before - servers_after
    
                for server_name in removed_servers:
                    if server_name in self.server_manager.mounted_servers:
                        await self.server_manager.unmount_server(server_name)
    
                return MaggResponse.success({
                    "action": "kit_unloaded",
                    "kit": name,
                    "message": message
                })
            else:
                return MaggResponse.error(message)
    
        except Exception as e:
            return MaggResponse.error(f"Failed to unload kit: {str(e)}")
  • Registration of magg_unload_kit tool in MaggServer._register_tools, mapping self.unload_kit to the tool name using self_prefix_.
    def _register_tools(self):
        """Register all Magg management tools programmatically.
        """
        self_prefix_ = self.self_prefix_
    
        tools = [
            (self.add_server, f"{self_prefix_}add_server", None),
            (self.remove_server, f"{self_prefix_}remove_server", None),
            (self.list_servers, f"{self_prefix_}list_servers", None),
            (self.enable_server, f"{self_prefix_}enable_server", None),
            (self.disable_server, f"{self_prefix_}disable_server", None),
            (self.search_servers, f"{self_prefix_}search_servers", None),
            (self.smart_configure, f"{self_prefix_}smart_configure", None),
            (self.analyze_servers, f"{self_prefix_}analyze_servers", None),
            (self.status, f"{self_prefix_}status", None),
            (self.check, f"{self_prefix_}check", None),
            (self.reload_config_tool, f"{self_prefix_}reload_config", None),
            (self.load_kit, f"{self_prefix_}load_kit", None),
            (self.unload_kit, f"{self_prefix_}unload_kit", None),
            (self.list_kits, f"{self_prefix_}list_kits", None),
            (self.kit_info, f"{self_prefix_}kit_info", None),
        ]
    
        def call_tool_wrapper(func):
            @wraps(func)
            async def wrapper(*args, **kwds):
                result = await func(*args, **kwds)
    
                if isinstance(result, MaggResponse):
                    return result.as_json_text_content
    
                return result
    
            return wrapper
    
        for method, tool_name, options in tools:
            self.mcp.tool(name=tool_name, **(options or {}))(call_tool_wrapper(method))
    
        self._register_resources()
        self._register_prompts()
  • KitManager.unload_kit_from_config: core logic to remove kit from config, remove/update servers exclusively from this kit.
    def unload_kit_from_config(self, kit_name: str, config: 'MaggConfig') -> tuple[bool, str]:
        """Unload a kit and optionally its servers from the configuration.
    
        Returns:
            Tuple of (success, message)
        """
        if kit_name not in config.kits:
            return False, f"Kit '{kit_name}' is not loaded"
    
        servers_to_remove = []
        servers_to_update = []
    
        for server_name, server_config in config.servers.items():
            if kit_name in server_config.kits:
                if len(server_config.kits) == 1:
                    servers_to_remove.append(server_name)
                else:
                    servers_to_update.append(server_name)
    
        for server_name in servers_to_update:
            config.servers[server_name].kits.remove(kit_name)
    
        for server_name in servers_to_remove:
            del config.servers[server_name]
    
        del config.kits[kit_name]
        self.remove_kit(kit_name)
    
        msg_parts = [f"Kit '{kit_name}' unloaded successfully"]
        if servers_to_remove:
            msg_parts.append(f"Removed servers: {', '.join(servers_to_remove)}")
        if servers_to_update:
            msg_parts.append(f"Updated servers: {', '.join(servers_to_update)}")
        return True, ". ".join(msg_parts)

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/sitbon/magg'

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