Skip to main content
Glama

DeviceMCP

A cross-platform Model Context Protocol (MCP) server that provides device information including system specs, battery status, storage, and memory details for Windows, macOS, Linux, and Android.

Features

  • πŸ–₯️ Cross-Platform Support: Works on Windows, macOS, Linux, and Android (via Termux)

  • πŸ”‹ Battery Information: Get real-time battery level, charging status, and time remaining

  • πŸ’Ύ Storage Details: Monitor disk usage across all drives and partitions

  • 🧠 Memory Stats: Track RAM and swap memory usage

  • πŸ“Š System Info: Access OS version, hostname, architecture, and processor details

  • πŸ—οΈ Modular Architecture: Clean, maintainable code with platform-specific implementations

Installation

Prerequisites

  • Python 3.8 or higher

  • pip or uv package manager

Install Dependencies

pip install -r requirements.txt

Or using uv:

uv pip install -r requirements.txt

For Android (Termux)

pkg install python
pip install fastmcp psutil pydantic
# Optional: Install termux-api for better battery info
pkg install termux-api

Usage

Run Locally (stdio transport)

python server.py

Or using FastMCP CLI:

fastmcp run server.py:mcp

Run with HTTP Transport

python server.py --transport http --port 8000

Or using FastMCP CLI:

fastmcp run server.py:mcp --transport http --port 8000

Install in Claude Desktop

Generate the configuration file:

fastmcp install server.py:mcp --name DeviceMCP

Then follow the prompts to install it in Claude Desktop.

Available Tools

1. get_device_info

Get comprehensive device information.

Returns:

{
  "os_name": "Windows",
  "os_version": "11",
  "hostname": "MY-LAPTOP",
  "architecture": "x86_64",
  "processor": "Intel Core i7-9750H",
  "platform": "windows"
}

2. get_battery_level

Get battery information and charging status.

Returns:

{
  "percentage": 85.5,
  "is_charging": true,
  "is_plugged": true,
  "time_remaining": 3600,
  "time_remaining_formatted": "1h 0m",
  "has_battery": true
}

3. get_storage_info

Get storage information for all drives/partitions.

Returns:

[
  {
    "total_bytes": 512000000000,
    "used_bytes": 256000000000,
    "free_bytes": 256000000000,
    "usage_percent": 50.0,
    "mount_point": "C:\\",
    "total_formatted": "476.84 GB",
    "used_formatted": "238.42 GB",
    "free_formatted": "238.42 GB"
  }
]

4. get_memory_info

Get RAM and swap memory information.

Returns:

{
  "total_bytes": 16000000000,
  "available_bytes": 8000000000,
  "used_bytes": 8000000000,
  "usage_percent": 50.0,
  "swap_total_bytes": 4000000000,
  "swap_used_bytes": 1000000000,
  "total_formatted": "14.90 GB",
  "available_formatted": "7.45 GB",
  "used_formatted": "7.45 GB",
  "swap_total_formatted": "3.73 GB",
  "swap_used_formatted": "953.67 MB"
}

5. get_system_summary

Get all device information in one comprehensive call.

Returns: Combined output of all the above tools plus platform detection.

Project Structure

devicemcp/
β”œβ”€β”€ README.md                    # This file
β”œβ”€β”€ requirements.txt             # Python dependencies
β”œβ”€β”€ fastmcp.json                 # FastMCP configuration
β”œβ”€β”€ server.py                    # Main MCP server entry point
β”œβ”€β”€ core/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ base.py                  # Abstract base classes
β”‚   └── models.py                # Pydantic data models
β”œβ”€β”€ platforms/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ windows.py               # Windows implementation
β”‚   β”œβ”€β”€ macos.py                 # macOS implementation
β”‚   β”œβ”€β”€ linux.py                 # Linux implementation
β”‚   └── android.py               # Android implementation
└── utils/
    β”œβ”€β”€ __init__.py
    β”œβ”€β”€ platform_detector.py    # Platform auto-detection
    └── formatters.py            # Output formatting utilities

Architecture

The project follows a modular architecture with clear separation of concerns:

  • Core Layer: Abstract base classes and data models

  • Platform Layer: Platform-specific implementations

  • Utils Layer: Helper functions for detection and formatting

  • Server Layer: FastMCP server with tool definitions

Each platform provider implements the DeviceInfoProvider interface, ensuring consistent behavior across all platforms.

Extending the Server

Adding a New Platform

  1. Create a new file in platforms/ (e.g., bsd.py)

  2. Implement the DeviceInfoProvider interface

  3. Add platform detection logic in utils/platform_detector.py

  4. Import and register in the factory function

Adding New Metrics

  1. Add new models in core/models.py

  2. Add abstract methods in core/base.py

  3. Implement in each platform provider

  4. Add tool function in server.py

Development

Running Tests

pytest tests/

Code Style

The project follows PEP 8 style guidelines. Format code with:

black .
isort .

Troubleshooting

Battery Information Not Available

Some desktop systems don't have batteries. The server will return has_battery: false in such cases.

Permission Errors on Storage Info

Some drives/partitions may require elevated permissions. The server silently skips inaccessible drives.

Android Battery Info

For best results on Android, install termux-api:

pkg install termux-api

License

MIT License - feel free to use this in your own projects!

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

For issues and questions, please open an issue on the GitHub repository.

-
security - not tested
F
license - not found
-
quality - not tested

Resources

Looking for Admin?

Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JahidHasanCO/DeviceMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server