"""
Advanced Tools Handlers for MCP Server
Contains handler functions for advanced tools
"""
def handle_advanced_tools(name, arguments):
"""
Handle execution of advanced tools
Args:
name: Tool name
arguments: Tool arguments
Returns:
dict: Tool execution result
"""
from tools.configure_advanced import (
configure_static_route, show_routing_table, configure_nat_overload,
show_nat_translations, backup_config, compare_configs, save_config,
get_interface_stats, get_logs
)
from tools.troubleshooting import (
test_internet_connectivity, traceroute, ping_sweep,
diagnose_connectivity, test_end_to_end_connectivity
)
# Routing tools
if name == "configure_static_route":
device_name = arguments.get("device_name")
dest_network = arguments.get("destination_network")
subnet_mask = arguments.get("subnet_mask")
next_hop = arguments.get("next_hop_ip")
description = arguments.get("description")
if not all([device_name, dest_network, subnet_mask, next_hop]):
return {"success": False, "error": "Missing required parameters"}
return configure_static_route(device_name, dest_network, subnet_mask, next_hop, description)
elif name == "show_routing_table":
device_name = arguments.get("device_name")
protocol = arguments.get("protocol")
if not device_name:
return {"success": False, "error": "device_name is required"}
return show_routing_table(device_name, protocol)
# NAT tools
elif name == "configure_nat_overload":
device_name = arguments.get("device_name")
outside_if = arguments.get("outside_interface")
inside_net = arguments.get("inside_network")
inside_mask = arguments.get("inside_mask")
if not all([device_name, outside_if, inside_net, inside_mask]):
return {"success": False, "error": "Missing required parameters"}
return configure_nat_overload(device_name, outside_if, inside_net, inside_mask)
elif name == "show_nat_translations":
device_name = arguments.get("device_name")
if not device_name:
return {"success": False, "error": "device_name is required"}
return show_nat_translations(device_name)
# Backup tools
elif name == "backup_config":
device_name = arguments.get("device_name")
backup_dir = arguments.get("backup_dir", "backups")
if not device_name:
return {"success": False, "error": "device_name is required"}
return backup_config(device_name, backup_dir)
elif name == "compare_configs":
device_name = arguments.get("device_name")
if not device_name:
return {"success": False, "error": "device_name is required"}
return compare_configs(device_name)
elif name == "save_config":
device_name = arguments.get("device_name")
if not device_name:
return {"success": False, "error": "device_name is required"}
return save_config(device_name)
# Monitoring tools
elif name == "get_interface_stats":
device_name = arguments.get("device_name")
interface_name = arguments.get("interface_name")
if not device_name:
return {"success": False, "error": "device_name is required"}
return get_interface_stats(device_name, interface_name)
elif name == "get_logs":
device_name = arguments.get("device_name")
lines = arguments.get("lines", 50)
if not device_name:
return {"success": False, "error": "device_name is required"}
return get_logs(device_name, lines)
# Troubleshooting tools
elif name == "test_internet_connectivity":
device_name = arguments.get("device_name")
target = arguments.get("target", "8.8.8.8")
count = arguments.get("count", 5)
if not device_name:
return {"success": False, "error": "device_name is required"}
return test_internet_connectivity(device_name, target, count)
elif name == "traceroute":
device_name = arguments.get("device_name")
target = arguments.get("target")
if not all([device_name, target]):
return {"success": False, "error": "Missing required parameters"}
return traceroute(device_name, target)
elif name == "ping_sweep":
device_name = arguments.get("device_name")
network = arguments.get("network")
start_ip = arguments.get("start_ip")
end_ip = arguments.get("end_ip")
if not all([device_name, network, start_ip is not None, end_ip is not None]):
return {"success": False, "error": "Missing required parameters"}
return ping_sweep(device_name, network, start_ip, end_ip)
elif name == "diagnose_connectivity":
device_name = arguments.get("device_name")
target_ip = arguments.get("target_ip")
if not all([device_name, target_ip]):
return {"success": False, "error": "Missing required parameters"}
return diagnose_connectivity(device_name, target_ip)
elif name == "test_end_to_end_connectivity":
source = arguments.get("source_device")
destination = arguments.get("destination_device")
if not all([source, destination]):
return {"success": False, "error": "Missing required parameters"}
return test_end_to_end_connectivity(source, destination)
# Unknown tool
return None