Hardware Health Check (out-of-band, read-only)
MCP Server
- Server:
redfish-mcp (NetClaw-authored, spec 094)
- Tools:
redfish_status, redfish_systems, redfish_thermal_power,
redfish_managers, redfish_firmware, redfish_logs
- Requires:
REDFISH_URL, REDFISH_USERNAME, REDFISH_PASSWORD
- Read-only. No power control exists here — see below.
The one distinction this skill is for
NetClaw could not previously tell "the box is dead" from "the network to the box is
dead." A BMC can, because it answers when the operating system cannot. But the distinction is
symmetric, and each direction is a different wrong answer:
| Reading |
What it establishes |
What you must NOT say |
| BMC unreachable |
nothing about the host |
"the host is down" |
BMC reachable, Off |
the host is powered off — a fact |
— |
BMC reachable, On |
the host has power |
"the host is healthy / the OS is up" |
BMC reachable, health Critical |
a hardware fault is asserted |
anything about the OS |
The BMC has its own NIC, its own network path and its own credentials, all separate from the
host's. A BMC timeout is a statement about the BMC path, not about the server. Reporting
"host down" from a BMC timeout is precisely the mistake out-of-band access exists to prevent.
Every response carries a verdict saying which of the rows above applies. redfish-mcp will
not emit a host claim without one — the tool refuses, so the qualifier cannot be dropped.
An auth rejection means the BMC is alive. HTTP 401/403 proves it answered; that is a
credential problem, not a dead box, and the tool says so explicitly.
Workflow: is the box dead, or is it the network?
redfish_status — does the BMC answer at all?
- If unreachable: stop and report exactly that. You have learned nothing about the host.
Say which was tested (the BMC path) and what remains unknown (everything about the host).
- If reachable:
redfish_systems — PowerState and Status.Health
- Read the
verdict, and phrase the answer in its terms. Off is a conclusion; On is not.
- If
On but the service is unreachable in band, the finding is "powered on, not serving" —
which points at the OS, the application or the data network, not at the hardware.
Workflow: hardware fault triage
redfish_systems — Status.Health and the CPU/memory rollups
redfish_thermal_power — temperatures against their critical thresholds, fan readings, PSU
health, consumed watts
redfish_logs — SEL entries by severity, newest first
redfish_firmware — is this a known-bad firmware level?
redfish_managers — BMC firmware version, which is a finding in its own right
Reading results honestly
- An empty SEL is not a clean bill of health. SELs are ring buffers cleared during service,
so no entries means no recorded entries. The tool says this in
gaps.
- An empty firmware inventory means the BMC does not populate it, not that the machine has
no firmware. Several vendors return nothing here.
- A missing Thermal or Power subresource is a coverage gap, not a pass. Vendors implement
different Redfish subsets; the tool marks it
unavailable rather than reporting no problem.
- TLS verification is off by default because BMCs ship self-signed certificates. Every
response discloses it. On an untrusted network the readings could be forged — say so if it
matters to the conclusion.
- Thermal and power are hardware facts and establish nothing about the OS.
Important Rules
- No power control. No reset, no power on/off, no virtual media. Redfish exposes
#ComputerSystem.Reset and this server deliberately does not implement it — a power cycle on
the wrong box is an outage. If a reset is genuinely needed, that is an operator action through
the BMC UI, gated by change control.
- BMC credentials are root-equivalent on the host. Store them in Vault where available;
never echo them into a report or a GAIT entry.
- Always name which vantage point answered — "the BMC reports" is not "the host reports".
- Record in GAIT — log the endpoint, the verdict, and the reading it came from.
Integration with Other Skills
| Skill |
How They Work Together |
globalping-probes |
Outside-in reachability — pairs with a BMC verdict to separate host from network |
zabbix-nms / suzieq-observability |
In-band polling history; a BMC answers when those go silent |
pyats-health-check |
In-band device health once the box is known to be powered and booted |
servicenow-change-workflow |
Raise the CR if a hardware fault needs an intervention |
gait-session-tracking |
Record every health check and its verdict |
Environment Variables
REDFISH_URL — BMC base URL (e.g. https://10.0.0.5). Never guessed.
REDFISH_USERNAME / REDFISH_PASSWORD — BMC credentials
REDFISH_VERIFY_TLS — true to require a valid certificate (default false)
REDFISH_TIMEOUT — per-request seconds (default 15)
1---2name: hardware-health-check3description: Out-of-band hardware health via Redfish BMC (read-only) — power state, component health, thermal and power readings, firmware inventory, SEL log triage. Use when determining whether a host is powered off versus unreachable, checking hardware faults, reviewing thermal or PSU state, or triaging BMC event logs4license: Apache-2.05---6
7# Hardware Health Check (out-of-band, read-only)
8
9## MCP Server
10
11- **Server**: `redfish-mcp` (NetClaw-authored, spec 094)
12- **Tools**: `redfish_status`, `redfish_systems`, `redfish_thermal_power`,
13 `redfish_managers`, `redfish_firmware`, `redfish_logs`
14- **Requires**: `REDFISH_URL`, `REDFISH_USERNAME`, `REDFISH_PASSWORD`
15- **Read-only.** No power control exists here — see below.
16
17## The one distinction this skill is for
18
19NetClaw could not previously tell **"the box is dead"** from **"the network to the box is
20dead."** A BMC can, because it answers when the operating system cannot. But the distinction is
21**symmetric**, and each direction is a different wrong answer:
22
23| Reading | What it establishes | What you must NOT say |
24|---|---|---|
25| BMC **unreachable** | **nothing about the host** | "the host is down" |
26| BMC reachable, `Off` | the host **is** powered off — a fact | — |
27| BMC reachable, `On` | the host has **power** | "the host is healthy / the OS is up" |
28| BMC reachable, health `Critical` | a **hardware** fault is asserted | anything about the OS |
29
30The BMC has its own NIC, its own network path and its own credentials, all separate from the
31host's. **A BMC timeout is a statement about the BMC path, not about the server.** Reporting
32"host down" from a BMC timeout is precisely the mistake out-of-band access exists to prevent.
33
34Every response carries a `verdict` saying which of the rows above applies. `redfish-mcp` will
35not emit a host claim without one — the tool refuses, so the qualifier cannot be dropped.
36
37**An auth rejection means the BMC is alive.** HTTP 401/403 proves it answered; that is a
38credential problem, not a dead box, and the tool says so explicitly.
39
40## Workflow: is the box dead, or is it the network?
41
421. `redfish_status` — does the BMC answer at all?
432. **If unreachable: stop and report exactly that.** You have learned nothing about the host.
44 Say which was tested (the BMC path) and what remains unknown (everything about the host).
453. If reachable: `redfish_systems` — `PowerState` and `Status.Health`
464. Read the `verdict`, and phrase the answer in its terms. `Off` is a conclusion; `On` is not.
475. If `On` but the service is unreachable in band, the finding is **"powered on, not serving"** —
48 which points at the OS, the application or the data network, not at the hardware.
49
50## Workflow: hardware fault triage
51
521. `redfish_systems` — `Status.Health` and the CPU/memory rollups
532. `redfish_thermal_power` — temperatures against their critical thresholds, fan readings, PSU
54 health, consumed watts
553. `redfish_logs` — SEL entries by severity, newest first
564. `redfish_firmware` — is this a known-bad firmware level?
575. `redfish_managers` — BMC firmware version, which is a finding in its own right
58
59## Reading results honestly
60
61- **An empty SEL is not a clean bill of health.** SELs are ring buffers cleared during service,
62 so no entries means no *recorded* entries. The tool says this in `gaps`.
63- **An empty firmware inventory means the BMC does not populate it**, not that the machine has
64 no firmware. Several vendors return nothing here.
65- **A missing Thermal or Power subresource is a coverage gap, not a pass.** Vendors implement
66 different Redfish subsets; the tool marks it `unavailable` rather than reporting no problem.
67- **TLS verification is off by default** because BMCs ship self-signed certificates. Every
68 response discloses it. On an untrusted network the readings could be forged — say so if it
69 matters to the conclusion.
70- **Thermal and power are hardware facts** and establish nothing about the OS.
71
72## Important Rules
73
74- **No power control.** No reset, no power on/off, no virtual media. Redfish exposes
75 `#ComputerSystem.Reset` and this server deliberately does not implement it — a power cycle on
76 the wrong box is an outage. If a reset is genuinely needed, that is an operator action through
77 the BMC UI, gated by change control.
78- **BMC credentials are root-equivalent on the host.** Store them in Vault where available;
79 never echo them into a report or a GAIT entry.
80- **Always name which vantage point answered** — "the BMC reports" is not "the host reports".
81- **Record in GAIT** — log the endpoint, the verdict, and the reading it came from.
82
83## Integration with Other Skills
84
85| Skill | How They Work Together |
86|-------|----------------------|
87| `globalping-probes` | Outside-in reachability — pairs with a BMC verdict to separate host from network |
88| `zabbix-nms` / `suzieq-observability` | In-band polling history; a BMC answers when those go silent |
89| `pyats-health-check` | In-band device health once the box is known to be powered and booted |
90| `servicenow-change-workflow` | Raise the CR if a hardware fault needs an intervention |
91| `gait-session-tracking` | Record every health check and its verdict |
92
93## Environment Variables
94
95- `REDFISH_URL` — BMC base URL (e.g. `https://10.0.0.5`). Never guessed.
96- `REDFISH_USERNAME` / `REDFISH_PASSWORD` — BMC credentials
97- `REDFISH_VERIFY_TLS` — `true` to require a valid certificate (default `false`)
98- `REDFISH_TIMEOUT` — per-request seconds (default 15)