A Model Context Protocol (MCP) server that provides real-time system information and metrics. This server exposes CPU usage, memory statistics, disk information, network status, and running processes through a standardized MCP interface.
get_cpu_info- Retrieve CPU usage, core counts, frequency, and load averageget_memory_info- Get virtual and swap memory statisticsget_disk_info- Disk usage information for all mounts or specific pathsget_network_info- Network interface information and I/O statisticsget_process_list- Running processes with sorting and filtering optionsget_system_uptime- System boot time and uptime informationget_temperature_info- Temperature sensors and fan speeds (when available)
system://overview- Comprehensive system overview with all metricssystem://processes- Current process list resource
- Real-time metrics with configurable caching
- Cross-platform support (Windows, macOS, Linux)
- Security-focused with sensitive data filtering
- Performance optimized with intelligent caching
- Comprehensive error handling
- Environment variable configuration
The easiest way to install and use this MCP server is with uvx:
uvx install mcp-system-infoThen configure it in your MCP client (like Claude Desktop):
{
"mcpServers": {
"system-info": {
"command": "uvx",
"args": ["mcp-system-info"]
}
}
}For local development:
-
Clone the repository:
git clone <repository-url> cd mcp-system-info
-
Install dependencies:
uv sync
-
Run the server:
uv run mcp-system-info
mcp-system-info/
├── src/
│ └── system_info_mcp/
│ ├── __init__.py
│ ├── server.py # Main FastMCP server
│ ├── tools.py # Tool implementations
│ ├── resources.py # Resource handlers
│ ├── config.py # Configuration management
│ └── utils.py # Utility functions
├── tests/ # Comprehensive test suite
├── pyproject.toml # Project configuration
└── README.md
-
Install development dependencies:
uv sync --dev
-
Run tests:
uv run pytest
-
Run tests with coverage:
uv run pytest --cov=system_info_mcp --cov-report=term-missing
-
Format code:
uv run black src/ tests/
-
Lint code:
uv run ruff check src/ tests/
-
Type checking:
uv run mypy src/
# Build distribution files
uv buildThis creates distribution files in the dist/ directory:
mcp_system_info-*.whl(wheel file)mcp_system_info-*.tar.gz(source distribution)
Test the package locally before publishing:
# Test running the command directly from wheel file
uvx --from ./dist/mcp_system_info-*.whl mcp-system-info
# Test with environment variables
SYSINFO_LOG_LEVEL=DEBUG uvx --from ./dist/mcp_system_info-*.whl mcp-system-info# Publish to PyPI (requires PyPI account and token)
uv publish
# Or publish to TestPyPI first
uv publish --repository testpypiNote: You'll need to:
- Create a PyPI account at https://pypi.org
- Generate an API token in your account settings
- Configure uv with your credentials or use environment variables
The server supports configuration through environment variables:
SYSINFO_CACHE_TTL- Cache time-to-live in seconds (default: 5)SYSINFO_MAX_PROCESSES- Maximum processes to return (default: 100)SYSINFO_ENABLE_TEMP- Enable temperature sensors (default: true)SYSINFO_LOG_LEVEL- Logging level (default: INFO)
SYSINFO_TRANSPORT- Transport protocol:stdio,sse, orstreamable-http(default: stdio)SYSINFO_HOST- Host to bind to for HTTP transports (default: localhost)SYSINFO_PORT- Port to bind to for HTTP transports (default: 8001)SYSINFO_MOUNT_PATH- Mount path for SSE transport (default: /mcp)
1. STDIO (Default)
# Uses standard input/output - no network port
uv run mcp-system-info2. SSE (Server-Sent Events)
# HTTP server with real-time streaming
SYSINFO_TRANSPORT=sse SYSINFO_PORT=8001 uv run mcp-system-info
# Server will be available at http://localhost:8001/mcp3. Streamable HTTP
# HTTP server with request/response
SYSINFO_TRANSPORT=streamable-http SYSINFO_PORT=9000 uv run mcp-system-infoSYSINFO_TRANSPORT=sse \
SYSINFO_HOST=0.0.0.0 \
SYSINFO_PORT=8001 \
SYSINFO_CACHE_TTL=10 \
SYSINFO_LOG_LEVEL=DEBUG \
uv run mcp-system-info# Basic CPU info
{
"name": "get_cpu_info_tool",
"arguments": {
"interval": 1.0,
"per_cpu": false
}
}# Top 10 processes by memory usage
{
"name": "get_process_list_tool",
"arguments": {
"limit": 10,
"sort_by": "memory",
"filter_name": "python"
}
}# All disk usage
{
"name": "get_disk_info_tool",
"arguments": {}
}
# Specific path
{
"name": "get_disk_info_tool",
"arguments": {
"path": "/home"
}
}# Request comprehensive system overview
{
"uri": "system://overview"
}# Get top processes resource
{
"uri": "system://processes"
}-
Locate your Claude Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
-
Add the MCP server configuration:
{
"mcpServers": {
"system-info": {
"command": "uvx",
"args": ["mcp-system-info"],
"env": {
"SYSINFO_CACHE_TTL": "10",
"SYSINFO_LOG_LEVEL": "INFO"
}
}
}
}{
"mcpServers": {
"system-info": {
"command": "uv",
"args": [
"--directory",
"/path/to/mcp-system-info",
"run",
"mcp-system-info"
],
"env": {
"SYSINFO_TRANSPORT": "stdio",
"SYSINFO_CACHE_TTL": "10",
"SYSINFO_LOG_LEVEL": "INFO"
}
}
}
}{
"mcpServers": {
"system-info-http": {
"command": "uvx",
"args": ["mcp-system-info"],
"env": {
"SYSINFO_TRANSPORT": "sse",
"SYSINFO_HOST": "localhost",
"SYSINFO_PORT": "8001",
"SYSINFO_MOUNT_PATH": "/mcp"
}
}
}
}- Restart Claude Desktop to load the new server.
Once configured, you can ask Claude to:
- "What's my current CPU usage?"
- "Show me the top 10 processes using the most memory"
- "How much disk space is available?"
- "What's my system uptime?"
- "Give me a complete system overview"
# Run all tests
uv run pytest
# Run with verbose output
uv run pytest -v
# Run specific test file
uv run pytest tests/test_tools.py
# Run with coverage report
uv run pytest --cov=system_info_mcp --cov-report=htmltests/test_config.py- Configuration validation teststests/test_tools.py- Tool implementation teststests/test_resources.py- Resource handler teststests/test_utils.py- Utility function tests
All tests use mocked dependencies for consistent, fast execution across different environments.
- Caching: Intelligent caching reduces system calls and improves response times
- Configurable intervals: Adjust cache TTL based on your needs
- Lazy loading: Temperature sensors and other optional features load only when needed
- Async support: Built on FastMCP for efficient async operations
- Read-only operations: No system modification capabilities
- Sensitive data filtering: Command-line arguments are filtered for passwords, tokens, etc.
- Input validation: All parameters are validated before processing
- Error isolation: Failures in one tool don't affect others
- macOS - Full support including temperature sensors on supported hardware
- Linux - Full support with hardware-dependent sensor availability
- Windows - Full support with platform-specific optimizations
- Permission errors: Some system information may require elevated privileges
- Missing sensors: Temperature/fan data availability varies by hardware
- Performance impact: Reduce cache TTL or limit process counts for better performance
Enable debug logging for troubleshooting:
SYSINFO_LOG_LEVEL=DEBUG uv run mcp-system-infoTest that tools work correctly:
uv run python -c "from system_info_mcp.tools import get_cpu_info; print(get_cpu_info())"- Fork the repository
- Create a feature branch
- Make your changes with tests
- Run the full test suite
- Submit a pull request
- Follow PEP 8 style guidelines
- Add type hints to all functions
- Write tests for new functionality
- Update documentation as needed
[Add your license information here]
[Add support information here]