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
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Kit name to unload |
Implementation Reference
- magg/server/manager.py:536-568 (handler)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)}")
- magg/server/server.py:43-82 (registration)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()
- magg/kit.py:223-257 (helper)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)