Windows-top-processes-by-cpu
Retrieves the top processes by CPU usage on Windows, enabling identification of high-resource applications and performance analysis.
Instructions
Get the top X processes by CPU usage.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| amount | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- main.py:238-271 (registration)Registration of the tool 'Windows-top-processes-by-cpu' via @mcp.tool decorator
@mcp.tool( name="Windows-top-processes-by-cpu", description="Get the top X processes by CPU usage." ) def get_top_processes_by_cpu(amount: int = 5) -> list[ProcessInfo]: """Get the top X processes by CPU usage. Uses sampling for accurate percentages and returns structured results.""" import psutil import time # Prime CPU percentage counters tracked = [] for p in psutil.process_iter(['pid', 'name']): try: p.cpu_percent(None) tracked.append(p) except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): continue # Short sampling interval time.sleep(0.3) results: list[ProcessInfo] = [] for p in tracked: try: cpu = p.cpu_percent(None) rss = p.memory_info().rss mem_mb = rss / (1024 ** 2) name = p.info.get('name') if hasattr(p, 'info') and p.info.get('name') else p.name() results.append(ProcessInfo(pid=p.pid, name=name, cpu_percent=cpu, memoryMB=mem_mb)) except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): continue results.sort(key=lambda x: x.cpu_percent or 0.0, reverse=True) return results[:amount] - main.py:242-271 (handler)Handler function get_top_processes_by_cpu that samples CPU usage over a short interval (0.3s sleep) and returns top processes by CPU percent.
def get_top_processes_by_cpu(amount: int = 5) -> list[ProcessInfo]: """Get the top X processes by CPU usage. Uses sampling for accurate percentages and returns structured results.""" import psutil import time # Prime CPU percentage counters tracked = [] for p in psutil.process_iter(['pid', 'name']): try: p.cpu_percent(None) tracked.append(p) except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): continue # Short sampling interval time.sleep(0.3) results: list[ProcessInfo] = [] for p in tracked: try: cpu = p.cpu_percent(None) rss = p.memory_info().rss mem_mb = rss / (1024 ** 2) name = p.info.get('name') if hasattr(p, 'info') and p.info.get('name') else p.name() results.append(ProcessInfo(pid=p.pid, name=name, cpu_percent=cpu, memoryMB=mem_mb)) except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): continue results.sort(key=lambda x: x.cpu_percent or 0.0, reverse=True) return results[:amount] - main.py:19-24 (schema)ProcessInfo schema/model used as the return type of the tool
class ProcessInfo(BaseModel): """Model for process information returned by top-processes tools.""" pid: int = Field(description="Process ID") name: str = Field(description="Process name") cpu_percent: float | None = Field(default=None, description="CPU usage percentage sampled over a short interval") memoryMB: float | None = Field(default=None, description="Resident memory usage in MB")