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
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 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
npminstallecho'{"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.
