Hardware Telemetry MCP Server avatar

Hardware Telemetry MCP Server

Pricing

Pay per usage

Go to Apify Store
Hardware Telemetry MCP Server

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

CQ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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, and tools/call.
  • Exposes one tool, get_system_stats, which reads live host metrics.
  • Optional one-shot mode: if an query input is provided, it runs a single request, prints the JSON-RPC response, and saves it to the default key-value store as OUTPUT, then exits cleanly.

It does not call any external network/API, and it does not require any credentials or API keys.


Input

FieldTypeRequiredDefaultDescription
querystringNo"" (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:

FieldTypeSource / meaning
cpuModelstringCPU model string (os.cpus()[0].model)
cpuCountnumberNumber of logical CPUs (os.cpus().length)
cpuSpeedMhznumber|nullReported clock speed in MHz
cpuLoadPercentnumberCPU utilization %, computed from idle/total time deltas over a ~250 ms sample
loadAveragenumber[][1m, 5m, 15m] load average (os.loadavg()). Returns [0,0,0] on Windows — the OS does not provide it there
memoryTotalBytesnumberTotal physical memory (os.totalmem())
memoryUsedBytesnumbertotalmem - freemem
memoryFreeBytesnumberFree physical memory (os.freemem())
memoryUsagePercentnumberused / total * 100, one decimal
uptimeSecondsnumberSystem uptime in seconds (os.uptime())
platformstringos.platform() (e.g. linux, win32)
archstringos.arch() (e.g. x64)
timestampstringISO 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 install
echo '{"query":"get_system_stats"}' # set as INPUT, or run as a server (see above)
npm start

Supported MCP methods

MethodBehavior
initializeReturns protocol version 2024-11-05, capabilities.tools, and server info
tools/listLists the single get_system_stats tool
tools/callExecutes 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.
  • loadAverage is [0,0,0] on Windows (OS limitation).
  • cpuLoadPercent is 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.