#!/usr/bin/env python3
"""
AAP Controller Configuration & System Management Tool
"""
from typing import Any, Dict, Optional, Union
from fastmcp import FastMCP
from pydantic import Field
from connectors.aap_connector import get_aap_connector
def register_configuration_tools(mcp: FastMCP):
"""Register configuration management tools with the MCP server"""
@mcp.tool()
def configuration_system_management(
action: str = Field(description="Action: get_settings, update_settings, list_settings_categories, get_system_config, list_instance_groups, create_instance_group, update_instance_group, get_license_info"),
setting_category: Optional[str] = Field(None, description="Setting category (authentication, system, etc.)"),
instance_group_id: Optional[Union[int, float]] = Field(None, description="Instance group ID"),
setting_data: Optional[Dict[str, Any]] = Field(None, description="Settings data"),
instance_group_data: Optional[Dict[str, Any]] = Field(None, description="Instance group data"),
filters: Optional[Dict[str, Any]] = Field(None, description="Filters for listing")
) -> Dict[str, Any]:
"""
Configuration and system management tool.
Handles system settings, instance groups, and license information.
"""
try:
# Settings Operations
if action == "get_settings":
if setting_category:
return get_aap_connector().get(f"settings/{setting_category}/")
else:
return get_aap_connector().get("settings/all/")
elif action == "update_settings":
if not setting_category or not setting_data:
return {"error": "setting_category and setting_data are required"}
return get_aap_connector().patch(f"settings/{setting_category}/", setting_data)
elif action == "list_settings_categories":
return get_aap_connector().get("settings/")
elif action == "get_system_config":
return get_aap_connector().get("config/")
# Instance Group Operations
elif action == "list_instance_groups":
params = filters or {}
return get_aap_connector().get("instance_groups/", params)
elif action == "create_instance_group":
if not instance_group_data:
return {"error": "instance_group_data is required"}
return get_aap_connector().post("instance_groups/", instance_group_data)
elif action == "update_instance_group":
if not instance_group_id or not instance_group_data:
return {"error": "instance_group_id and instance_group_data are required"}
return get_aap_connector().patch(f"instance_groups/{instance_group_id}/", instance_group_data)
# License Operations
elif action == "get_license_info":
config = get_aap_connector().get("config/")
return {
"license_info": config.get("license_info", {}),
"license_type": config.get("license_type"),
"license_date": config.get("license_date"),
"subscription_name": config.get("subscription_name")
}
else:
return {"error": f"Unknown action: {action}"}
except Exception as e:
return {"error": f"Configuration/System management failed: {str(e)}"}