get_cpu_info_tool
Retrieve CPU usage and core-specific details for system diagnostics and performance monitoring. Specify measurement intervals and enable per-CPU breakdowns as needed.
Instructions
Retrieve CPU usage and information.
Args: interval: Measurement interval in seconds (default: 1.0) per_cpu: Include per-CPU core breakdown (default: false)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| interval | No | ||
| per_cpu | No |
Implementation Reference
- src/system_info_mcp/server.py:35-44 (handler)The get_cpu_info_tool handler function, decorated with @app.tool() for registration in FastMCP. It defines the tool interface and delegates to the core implementation.@app.tool() def get_cpu_info_tool(interval: float = 1.0, per_cpu: bool = False) -> Dict[str, Any]: """Retrieve CPU usage and information. Args: interval: Measurement interval in seconds (default: 1.0) per_cpu: Include per-CPU core breakdown (default: false) """ return get_cpu_info(interval=interval, per_cpu=per_cpu)
- src/system_info_mcp/tools.py:22-78 (helper)Core helper function implementing the CPU information logic using psutil, including CPU usage, counts, frequency, load average, with caching decorator.@cache_result("cpu_info", ttl=2) def get_cpu_info(interval: float = 1.0, per_cpu: bool = False) -> Dict[str, Any]: """Retrieve CPU usage and information.""" try: # Validate parameters if interval <= 0: raise ValueError("Interval must be a positive number") # Get CPU percentage (this call blocks for the interval) cpu_percent = psutil.cpu_percent(interval=interval) # Get per-CPU percentages if requested per_cpu_percent = None if per_cpu: per_cpu_percent = psutil.cpu_percent(interval=0, percpu=True) # Get CPU counts cpu_count_logical = psutil.cpu_count(logical=True) or 0 cpu_count_physical = psutil.cpu_count(logical=False) or 0 # Get CPU frequency try: cpu_freq = psutil.cpu_freq() cpu_freq_current = safe_float(cpu_freq.current if cpu_freq else 0) cpu_freq_max = safe_float(cpu_freq.max if cpu_freq else 0) except (AttributeError, OSError): cpu_freq_current = 0.0 cpu_freq_max = 0.0 # Get load average (Unix-like systems only) try: if hasattr(os, 'getloadavg'): load_avg = os.getloadavg() load_average = [round(avg, 2) for avg in load_avg] else: load_average = [0.0, 0.0, 0.0] except (AttributeError, OSError): load_average = [0.0, 0.0, 0.0] result = { "cpu_percent": round(cpu_percent, 1), "cpu_count_logical": cpu_count_logical, "cpu_count_physical": cpu_count_physical, "cpu_freq_current": cpu_freq_current, "cpu_freq_max": cpu_freq_max, "load_average": load_average, } if per_cpu_percent is not None: result["per_cpu_percent"] = [round(p, 1) for p in per_cpu_percent] return result except Exception as e: logger.error(f"Error getting CPU info: {e}") raise
- src/system_info_mcp/server.py:35-35 (registration)The @app.tool() decorator registers get_cpu_info_tool with the FastMCP server.@app.tool()
- src/system_info_mcp/server.py:37-42 (schema)Docstring providing the tool schema with parameter descriptions for input validation."""Retrieve CPU usage and information. Args: interval: Measurement interval in seconds (default: 1.0) per_cpu: Include per-CPU core breakdown (default: false) """