Skip to main content
Glama
batteryshark

System Information MCP Server

by batteryshark
README.md
# System Information MCP Server

A modular FastMCP server providing focused system diagnostic tools for efficient troubleshooting and environment analysis. Each tool targets specific system aspects for optimal performance and clarity.

## šŸš€ Features

### šŸ“Š Modular Tool Design
- **10 specialized tools** for targeted diagnostics
- **Efficient data collection** with minimal overhead
- **Raw text output** for optimal performance
- **Cross-platform compatibility** (macOS, Linux, Windows)

### šŸ”§ Available Tools

| Tool | Purpose | Key Information |
|------|---------|----------------|
| `get_system_summary` | Quick system overview | Hostname, OS, CPU, RAM, uptime |
| `get_hardware_details` | Comprehensive hardware specs | CPU cores, memory, GPU detection |
| `get_display_info` | Display/monitor analysis | Resolution, refresh rate, HDR status |
| `get_network_status` | Network diagnostics | Interfaces, IPs, DNS, VPN detection |
| `get_storage_analysis` | Storage overview | Disk usage, partitions, filesystem types |
| `get_connected_devices` | Peripheral inventory | USB and Bluetooth devices |
| `get_user_environment` | Session context | User info, timezone, locale settings |
| `get_running_processes` | Process analysis | Top processes by CPU/memory usage |
| `get_open_ports` | Network security | Listening ports and services |
| `get_full_system_report` | Complete analysis | All diagnostics in one comprehensive report |

## Installation

```bash
# Clone and setup
git clone <repository>
cd mcp-sysinfo

# Install dependencies
uv add fastmcp psutil requests

# Test the server
uv run python main.py
```

## Usage

### MCP Configuration

Add to your MCP client configuration:

#### Local/stdio Configuration
```json
{
  "mcpServers": {
    "sysinfo": {
      "type": "stdio",
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-sysinfo", "python", "main.py"]
    }
  }
}
```

#### Remote/HTTP Configuration
```json
{
  "mcpServers": {
    "sysinfo": {
      "type": "http",
      "url": "http://localhost:8000/mcp/"
    }
  }
}
```

For HTTP mode, set the `PORT` environment variable:
```bash
PORT=8000 uv run python main.py
```

### Tool Usage Examples

#### Quick System Check
```python
# Get essential system overview
result = await client.call_tool("get_system_summary", {})
```

#### Targeted Diagnostics
```python
# Network troubleshooting
network_info = await client.call_tool("get_network_status", {})

# Storage analysis
storage_info = await client.call_tool("get_storage_analysis", {})

# Security audit
ports_info = await client.call_tool("get_open_ports", {})
```

#### Complete System Analysis
```python
# Full diagnostic report
full_report = await client.call_tool("get_full_system_report", {})
```

## Platform Support

- **macOS** 10.15+ (tested on Apple Silicon)
- **Linux** Ubuntu/Debian-based distributions
- **Windows** 10/11 (basic support)

## Architecture

```
src/sysinfo/
ā”œā”€ā”€ __init__.py          # Package exports
ā”œā”€ā”€ collectors.py        # Modular info collection functions
└── server.py           # FastMCP server implementation
main.py                 # Entry point
```

### Key Design Principles

- **Modular Tools**: Each diagnostic function is a separate MCP tool for targeted usage
- **Performance Optimized**: Raw text output without JSON wrapping overhead
- **Error-resilient**: Graceful handling of missing/inaccessible data
- **Cross-platform**: Platform-specific detection with intelligent fallbacks
- **Agent-friendly**: Clean markdown output optimized for LLM consumption
- **Minimal Dependencies**: Uses only `fastmcp`, `psutil`, and `requests`

## Development

### Testing
```bash
# Test with in-memory client
uv run python test_refactored.py

# Test individual collectors
uv run python -c "from src.sysinfo.collectors import get_hardware_info; print(get_hardware_info())"
```

### Adding New Collectors

1. Add function to `collectors.py`
2. Export in `__init__.py`
3. Call from `server.py` tool
4. Test cross-platform compatibility

## License

MIT License - see LICENSE file for details.

TDQS

A4/5.0

Scored across 10 tools

Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific system components like hardware, network, processes, storage, displays, devices, and user environment. There is no overlap in functionality; for example, get_hardware_details focuses on CPU/RAM/GPU, while get_storage_analysis covers disk partitions, and get_display_info handles monitor details. The descriptions reinforce these boundaries, making tool selection unambiguous for an agent.

Naming Consistency5/5

All tool names follow a consistent 'get_*' verb_noun pattern with snake_case, such as get_connected_devices, get_display_info, and get_running_processes. This uniformity makes the tool set predictable and easy to navigate, with no deviations in naming conventions across all 10 tools.

Tool Count5/5

With 10 tools, the server is well-scoped for system information gathering, covering key areas like hardware, network, processes, storage, and user environment. Each tool earns its place by addressing a distinct aspect of system diagnostics, avoiding bloat while ensuring comprehensive coverage for troubleshooting and analysis tasks.

Completeness5/5

The tool set provides complete coverage for system information diagnostics, including hardware details, network status, running processes, storage analysis, display info, connected devices, user environment, and a full system report. There are no obvious gaps; agents can perform thorough system analysis without dead ends, from basic summaries to in-depth reports.