Hardware Telemetry MCP Server
Pricing
Pay per usage
Hardware Telemetry MCP Server
Model Context Protocol (MCP) server monitoring CPU, GPU, and memory load metrics.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
CQ
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
A Model Context Protocol (MCP) server that exposes real system resource telemetry of the machine it runs on. It speaks newline-delimited JSON-RPC 2.0 over stdio and provides a single tool, get_system_stats.
All values are measured at request time from the Node.js built-in os module. Nothing is randomized, hardcoded, or mocked.
Note on temperature. This Actor does not report CPU/GPU temperature. There is no portable way to read true hardware thermal sensors from pure Node.js, and the Apify container does not expose any thermal sensors. Rather than fabricate a number, temperature is intentionally omitted. The fields reported below are the ones the OS can measure truthfully.
What it does
- Runs as an MCP server over stdio (newline-delimited JSON-RPC 2.0).
- Implements the standard MCP methods
initialize,tools/list, andtools/call. - Exposes one tool,
get_system_stats, which reads live host metrics. - Optional one-shot mode: if an
queryinput is provided, it runs a single request, prints the JSON-RPC response, and saves it to the default key-value store asOUTPUT, then exits cleanly.
It does not call any external network/API, and it does not require any credentials or API keys.
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
query | string | No | "" (empty) | Optional one-shot command. May be a bare tool name (e.g. get_system_stats) or a raw JSON-RPC line (e.g. {"jsonrpc":"2.0","id":1,"method":"tools/list"}). If empty, the Actor starts as a long-lived MCP stdio server and reads JSON-RPC requests from standard input. |
Example input (one-shot):
{ "query": "get_system_stats" }
Output
get_system_stats payload
The tool returns a JSON object (inside the MCP tools/call result content) with these fields, all measured live:
| Field | Type | Source / meaning |
|---|---|---|
cpuModel | string | CPU model string (os.cpus()[0].model) |
cpuCount | number | Number of logical CPUs (os.cpus().length) |
cpuSpeedMhz | number|null | Reported clock speed in MHz |
cpuLoadPercent | number | CPU utilization %, computed from idle/total time deltas over a ~250 ms sample |
loadAverage | number[] | [1m, 5m, 15m] load average (os.loadavg()). Returns [0,0,0] on Windows — the OS does not provide it there |
memoryTotalBytes | number | Total physical memory (os.totalmem()) |
memoryUsedBytes | number | totalmem - freemem |
memoryFreeBytes | number | Free physical memory (os.freemem()) |
memoryUsagePercent | number | used / total * 100, one decimal |
uptimeSeconds | number | System uptime in seconds (os.uptime()) |
platform | string | os.platform() (e.g. linux, win32) |
arch | string | os.arch() (e.g. x64) |
timestamp | string | ISO 8601 reading time |
When run with a query input, the full JSON-RPC response is also written to the default key-value store under the key OUTPUT.
Example response:
{"jsonrpc": "2.0","id": 1,"result": {"content": [{"type": "text","text": "{\"cpuModel\":\"Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz\",\"cpuCount\":6,\"cpuSpeedMhz\":2904,\"cpuLoadPercent\":12.4,\"loadAverage\":[0,0,0],\"memoryTotalBytes\":68632096768,\"memoryUsedBytes\":38730981376,\"memoryFreeBytes\":29901115392,\"memoryUsagePercent\":56.4,\"uptimeSeconds\":384100,\"platform\":\"linux\",\"arch\":\"x64\",\"timestamp\":\"2026-06-24T11:35:32.088Z\"}"}]}}
Authentication / setup
None required. No API keys, no external services. The Actor only reads metrics of the host it runs on.
Usage
As a one-shot Actor run (Apify)
Set the input and run:
{ "query": "get_system_stats" }
The JSON-RPC response is printed to the log and saved to the key-value store as OUTPUT.
As an MCP server (stdio)
Leave query empty / unset and pipe JSON-RPC requests to stdin, one per line:
printf '%s\n%s\n' \'{"jsonrpc":"2.0","id":1,"method":"initialize"}' \'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_system_stats"}}' \| npm start
Run locally
npm installecho '{"query":"get_system_stats"}' # set as INPUT, or run as a server (see above)npm start
Supported MCP methods
| Method | Behavior |
|---|---|
initialize | Returns protocol version 2024-11-05, capabilities.tools, and server info |
tools/list | Lists the single get_system_stats tool |
tools/call | Executes get_system_stats; unknown tools return JSON-RPC error -32601 |
| (other) | Returns JSON-RPC error -32601 (method not found) |
Malformed input lines return a JSON-RPC parse error (-32700) instead of crashing.
Limitations
- No temperature. CPU/GPU thermal data is not reported (no sensor access in the runtime — see note above).
- What you measure is the runtime host. On the Apify platform, the metrics describe the Actor's container/VM, not your local machine.
loadAverageis[0,0,0]on Windows (OS limitation).cpuLoadPercentis sampled over ~250 ms, so it reflects the load during that short window, not a long-term average.- Single tool only (
get_system_stats). No GPU-specific metrics, no per-process stats, no disk/network I/O metrics.
License
Provided as-is. See the actor listing for details.