Skip to main content
Glama

AiDD MCP Server

by skydeckai
system_tools.py7.4 kB
import json import platform import re import subprocess from typing import Any, Dict, List import mcp.types as types import psutil from .state import state def get_system_info_tool(): return { "name": "get_system_info", "description": "Get detailed system information about the host computer. " "WHEN TO USE: When you need to understand the system environment, diagnose performance issues, " "verify hardware specifications, check resource availability, or determine the operating environment " "for compatibility reasons. Useful for system analysis, troubleshooting, environment verification, " "and providing context-aware assistance. " "WHEN NOT TO USE: When you only need the current working directory (use get_allowed_directory instead), " "when specific file information is needed (use get_file_info instead), or when you need to interact " "with applications rather than system information (use get_active_apps instead). " "RETURNS: A JSON object containing comprehensive system details including: working directory path, " "OS details (name, version, architecture), Python version, WiFi network name, CPU information " "(cores, usage), memory statistics (total, available, usage percentage), disk information " "(total, free, usage percentage), and on macOS, additional hardware details (model, chip, serial number).", "inputSchema": { "type": "object", "properties": {}, "required": [], }, } def get_size(bytes: int, suffix: str = "B") -> str: """ Scale bytes to its proper format e.g: 1253656 => '1.20MB' 1253656678 => '1.17GB' """ factor = 1024 for unit in ["", "K", "M", "G", "T", "P"]: if bytes < factor: return f"{bytes:.2f}{unit}{suffix}" bytes /= factor def get_wifi_info() -> str: """Get current WiFi network name across different platforms.""" try: if platform.system() == "Darwin": # macOS cmd = ["system_profiler", "SPAirPortDataType"] process = subprocess.run(cmd, capture_output=True, text=True) if process.returncode == 0: for line in process.stdout.split('\n'): if "Current Network Information:" in line: next_line = next((line_text.strip() for line_text in process.stdout.split('\n')[process.stdout.split('\n').index(line)+1:] if line_text.strip()), "") return next_line.rstrip(':') elif platform.system() == "Linux": cmd = ["nmcli", "-t", "-f", "active,ssid", "dev", "wifi"] process = subprocess.run(cmd, capture_output=True, text=True) if process.returncode == 0: for line in process.stdout.split('\n'): if line.startswith('yes:'): return line.split(':')[1] elif platform.system() == "Windows": cmd = ["netsh", "wlan", "show", "interfaces"] process = subprocess.run(cmd, capture_output=True, text=True) if process.returncode == 0: for line in process.stdout.split('\n'): if "SSID" in line and "BSSID" not in line: return line.split(":")[1].strip() except Exception: pass # Silently handle any errors and return "Not available" return "Not available" def get_mac_details() -> Dict[str, str]: """Get Mac-specific system details.""" if platform.system() != "Darwin": return {} mac_info = {} try: # Get system_profiler output cmd = ["system_profiler", "SPHardwareDataType", "SPSoftwareDataType"] process = subprocess.run(cmd, capture_output=True, text=True) if process.returncode == 0: output = process.stdout # Extract model information model_match = re.search(r"Model Name: (.*?)\n", output) if model_match: mac_info["model"] = model_match.group(1).strip() # Extract chip information chip_match = re.search(r"Chip: (.*?)\n", output) if chip_match: mac_info["chip"] = chip_match.group(1).strip() # Extract serial number serial_match = re.search(r"Serial Number \(system\): (.*?)\n", output) if serial_match: mac_info["serial_number"] = serial_match.group(1).strip() except Exception: pass return mac_info def get_system_details() -> Dict[str, Any]: """Gather detailed system information.""" is_mac = platform.system() == "Darwin" disk_total = psutil.disk_usage('/').total disk_free = psutil.disk_usage('/').free disk_used_percentage = (disk_total - disk_free) / disk_total * 100 # System and OS Information system_info = { "working_directory": state.allowed_directory, "system": { "os": platform.system(), "os_version": platform.release(), "architecture": platform.machine(), "python_version": platform.python_version(), }, "wifi_network": get_wifi_info(), # CPU Information "cpu": { "physical_cores": psutil.cpu_count(logical=False), "logical_cores": psutil.cpu_count(logical=True), "total_cpu_usage": f"{psutil.cpu_percent()}%" }, # Memory Information "memory": { "total": get_size(psutil.virtual_memory().total), "available": get_size(psutil.virtual_memory().available), "used_percentage": f"{psutil.virtual_memory().percent}%" }, # Disk Information "disk": { "total": get_size(psutil.disk_usage('/').total), "free": get_size(psutil.disk_usage('/').free), "used_percentage": f"{disk_used_percentage}%" } } # Add Mac-specific information if on macOS if is_mac: mac_details = get_mac_details() system_info["mac_details"] = mac_details # Example output will be much cleaner now: # { # "working_directory": "/Users/user/projects/myproject", # "system": { # "os": "Darwin", # "os_version": "22.1.0", # "architecture": "arm64", # "python_version": "3.12.2", # "wifi_network": "MyWiFi" # }, # "cpu": { # "physical_cores": 8, # "logical_cores": 8, # "total_cpu_usage": "14.3%" # }, # "memory": { # "total": "16.00GB", # "available": "8.50GB", # "used_percentage": "46.9%" # }, # "disk": { # "total": "465.63GB", # "free": "208.42GB", # "used_percentage": "55.2%" # }, # "mac_details": { # Only present on macOS # "model": "Mac mini", # "chip": "Apple M2", # "serial_number": "XXXXXX" # } # } return system_info async def handle_get_system_info(arguments: dict) -> List[types.TextContent]: """Handle getting system information.""" system_info = get_system_details() return [types.TextContent(type="text", text=json.dumps(system_info, indent=2))]

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/skydeckai/mcp-server-aidd'

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