MCP server providing cross-platform OS information, system metrics, process management, and hardware diagnostics for Windows, macOS, and Linux systems.
This OS information helper has 15 tools covering system monitoring. All tools are READ_ONLY and have basic descriptions. However, there are systematic gaps in parameter descriptions, missing output schemas, and inconsistent definition quality. Tool names follow verb_noun convention reasonably well (get_*, list_*, initialize_*, monitor_*, find_*), but many parameter descriptions are minimal or absent. The codebase shows schema validation for some parameters (e.g., limit constraints in get_running_processes), but output schemas are not explicitly documented anywhere. Error handling is present but generic. Most tools would benefit from richer parameter descriptions, explicit output schema documentation, and more detailed guidance on when to use each tool versus alternatives.
Search for processes by name or pattern across all running processes.
Get list of active network connections with remote hosts and their states.
Get battery status, power consumption, and estimated time remaining (for laptops).
Get detailed CPU information including cores, frequency, temperature, and load average.
Get detailed disk usage information for all mounted drives/partitions. Shows total, used, and available space.
Get detailed memory information including RAM and swap memory usage.
Get comprehensive network information including active connections, listening ports, interface details, and traffic statistics.
Output schemas not documented. 10 of 15 tools lack any visible output schema documentation (get_system_resource_usage, get_disk_usage, get_battery_info, get_system_boot_info, get_cpu_info, get_memory_info, get_os_info, list_open_ports, get_network_info, and others). LLMs cannot plan downstream operations or extract necessary fields without knowing what fields the response contains.
Parameter descriptions are minimal or missing context. Many parameters (e.g., limit in monitor_system_health's check_interval, duration_seconds) lack actionable constraints or guidance. 'How long to monitor (default: 10 seconds)' is incomplete, what is the maximum? What happens if the user specifies 0 or a negative value?
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 47 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 29 | - | v1 |
Get comprehensive operating system information including system name, version, architecture, and hostname.
Get detailed information about a specific process including memory, CPU, file handles, and open connections.
Get information about all running processes on the machine. Works across Windows, macOS, Linux, and other Unix systems.
Get system boot time, uptime, and time zone information.
Get comprehensive system resource usage statistics including CPU, memory, disk, and network information. Includes visual indicators and trend analysis.
Initialize and detect the operating system. This should be called first to establish OS-specific configurations. Works on Windows, macOS, Linux, and other Unix-like systems.
List all listening ports and their associated processes on the system.
Continuously monitor system health and provide alerts for critical conditions (high CPU/memory, low disk space).
No differentiation between similar tools. get_os_info, initialize_os_connection, and get_system_boot_info all appear to return OS-level information. Descriptions do not clearly state which tool to call for what specific data, risking redundant calls and LLM confusion.
Missing pagination/limit guidance on list tools. list_open_ports and get_active_connections may return hundreds or thousands of results, but there is no limit parameter, pagination token, or note in the description about result cardinality. This risks context window exhaustion.
Generic error handling. The code returns string-based error messages (e.g., 'Error initializing OS connection: {str(e)}') without categorizing errors as retryable, user-fixable, or fatal. LLMs lack guidance on recovery steps.
Inconsistent naming within tool family. Tools are named get_*, list_*, find_* without clear distinction. What is the difference between list_open_ports and get_active_connections? Between find_process and get_running_processes? Descriptions should clarify or names should be aligned.
No validation guidance in parameter descriptions. For get_running_processes, the limit parameter is constrained (1 - 50) in code, but the description does not explicitly state the minimum/maximum. LLMs rely on descriptions, not code inspection.